你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F769I-DISC1】驱动ST7789LCD

[复制链接]
lugl 发布时间:2025-3-3 13:53

Stm32f769驱动LCD

【前言】

由于开发板没有配LCD屏,手上没有这个接口的LCD屏,刚好手上有个ST7789的屏,是4线SPI接口的,因此先把这个屏驱动起来。

【硬件接口定义】

1、查找屏的资料其定义如下:

image.png

2、再查找开发板的原理图,使用他的接口CN9、CN13来对接LCD屏,其接口图如下所示:

image.png

3、结合屏与开发板,定义引脚如下:

/*

LCD_PWR:PJ3

LCD_RST:PJ4

LCD_WR: PH6

LCD_CS: PA11

LCD_SCK PA12

LCD_SDA PB15

*/

4、首先偿试使用模拟SPI先来验证屏的工作是否正常。定义几个宏函数,用于驱动的时序产生。

define LCD_PWR(n) (n ? HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3, GPIO_PIN_RESET))

define LCD_RST(n) (n ? HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_4, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_4, GPIO_PIN_RESET))

define LCD_WR(n) (n ? HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_RESET))

define LCD_CS(n) (n ? HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET))

/*

LCD_SDA:PB15

LCD_SCK:PA12

*/

define LCD_SDA(n) (n ? HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET))

define LCD_SCK(n) (n ? HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET))

5、初始化GPIO

/**

函数名称 : lcd_gpio_init

函数功能 : lcd gpio初始化

输入参数 : 无

返回值 : 无

备注 : 无

**/

void lcd_gpio_init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

__HAL_RCC_GPIOJ_CLK_ENABLE();

__HAL_RCC_GPIOH_CLK_ENABLE();

/Configure GPIO pin : PA11 12 /

GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/Configure GPIO pins : PB15 /

GPIO_InitStruct.Pin = GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/Configure GPIO pin : PH 6 /

GPIO_InitStruct.Pin = GPIO_PIN_6;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);

/Configure GPIO pin : PJ 3 PJ4 /

GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11 | GPIO_PIN_12, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, GPIO_PIN_SET);

/Configure GPIO pin Output Level /

HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_SET);

}

6、其余的驱动移植正点原子的驱动,具体代码见附件

7、添加测试,在main.c中添加LCD初始与显示测试代码:

lcd_init();

lcd_show_string(10, 0, 108, 12, (uint8_t *)"STM32F767LCD", 24, 1);

lcd_show_chinese(72, 32, pandora_ch, 32, 4, 1);

8、测试效果:

image.png

源文件:

收藏 评论2 发布时间:2025-3-3 13:53

举报

2个回答
KEY1 回答时间:2025-3-5 00:42:53

就这?搞个界面出来

lugl 回答时间:2025-3-5 14:19:24

KEY1 发表于 2025-3-5 00:42
就这?搞个界面出来

别急别急,先把LCD搞亮,接下来再搞LVGL或者touchGFX

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版