直接概述实现各模块功能的代码配置
LCD
LED和LCD引脚冲突问题参见该博客
简单来说就是在lcd的配置文件中的LCDInit,LCD_Clear,LCD_DIsplayStringLine函数加入以下代码
uint16_t temp = GPIOC->ODR;
```
//源码
```
GPIOC->ODR = temp;
读取 GPIOC 的输出数据寄存器(ODR)的当前值,并存入临时变量 temp
-
GPIOC->ODR
访问的是 GPIOC 外设的 ODR 寄存器,它存储了当前 GPIO 端口的输出状态(每一位对应一个引脚的电平)。 -
uint16_t
表示 16 位无符号整数,因为 STM32 的 GPIO 端口通常是 16 位的(如 PC0~PC15)。
写入 相同的值回 ODR 寄存器
这相当于把之前读取的值重新写回 ODR,理论上不会改变 GPIO 的输出状态。
同时在main函数里LCD初始化之前先把PD2锁住。
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
LCD初始化完成,接下来讲述如何实现LCD功能,还是两个最基本的函数
char text[20];
void lcd_show(void)
{
sprintf(text, "...text...");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
}
LCDInit();
LCD_Clear(Black);
LCD_SetBackColor(Black);
LCD_SetTextColor(White);