1.寄存器的方式控制:
从图中可知BSRR是一个32位的寄存器,为端口的置1或清0寄存器,低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。
(每个GPIO有16个口,对应寄存器的低16位和高16位)
举个栗子:
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_PIN GPIO_PIN_13
#define LED(x) LED_GPIO_PORT->BSRR = LED_GPIO_PIN << (16 * (!x))
就能实现对LED的控制。如果为LED(1),即将GPIOC的13口置1,等号后边运算结果就等于16位的GPIO,即向BSRR寄存器的13位写1,为低位,相应的GPIO口被拉高;反之,如果为LED(0),即将GPIOC的13口置0,等号后边运算结果就等于16位的GPIO向高位移16位,即向BSRR寄存器的29位写1,为高位,相应的GPIO口被拉低;
2.库函数的方法控制
#define LED1(x) GPIO_WriteBit(LED_GPIO_PORT,LED_GPIO_PIN,(BitAction)(x))
#define LED2(x) do{ x ? GPIO_SetBits(LED_GPI