蓝桥杯嵌入式赛道解决LCD和LED引脚冲突的问题

简介

在蓝桥杯嵌入式赛道中,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;
}
相关推荐
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
国产化创客3 天前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件
goldenrolan3 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
w4ysonch3 天前
我手搓了一套适用于任何嵌入式项目的跨线程通信API
嵌入式
海砥装备HardAus3 天前
大载重工业无人机动力容错控制:单电机失效下的应急重构算法设计
算法·重构·嵌入式·无人机
济6173 天前
BMS系统专栏:电池状态监控任务
嵌入式硬件·嵌入式·bms电池系统管理
济6173 天前
BMS系统专栏: BMS_ProtectTask 电池保护任务
嵌入式硬件·嵌入式·bms电池管理
番茄灭世神4 天前
RTC授时时间戳转换工具
c语言·单片机·嵌入式
charlie1145141914 天前
嵌入式Linux驱动开发——从轮询到中断
linux·开发语言·驱动开发·嵌入式
2023自学中4 天前
imx6ull开发板,sd卡启动运行linux,手动给开发板的 emmc 做分区、烧系统
linux·嵌入式·开发板