蓝桥杯嵌入式赛道解决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;
}
相关推荐
BreezeJuvenile9 小时前
嵌入式C语言常见考察点(2)
c语言·嵌入式
左手厨刀右手茼蒿1 天前
数据仓库的架构演进:从MySQL到ClickHouse到数据湖的工程化实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿1 天前
创业团队技术选型:别用大厂架构解决小团队问题
linux·嵌入式·系统内核
DoLovya1 天前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
小嵌同学1 天前
Linux 内核中断处理机制详解:上半部、下半部与延迟执行策略
linux·嵌入式·bsp
深念Y1 天前
无头电视盒子改服务器调优记录
linux·运维·服务器·串口·嵌入式·电视盒子·海思
北京迅为2 天前
【迅为开发板专属工具】把烧写入口放进浏览器|Topeet RK Flash
linux·人工智能·嵌入式·rk3568·烧写
捷瑞电子工坊3 天前
FreeRTOS 临界段:为什么关中断?怎么用才安全?
嵌入式·freertos·实时操作系统·临界段·临界区
Dr.kangder3 天前
嵌入式面试总结(二十二)——指针
java·面试·职场和发展·架构·嵌入式
Dr.kangder3 天前
嵌入式面试总结(二十)——ISA原理
单片机·面试·职场和发展·系统架构·嵌入式