高中生
最后登录1970-1-1
在线时间 小时
注册时间2020-5-5
|
今天学到串口控制LED灯 有这么一个宏
/* 直接操作寄存器的方法控制IO */
#define digitalHi(p,i) {p->BSRR=i;} //输出为高电平
#define digitalLo(p,i) {p->BRR=i;} //输出低电平
#define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态
/* 定义控制IO的宏 */
#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)
digitalHi(p,i) 其中的p->BSRR 是代表 LED1_GPIO_PORT->BSRR 是吗? 不过这个 i 是什么鬼?给一个PIN它怎么会改变电平?
是利用其二进制值将对应位的 1 赋值给BSRR寄存器吗? 是这样理解吗?
PIN_0 的二进制为 0000 0000 0000 00001
PIN_1 的二进制为 0000 0000 0000 00010
PIN_5 的二进制为 0000 0000 0001 00000
|
|