第一个外设我想给大家介绍LED,比较简单但是十分重要
cubemx配置
包括PC8~PC15八个灯和PD2锁存器都设置为推挽输出模式,由于输出默认就是推挽输出,所以只要在引脚上面简单的配置为输出模式,保持默认状态就行
代码
由于灯是在低电平的时候被点亮,而个人的习惯是当对应位置1有效,所以先取反再用ODR寄存器写入
void LED_disp(uint8_t led)//LED显示函数
{
GPIOC->ODR=~led<<8;//输出电平
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//锁存器开
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//锁存器关
}
一些小技巧
①由于在做题的过程中实际上是只改变某一个灯的状态,这就要保证其他灯的状态不改变,所以我的习惯是用一个uint8_t ucled的变量来保存状态
②翻转 熄灭 点亮 (以LD1为例)
翻转的过程其实是某位取反,熄灭和点亮就是某位置0置1
LED_disp(ucled^=0x01);//翻转LD1,哪一位取反就是与1进行异或,其他位与0异或
LED_disp(ucled&=~0x01);//熄灭LD1,哪一位置0就是与0进行相与,其他位与1相与
LED_disp(ucled|=0x01);//点亮LD1,哪一位置1就是与1进行相或,其他位与0相或