注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lugl4313820的个人空间 https://home.eeworld.com.cn/space-uid-1269709.html [收藏] [复制] [分享] [RSS]
日志

【国民技术车规MCU N32A455开发板】2、驱动LCD屏

已有 504 次阅读2024-3-21 14:07

【国民技术车规MCU N32A455开发板】1、开发板测试 - 汽车电子 

接上篇,我的作业是需要用到LCD屏的,所以先驱动LCD屏。

【屏与GPIO的选择】

1、屏手头上有多种,前面有大佬写了一个stm7735的,所以就"学习”了一下他的帖子【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试 - 测评中心专版。在此特别感谢@裴红恩大佬。主要是最近手头上的东西太多了。

2、GPIO的选择,为后期准备硬件SPI来驱动,考虑到速度的选择,我这里选取了SPI1来做接口。具体的引脚选择见下面的宏定义代码:

#define LCD_SPI                SPI1
#define LCD_SPI_CLK            RCC_APB2_PERIPH_SPI1
#define LCD_SPI_SCK_PIN        GPIO_PIN_5 /* PA.05 */
#define LCD_SPI_SCK_GPIO_PORT  GPIOA      /* GPIOA */
#define LCD_SPI_SCK_GPIO_CLK   RCC_APB2_PERIPH_GPIOA
#define LCD_SPI_MISO_PIN       GPIO_PIN_6 /* PA.06 */
#define LCD_SPI_MISO_GPIO_PORT GPIOA      /* GPIOA */
#define LCD_SPI_MISO_GPIO_CLK  RCC_APB2_PERIPH_GPIOA
#define LCD_SPI_MOSI_PIN       GPIO_PIN_7 /* PA.07 */
#define LCD_SPI_MOSI_GPIO_PORT GPIOA      /* GPIOA */
#define LCD_SPI_MOSI_GPIO_CLK  RCC_APB2_PERIPH_GPIOA

#define LCD_CS_PIN             GPIO_PIN_10 /* PE.10 */
#define LCD_CS_GPIO_PORT       GPIOE      /* GPIOE */
#define LCD_CS_GPIO_CLK        RCC_APB2_PERIPH_GPIOE

#define LCD_RES_PIN             GPIO_PIN_8 /* PE.8 */
#define LCD_RES_GPIO_PORT       GPIOE      /* GPIOE */
#define LCD_RES_GPIO_CLK        RCC_APB2_PERIPH_GPIOE

#define LCD_BL_PIN             GPIO_PIN_9 /* PE.9 */
#define LCD_BL_GPIO_PORT       GPIOE      /* GPIOE */
#define LCD_BL_GPIO_CLK        RCC_APB2_PERIPH_GPIOE

3、在屏的驱动中,我使用了软件SPI与硬件SPI兼容的模式,使用宏#define SPI_Soft   来切换使用哪种方式。

4、GPIO的初始化,我目前用到的只是输出接口,所以5个IO全部初始化为输出50MHz的速度:

void LCD_GPIO_Init(void)
{
	GPIO_InitType GPIO_InitStructure;

	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
	GPIO_InitStructure.Pin        =  LCD_CS_PIN | LCD_RES_PIN | LCD_BL_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
#ifdef  SPI_Soft
	GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);
	GPIO_InitStructure.Pin        = LCD_SPI_SCK_PIN | LCD_SPI_MISO_PIN | LCD_SPI_MOSI_PIN ;
  GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
#else
		
	  RCC_EnableAPB2PeriphClk(LCD_SPI_CLK, ENABLE);

    /*!< Configure sFLASH_SPI pins: SCK */
    GPIO_InitStructure.Pin        = LCD_SPI_SCK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_InitPeripheral(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

    /*!< Configure sFLASH_SPI pins: MOSI */
    GPIO_InitStructure.Pin = LCD_SPI_MOSI_PIN;
    GPIO_InitPeripheral(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

    /*!< Configure sFLASH_SPI pins: MISO */
    GPIO_InitStructure.Pin       = LCD_SPI_MISO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitPeripheral(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
#endif
}

同时修改SPI输出数据的函数:

/******************************************************************************
      函数说明:LCD串行数据写入函数
      入口数据:dat  要写入的串行数据
      返回值:  无
******************************************************************************/
void LCD_Writ_Bus(u8 dat) 
{	
	u8 i;
	LCD_CS_Clr();
#ifdef  SPI_Soft
	for(i=0;i<8;i++)
	{			  
		LCD_SCLK_Clr();
		if(dat&0x80)
		{
		   LCD_MOSI_Set();
		}
		else
		{
		   LCD_MOSI_Clr();
		}
		LCD_SCLK_Set();
		dat<<=1;
	}	
#else
	
	SPI_I2S_TransmitData(LCD_SPI, dat);
	while (SPI_I2S_GetStatus(LCD_SPI, SPI_I2S_TE_FLAG) == RESET)
	{;}
#endif
  LCD_CS_Set();	
}

这样就完成了移植代码的工作。其实如果是单个显示屏的话,可以不用初始化CS与BLK,CS直接接地,BLK直接接VCC,这样就可以使用4线就可以驱动好了。

5、字库的制作,打开PCtoLCD,创建24*24的字体:

 

在设置中选择如下图所示。

 

最后在如下图所示的地方输入需要的汉字,生成字模,然后把生成的内容复制到字库之中去。

 

  接着在主程序中编写测试代码:


#include "main.h"

#include "log.h"
#include "lcd_init.h"
#include "lcd.h"


int main(void)
{

    log_init();

	
		LCD_Init();//LCD初始化
		LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
		LCD_ShowChinese(10,0,"国民技术",RED,WHITE,24,0);
		LCD_ShowString(24,30,"N32A455",RED,WHITE,16,0);
		while(1)
		{

		}

}

下载到开发板后,效果如下图所示:

 

但是我使用spi还没有驱动好屏,后面再试试。附工程源码。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章