N32G43X
文章目录
前言
本例程主要介绍国民技术N32G43X硬件SPI驱动LCD,SPI使用的是主机模式。
提示:以下是本篇文章正文内容,下面案例可供参考
一、SPI1配置
1.SPI1配置时钟
代码如下(示例):
//SPI1配置时钟
void SPI1_RCC_Configuration(void)
{
RCC_ConfigPclk2(RCC_HCLK_DIV2);
RCC_EnableAPB2PeriphClk( RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO , ENABLE);
RCC_EnableAPB2PeriphClk( RCC_APB2_PERIPH_SPI1, ENABLE);
}
2.SPI配置GPIO
代码如下(示例):
//SPI配置GPIO
void SPI1_GPIO_Configuration(void)
{
GPIO_InitType GPIO_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure);
// Configure SPI1 pins: SCK, MOSI
GPIO_InitStructure.Pin = GPIO_PIN_5 | GPIO_PIN_7;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF0_SPI1;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
}
3.SPI初始化
代码如下(示例):
//SPI初始化
void LCD_SPI1_Init(void)
{
SPI_InitType SPI_InitStructure;
SPI1_RCC_Configuration();
SPI1_GPIO_Configuration();
SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;
SPI_InitStructure.SpiMode = SPI_MODE_MASTER;
SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS;
SPI_InitStructure.CLKPOL = SPI_CLKPOL_HIGH;
SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE;
SPI_InitStructure.NSS = SPI_NSS_SOFT;
SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_8;
SPI_InitStructure.FirstBit = SPI_FB_MSB;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Enable(SPI1, ENABLE);
}
4.SPI读写函数
代码如下(示例):
//SPI读写函数
u8 SPI1_ReadWriteByte(uint8_t TxData)
{
u8 retry=0;
while((SPI1->STS&1<<1)==0) //等待发送区空
{
retry++;
if(retry>200) return 0;
}
SPI1->DAT=TxData; //发送一个byte
retry=0;
while((SPI1->STS&1<<0)==0) //等待接收完一个byte
{
retry++;
if(retry>200) return 0;
}
return SPI1->DAT; //返回收到的数据
}
二、LCD配置
1.宏定义GPIO
代码如下(示例):
//-----------------LCD端口定义----------------
//#define LCD_CS PAout(6)
#define LCD_CS_L GPIOA->PBC = GPIO_PIN_6
#define LCD_CS_H GPIOA->PBSC = GPIO_PIN_6
//#define LCD_RS PAout(4)
#define LCD_RS_L GPIOA->PBC = GPIO_PIN_4
#define LCD_RS_H GPIOA->PBSC = GPIO_PIN_4
//#define LCD_POWER PCout(5)
#define LCD_Light_L GPIOC->PBC = GPIO_PIN_5
#define LCD_Light_H GPIOC->PBSC = GPIO_PIN_5
//#define LCD_REST PCout(4)
#define LCD_REST_L GPIOC->PBC = GPIO_PIN_4
#define LCD_REST_H GPIOC->PBSC = GPIO_PIN_4
2.读写命令和数据函数
代码如下(示例):
//RS 为0时写命令
void Write_com(u8 com)
{
LCD_RS_L;// = 0; //RS 为0时写命令
LCD_CS_L;// = 0; //CS为0打开片选
SPI1_ReadWriteByte(com);
LCD_CS_H;// = 1;
LCD_RS_H;// = 1;
}
//RS 为1时写数据
void Write_data(u8 dat)
{
LCD_RS_H;// = 1; //RS 为1时写数据
LCD_CS_L;// = 0; //CS为0打开片选
SPI1_ReadWriteByte(dat);
LCD_CS_H;// = 1;
LCD_RS_H;// = 1;
}
3.初始化GPIO
代码如下(示例):
//初始化GPIO
void LCD_GPIO_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA|RCC_APB2_PERIPH_GPIOC, ENABLE);
//CS -- PA4, RS - PA6
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_4 |GPIO_PIN_6;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
//RESET -- PC4, Light - PC5
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_4 |GPIO_PIN_5;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);
}
4.初始化LCD
代码如下(示例):
//初始化LCD
void LCD_Init(void)
{
LCD_SPI1_Init(); //初始化硬件SPI
LCD_GPIO_Init(); //初始化GPIO
LCD_REST_L;
delay_ms(200);
LCD_REST_H;
Write_com(0xe2);
Write_com(0xa1);
Write_com(0xc8);
Write_com(0xa2);
Write_com(0x2f);
Write_com(0x26);
Write_com(0x81);
Write_com(0x20);
Write_com(0xaf);
Write_com(0xA5); //全屏测试
LCD_Light_H; //打开背光
}
三、软件下载
48.N32G43X例程之-硬件SPI驱动LCD
https://download.csdn.net/download/suqingxiao/73802448