简介
在蓝桥杯嵌入式赛道中,STM32G431RBT6 官方开发板存在 LCD(ILI9341)与板载 LED(LD1-LD4)引脚冲突 的核心问题,根源是两者共用了 GPIOC 的部分引脚。
原理图分析

74LS573 是一款经典的 TTL 电平、8 位三态输出 D 型锁存器,属于 74LS 系列逻辑芯片,在数字电路、单片机外设扩展等场景中应用非常广泛。 PD2高电平是Q端状态改变,D端也会改变。通过控制PD2与解决LCD与LED间的引脚冲突问题。
main.c中的初始化
scss
LCD_Init();
LED_ON(3);
LCD_Clear(Black); //清除lcd为黑色
LCD_SetBackColor(Black); //设置背景颜色为黑色
LCD_SetTextColor(White); //设置字体颜色为白色
添加上lcd.c中通过提前保存状态,LCD操作完复位LED的状态,实现端口共用。
用到那些led的函数,观察了里面是否对GPIOC的引脚状态有改动,就使用相同方法。
ini
void LCD_Init(void)
{
u16 state=GPIOC->ODR; **//提前保存GPIOC的状态**
LCD_CtrlLinesConfig();
dummy = LCD_ReadReg(0);
if(dummy == 0x8230)
{
REG_8230_Init();
}
else
{
REG_932X_Init();
}
dummy = LCD_ReadReg(0);
GPIOC->ODR=state; **//恢复LED状态**
}
ini
void LCD_Clear(u16 Color)
{
u16 temp=GPIOC->ODR; **//提前保存GPIOC的状态**
u32 index = 0;
LCD_SetCursor(0x00, 0x0000);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for(index = 0; index < 76800; index++)
{
LCD_WriteRAM(Color);
}
GPIOC->ODR=temp; **//恢复LED状态**
}
ini
void LCD_DisplayStringLine(u8 Line, u8 *ptr)
{
uint16_t temp=GPIOC->ODR;
u32 i = 0;
u16 refcolumn = 319;//319;
while ((*ptr != 0) && (i < 20)) // 20
{
LCD_DisplayChar(Line, refcolumn, *ptr);
refcolumn -= 16;
ptr++;
i++;
}
GPIOC->ODR=temp;
}