【SPI480272高速工业液晶屏试用体验】将驱动移植到STM32

  • donatello
  • LV6工程师
  • |      2017-07-22 21:37:59
  • 浏览量 777
  • 回复:0
官方自带的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例程就好了,看看效果: 上传一份工程文件。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子