906|5

7042

帖子

11

TA的资源

版主

楼主
 

【国民技术车规MCU N32A455开发板】2、驱动LCD屏 [复制链接]

【国民技术车规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还没有驱动好屏,后面再试试。附工程源码。

ST7735_LDC.zip (8.37 MB, 下载次数: 8)
此帖出自汽车电子论坛

最新回复

是非常好的芯片,争取多让他发一点光。 大佬会使用这款芯片在自己的工程中吗?   详情 回复 发表于 2024-4-6 14:23

赞赏

1

查看全部赞赏

点赞(1) 关注(1)

回复
举报

1286

帖子

4

TA的资源

版主

沙发
 

请问N32A455对标是哪个系列的车用MCU?NXP的S32K144/6/8前几年市场推广很强

此帖出自汽车电子论坛

点评

这个我不是很清梦呀,我只管用。不过车规以前是NXP、英飞凌占大部分。  详情 回复 发表于 2024-3-22 15:34
 
 

回复

7042

帖子

11

TA的资源

版主

板凳
 
beyond_笑谈 发表于 2024-3-22 15:11 请问N32A455对标是哪个系列的车用MCU?NXP的S32K144/6/8前几年市场推广很强

这个我不是很清梦呀,我只管用。不过车规以前是NXP、英飞凌占大部分。

此帖出自汽车电子论坛

点评

刚才看了一下规格书,这个MCU可以做一些非主动功能安全的车规级控制器,导航系统和影音娱乐系统除外。  详情 回复 发表于 2024-3-22 16:33
 
 
 

回复

1286

帖子

4

TA的资源

版主

4
 
lugl4313820 发表于 2024-3-22 15:34 这个我不是很清梦呀,我只管用。不过车规以前是NXP、英飞凌占大部分。

刚才看了一下规格书,这个MCU可以做一些非主动功能安全的车规级控制器,导航系统和影音娱乐系统除外。

此帖出自汽车电子论坛

点评

是非常好的芯片,争取多让他发一点光。  详情 回复 发表于 2024-3-22 16:48
 
 
 

回复

7042

帖子

11

TA的资源

版主

5
 
beyond_笑谈 发表于 2024-3-22 16:33 刚才看了一下规格书,这个MCU可以做一些非主动功能安全的车规级控制器,导航系统和影音娱乐系统除外。

是非常好的芯片,争取多让他发一点光。

此帖出自汽车电子论坛
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

6
 

是非常好的芯片,争取多让他发一点光。

大佬会使用这款芯片在自己的工程中吗?

此帖出自汽车电子论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表