【沁恒 CH32V208 开发板免费试用】+SPI_LCD
上一篇测评报告为开箱检测,本片主要测评SPI_LCD,查看其他网友的报告时也有类似的测评,是针对模拟SPI来测试的。我这里呢是基于硬件SPI进行移植测试。
- 硬件资源介绍
主控还是CH32V208开发板,下载仿真用WCH-LINK-R1就不多介绍了。
LCD模块采用4线制SPI通讯方式,驱动IC为ILI9341,分辨率为240*320。
本次实验引脚对应为:
- 驱动部分
以下是实物连接图
接线方式参考实验引脚对应部分
- 项目结构:
主要移植了SPI,LCD,GUI等驱动
- SPI驱动:
u8 SPI1_ReadWriteByte (u8 TxData)//SPI读写
{
u8 i = 0;
__while__\\(SPI\\_I2S\\_GetFlagStatus\\(SPI1, SPI\\_I2S\\_FLAG\\_TXE\\) == *RESET*\\)
\\{
i\\+\\+;
__if__\\(i > 200\\)
__return__ 0;
\\}
SPI\\_I2S\\_SendData\\(SPI1, TxData\\);
i = 0;
__while__\\(SPI\\_I2S\\_GetFlagStatus\\(SPI1, SPI\\_I2S\\_FLAG\\_RXNE\\) == *RESET*\\)
\\{
i\\+\\+;
__if__\\(i > 200\\)
__return__ 0;
\\}
__return__ SPI\\_I2S\\_ReceiveData\\(SPI1\\);
}
**void** **SPI1_Init** ( **void** )
{
GPIO\\_InitTypeDef GPIO\\_InitStructure=\\{0\\};
SPI\\_InitTypeDef SPI\\_InitStructure=\\{0\\};
RCC\\_APB2PeriphClockCmd\\( RCC\\_APB2Periph\\_GPIOA | RCC\\_APB2Periph\\_SPI1, *ENABLE* \\);
GPIO\\_InitStructure\\.GPIO\\_Pin = GPIO\\_Pin\\_5;
GPIO\\_InitStructure\\.GPIO\\_Mode = *GPIO\\_Mode\\_AF\\_PP*;
GPIO\\_InitStructure\\.GPIO\\_Speed = *GPIO\\_Speed\\_50MHz*;
GPIO\\_Init\\( GPIOA, &GPIO\\_InitStructure \\);
GPIO\\_InitStructure\\.GPIO\\_Pin = GPIO\\_Pin\\_6;
GPIO\\_InitStructure\\.GPIO\\_Mode = *GPIO\\_Mode\\_IN\\_FLOATING*;
GPIO\\_Init\\( GPIOA, &GPIO\\_InitStructure \\);
GPIO\\_InitStructure\\.GPIO\\_Pin = GPIO\\_Pin\\_7;
GPIO\\_InitStructure\\.GPIO\\_Mode = *GPIO\\_Mode\\_AF\\_PP*;
GPIO\\_InitStructure\\.GPIO\\_Speed = *GPIO\\_Speed\\_50MHz*;
GPIO\\_Init\\( GPIOA, &GPIO\\_InitStructure \\);
SPI\\_InitStructure\\.SPI\\_Direction = SPI\\_Direction\\_2Lines\\_FullDuplex;
SPI\\_InitStructure\\.SPI\\_Mode = SPI\\_Mode\\_Master;
SPI\\_InitStructure\\.SPI\\_DataSize = SPI\\_DataSize\\_8b;
SPI\\_InitStructure\\.SPI\\_CPOL = SPI\\_CPOL\\_Low;
SPI\\_InitStructure\\.SPI\\_CPHA = SPI\\_CPHA\\_1Edge;
SPI\\_InitStructure\\.SPI\\_NSS = SPI\\_NSS\\_Soft;
SPI\\_InitStructure\\.SPI\\_BaudRatePrescaler = SPI\\_BaudRatePrescaler\\_2;
SPI\\_InitStructure\\.SPI\\_FirstBit = SPI\\_FirstBit\\_MSB;
SPI\\_InitStructure\\.SPI\\_CRCPolynomial = 7;
SPI\\_Init\\( SPI1, &SPI\\_InitStructure \\);
SPI\\_Cmd\\( SPI1, *ENABLE* \\);
}
- LCD驱动:
void LCD_WR_REG(u8 data)
{
LCD_CS_CLR;
LCD\\_RS\\_CLR;
SPI1_ReadWriteByte(data);
LCD_CS_SET;
}
void LCD_WR_DATA(u8 data)
{
LCD_CS_CLR;
LCD\\_RS\\_SET;
SPI1_ReadWriteByte(data);
LCD_CS_SET;
}
void LCD_Clear(u16 Color)
{
unsigned int i,m;
LCD\\_SetWindows\\(0,0,lcddev\\.width\\-1,lcddev\\.height\\-1\\);
LCD\\_CS\\_CLR;
LCD\\_RS\\_SET;
for\\(i=0;i<lcddev\\.height;i\\+\\+\\)
\\{
for\\(m=0;m<lcddev\\.width;m\\+\\+\\)
\\{
Lcd\\_WriteData\\_16Bit\\(Color\\);
\\}
\\}
LCD\\_CS\\_SET;
}
void LCD_GPIOInit(void)
{
GPIO\\_InitTypeDef GPIO\\_InitStructure;
RCC\\_APB2PeriphClockCmd\\( RCC\\_APB2Periph\\_GPIOA ,ENABLE\\);
GPIO\\_InitStructure\\.GPIO\\_Pin = GPIO\\_Pin\\_1|GPIO\\_Pin\\_0|GPIO\\_Pin\\_2| GPIO\\_Pin\\_3| GPIO\\_Pin\\_4;
GPIO\\_InitStructure\\.GPIO\\_Speed = GPIO\\_Speed\\_50MHz;
GPIO\\_InitStructure\\.GPIO\\_Mode = GPIO\\_Mode\\_Out\\_PP;
GPIO\\_Init\\(GPIOA, &GPIO\\_InitStructure\\);
}
void LCD_RESET(void)
{
LCD\\_RST\\_CLR;
Delay\\_Ms\\(100\\);
LCD\\_RST\\_SET;
Delay\\_Ms\\(50\\);
}
**void** **LCD_Init** ( **void** )
{
SPI1\\_Init\\(\\);
LCD\\_GPIOInit\\(\\);
LCD\\_RESET\\(\\);
LCD\\_WR\\_REG\\(0xCF\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0xC9\\);
LCD\\_WR\\_DATA\\(0X30\\);
LCD\\_WR\\_REG\\(0xED\\);
LCD\\_WR\\_DATA\\(0x64\\);
LCD\\_WR\\_DATA\\(0x03\\);
LCD\\_WR\\_DATA\\(0X12\\);
LCD\\_WR\\_DATA\\(0X81\\);
LCD\\_WR\\_REG\\(0xE8\\);
LCD\\_WR\\_DATA\\(0x85\\);
LCD\\_WR\\_DATA\\(0x10\\);
LCD\\_WR\\_DATA\\(0x7A\\);
LCD\\_WR\\_REG\\(0xCB\\);
LCD\\_WR\\_DATA\\(0x39\\);
LCD\\_WR\\_DATA\\(0x2C\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x34\\);
LCD\\_WR\\_DATA\\(0x02\\);
LCD\\_WR\\_REG\\(0xF7\\);
LCD\\_WR\\_DATA\\(0x20\\);
LCD\\_WR\\_REG\\(0xEA\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_REG\\(0xC0\\);
LCD\\_WR\\_DATA\\(0x1B\\);
LCD\\_WR\\_REG\\(0xC1\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_REG\\(0xC5\\);
LCD\\_WR\\_DATA\\(0x30\\);
LCD\\_WR\\_DATA\\(0x30\\);
LCD\\_WR\\_REG\\(0xC7\\);
LCD\\_WR\\_DATA\\(0XB7\\);
LCD\\_WR\\_REG\\(0x36\\);
LCD\\_WR\\_DATA\\(0x08\\);
LCD\\_WR\\_REG\\(0x3A\\);
LCD\\_WR\\_DATA\\(0x55\\);
LCD\\_WR\\_REG\\(0xB1\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x1A\\);
LCD\\_WR\\_REG\\(0xB6\\);
LCD\\_WR\\_DATA\\(0x0A\\);
LCD\\_WR\\_DATA\\(0xA2\\);
LCD\\_WR\\_REG\\(0xF2\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_REG\\(0x26\\);
LCD\\_WR\\_DATA\\(0x01\\);
LCD\\_WR\\_REG\\(0xE0\\);
LCD\\_WR\\_DATA\\(0x0F\\);
LCD\\_WR\\_DATA\\(0x2A\\);
LCD\\_WR\\_DATA\\(0x28\\);
LCD\\_WR\\_DATA\\(0x08\\);
LCD\\_WR\\_DATA\\(0x0E\\);
LCD\\_WR\\_DATA\\(0x08\\);
LCD\\_WR\\_DATA\\(0x54\\);
LCD\\_WR\\_DATA\\(0XA9\\);
LCD\\_WR\\_DATA\\(0x43\\);
LCD\\_WR\\_DATA\\(0x0A\\);
LCD\\_WR\\_DATA\\(0x0F\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_REG\\(0XE1\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x15\\);
LCD\\_WR\\_DATA\\(0x17\\);
LCD\\_WR\\_DATA\\(0x07\\);
LCD\\_WR\\_DATA\\(0x11\\);
LCD\\_WR\\_DATA\\(0x06\\);
LCD\\_WR\\_DATA\\(0x2B\\);
LCD\\_WR\\_DATA\\(0x56\\);
LCD\\_WR\\_DATA\\(0x3C\\);
LCD\\_WR\\_DATA\\(0x05\\);
LCD\\_WR\\_DATA\\(0x10\\);
LCD\\_WR\\_DATA\\(0x0F\\);
LCD\\_WR\\_DATA\\(0x3F\\);
LCD\\_WR\\_DATA\\(0x3F\\);
LCD\\_WR\\_DATA\\(0x0F\\);
LCD\\_WR\\_REG\\(0x2B\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x01\\);
LCD\\_WR\\_DATA\\(0x3f\\);
LCD\\_WR\\_REG\\(0x2A\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0x00\\);
LCD\\_WR\\_DATA\\(0xef\\);
LCD\\_WR\\_REG\\(0x11\\);
Delay\\_Ms\\(120\\);
LCD\\_WR\\_REG\\(0x29\\);
LCD_direction(USE_HORIZONTAL);
LCD_LED_SET;
LCD\\_Clear\\(WHITE\\);
}
- 项目实验:
**int** **main** ( **void** )
{
u8 i=0;
u8 j=0;
u8 value;
Delay\\_Init\\(\\);
USART\\_Printf\\_Init\\(115200\\);
__printf__\\("SystemClk:%d\\\\r\\\\n",SystemCoreClock\\);
LCD\\_Init\\(\\);
LCD\\_LED\\_SET;
Delay\\_Ms\\(1500\\);
LCD\\_LED\\_CLR;
__while__\\(1\\)
\\{
DrawTestPage\\("CH32V208\\_LCD\\_DEMO"\\);
if(1s_task_sta == 1)
{
DIS_flow();
Led();
}
\\}
}
- 结束
此次硬件SPI测试结束,下次对RTT或网络进行测试。
- 附件
*附件:SPI-2Lines_FullDuplex - lcd.zip