【极海 APM32E103VET6S开发板】评测3、TFT LCD
本次评测让APM32E103VET6D SPI2驱动SPI接口的320×240TFT彩色液晶模块。
TFT-LCD的原始代码网上到处都是,本文就不再贴出。
SPI接口的TFT-LCD写数据、命令的数据长度每次只能是8Bit,16位彩色写点必须分2次写入。CubeMX-SPI2写TFT-LCD的命令和数据的函数是:
HAL_SPI_Transmit(&hspi2, buff, 0x01, 5000);
APM32E103VE的SPI2初始化函数:
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 7;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
编译、下载、运行,发现断电再启动LCD屏并不是每次都能显示,安排了PB8、PB9驱动的2只LED做运行状态的指示,可以点亮,证明没有死机,判断是SPI驱动有问题。
SPI2接口改GPIO口,使用模拟SPI方式驱动,居然每次重启都成功。留下一个疑问,SPI驱动不稳定到底是硬件问题还是CubeMX的问题。
硬件模拟的SPI驱动函数:
void Send_SPI(uint8_t data)
{
uint8_t i;
LCD_SCK_CLR;
for(i=0;i<8;i++)
{ if(data &0x80)
LCD_SDA_SET;
else
LCD_SDA_CLR;
LCD_SCK_SET;
__nop();
data<<=1;
LCD_SCK_CLR;
}
}
运行结果:
本帖最后由 wenyangzeng 于 2022-9-14 20:55 编辑
这几张图片显得非常的好呀,有没有测试下视频?
引用: lugl4313820 发表于 2022-9-15 06:04 这几张图片显得非常的好呀,有没有测试下视频?
视频肯定不行的,SPI接口的LCD刷屏速度跟不上的。