蓝桥杯嵌入式赛道解决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;
}
相关推荐
dddwjzx2 小时前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
piaoyiren2 小时前
普中A6 静态数码管显示 数字
单片机·嵌入式·普中a6
阿拉斯攀登8 小时前
平台设备驱动:platform bus 与设备树
linux·嵌入式硬件·嵌入式·linux驱动·字符设备驱动
阿拉斯攀登11 小时前
SPI 设备驱动开发
linux·驱动开发·嵌入式硬件·linux内核·嵌入式·linux驱动·spi
阿拉斯攀登11 小时前
定时器与延时:内核定时器、hrtimer 与延时函数
linux·嵌入式硬件·linux内核·嵌入式·linux驱动
天空'之城11 小时前
Linux 系统编程 17:零拷贝技术全解
linux·嵌入式·零拷贝技术全解
阿拉斯攀登13 小时前
I2C 设备驱动开发
linux·驱动开发·嵌入式硬件·嵌入式·linux驱动·i2c·字符设备驱动
dddwjzx1 天前
嵌入式Linux C应用编程入门——线程 (二)
linux·嵌入式
Dlrb12111 天前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
阿拉斯攀登1 天前
字符设备驱动:file_operations 与读写实现
linux·嵌入式·linux驱动·字符设备驱动