将控制四盏LED灯的GPIO端口、GPIO引脚以及GPIO端口时钟封装起来 ②宏定义控制Led的亮灭 该过程通过直接向BSRR寄存器写入控制指令来实现对BSRR低16位写1输出高电平,对BSRR高16位写1输出低电平,对ODR寄存器某位进行异或操作可反转位的状态。 代码中的“\”是C语言中的续行符语法,表示续行符的下一行与续行符所在的...
4 #define digitalLo(p,i) {p->BSRR=(uint32_t)i << 16;}//输出低电平 5 #define digitalToggle(p,i) {p->ODR ^=i;}//输出反转状态 6 7 8/* 定义控制IO的宏 */ 9 #define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_PIN) 10 #define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_PIN...
#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_PIN) #define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_PIN) #define LED1_ON digitalLo(LED1_GPIO_PORT,LED1_PIN) #define LED2_TOGGLE digitalToggle(LED2_GPIO_PORT,LED2_PIN) #define LED2_OFF digitalHi(LED2_GPIO_PORT,LED2_PIN) #defi...
#define LED2_ON digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN) 这部分宏控制LED亮灭的操作是直接向BSRR、BRR和ODR这三个寄存器写入控制指令来实现的,对BSRR写1输出高电平,对BRR写1输出低电平,对ODR寄存器某位进行异或操作可反转位的状态。代码中的“\”是C语言中的续行符语法,表示续行符的下一行与续行符...
这部分宏控制LED 亮灭的操作是直接向BSRR、BRR 和ODR 这三个寄存器写入控制指令来实现的,对BSRR 写1 输出高电平,对BRR 写1 输出低电平,对ODR 寄存器某位进行异或操作可反转位的状态。 RGB 彩灯可以实现混色,如最后一段代码我们控制红灯和绿灯亮而蓝灯灭,可混出黄色效果。
if(PinState != GPIO_PIN_RESET){GPIOx->BSRR = GPIO_Pin;}else{GPIOx->BSRR = (uint32_t)GPIO_Pin <<16u;} 这是函数的主要逻辑。如果 PinState 不等于 GPIO_PIN_RESET,即要设置的输出电平为高电平, 那么将 GPIOx->BSRR 寄存器的对应引脚位...
(1)端口模式寄存器GPIOx_MODER 本寄存器的功能为设置GPIO端口的方向和模式,总共0到32位,每两位就是该port下的pin值,例如将GPIOA_MODER的MODER0[1:0]配置为00,就是将GPIOA的pin0管脚功能配置为输入类型的管脚,将GPIOA_MODER的MODER1[1:0]配置为00,就是将GPIOA的pin1管脚功能配置为输入类型的管脚, 以此类...
1个32位置位/复位寄存器:GPIOx_BSRR 1个32位锁定寄存器:GPIOx_LCKR 2个32位复用功能选择寄存器:GPIOx_AFRH 和 GPIOx_AFRL MCU是将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入) ,并且是从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据 具体的GPIO相关功能这里不做多余的说...
/*直接操作寄存器的方法控制 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...
LED_GPIO_CLK_ALLENABLE(); /* 配置所有的LED指示灯GPIO为推挽输出模式 由于将GPIO设置为输出时,GPIO输出寄存器的值缺省是0,因此会驱动LED点亮. 这是我不希望的,因此在改变GPIO为输出前,先关闭LED指示灯 */ bsp_LedOff(1); bsp_LedOff(2); bsp_LedOff(3); ...