官方自带的STC12 MCU主控板的性能有限,想要更进一步对SPI480272屏幕进行探索的话就需要更高级的MCU主板,这里我选取了Nucleo-F412ZG作为新的MCU主控板。Nucleo-F412ZG使用STM32F412ZG作为MCU,主频达100MHz,SPI1最高速度为主频的一半50MHz,比SPI480272屏幕的常规SPI速度要求40MHz更高。另外,F412ZG拥有1MFlash和256KB RAM,即使没有使用外置FATFS,存一张几百K的BMP图都是没有问题的。
具体连线如下图:
由于显示模块只需要主机输出从机输入,因此只需要连接六根线,即PA7(MOSI主出从入)->SI,PA5(CLK)->CLK,PB8->CS,PB9->BUSY,电源和地。PB8是控制液晶片选,因此使用推挽输出;PB9是检测液晶忙状态,液晶闲时输出高电平,忙时则输出低电平,因此主机使用上拉输入。完成SPI、BUSY和CS引脚配置之后,就可以进行实验了。主机使用SPI通信的核心代码如下:
char SPI1_ReadWriteByte(char TxData)
{
char Rxdata;
HAL_SPI_TransmitReceive(&SPI1_Handler,&TxData,&Rxdata,1,1000);
return Rxdata;
}
当主机调用此代码时,CLK引脚会连续发出8个上升沿电平信号,在每个上升沿出现时MOSI引脚会输出一个比特的数据,这个标准SPI通信协议正好与液晶要求的SPI通信协议吻合,因此加上片选控制,就可以对液晶传输指令或者数据:
void LCD_send_command(unsigned char out_cmd)
{
TFT_CS_CLR;
SPI1_ReadWriteByte(out_cmd);
TFT_CS_SET;
}
void LCD_send_data(unsigned int out_data)
{
TFT_CS_CLR;
SPI1_ReadWriteByte(out_data>>8);
SPI1_ReadWriteByte(out_data);
TFT_CS_SET;
}
最底层的通信协议搞定之后,什么刷屏、显字、刷图都是直接照搬官方51例程就好了,看看效果:
上传一份工程文件。
官方自带的STC12 MCU主控板的性能有限,想要更进一步对SPI480272屏幕进行探索的话就需要更高级的MCU主板,这里我选取了Nucleo-F412ZG作为新的MCU主控板。Nucleo-F412ZG使用STM32F412ZG作为MCU,主频达100MHz,SPI1最高速度为主频的一半50MHz,比SPI480272屏幕的常规SPI速度要求40MHz更高。另外,F412ZG拥有1MFlash和256KB RAM,即使没有使用外置FATFS,存一张几百K的BMP图都是没有问题的。
具体连线如下图:
由于显示模块只需要主机输出从机输入,因此只需要连接六根线,即PA7(MOSI主出从入)->SI,PA5(CLK)->CLK,PB8->CS,PB9->BUSY,电源和地。PB8是控制液晶片选,因此使用推挽输出;PB9是检测液晶忙状态,液晶闲时输出高电平,忙时则输出低电平,因此主机使用上拉输入。完成SPI、BUSY和CS引脚配置之后,就可以进行实验了。主机使用SPI通信的核心代码如下:
char SPI1_ReadWriteByte(char TxData)
{
char Rxdata;
HAL_SPI_TransmitReceive(&SPI1_Handler,&TxData,&Rxdata,1,1000);
return Rxdata;
}
当主机调用此代码时,CLK引脚会连续发出8个上升沿电平信号,在每个上升沿出现时MOSI引脚会输出一个比特的数据,这个标准SPI通信协议正好与液晶要求的SPI通信协议吻合,因此加上片选控制,就可以对液晶传输指令或者数据:
void LCD_send_command(unsigned char out_cmd)
{
TFT_CS_CLR;
SPI1_ReadWriteByte(out_cmd);
TFT_CS_SET;
}
void LCD_send_data(unsigned int out_data)
{
TFT_CS_CLR;
SPI1_ReadWriteByte(out_data>>8);
SPI1_ReadWriteByte(out_data);
TFT_CS_SET;
}
最底层的通信协议搞定之后,什么刷屏、显字、刷图都是直接照搬官方51例程就好了,看看效果:
上传一份工程文件。