
Stm32f769驱动LCD 【前言】 由于开发板没有配LCD屏,手上没有这个接口的LCD屏,刚好手上有个ST7789的屏,是4线SPI接口的,因此先把这个屏驱动起来。 【硬件接口定义】 1、查找屏的资料其定义如下: 2、再查找开发板的原理图,使用他的接口CN9、CN13来对接LCD屏,其接口图如下所示: 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、测试效果: 源文件: |
就这?搞个界面出来
别急别急,先把LCD搞亮,接下来再搞LVGL或者touchGFX