STM32之SPI驱动液晶屏的一个问题
2013-04-05 18:27
405 查看
这两天在调试STM32通过SPI接口驱动液晶屏,遇到一个很奇怪的问题。我在开发板上驱动液晶屏,屏正常点亮,功能操作正常。但我将驱动程序移植到我们产品上时,屏死活点不亮。我用示波器测量SCK、SDA、CS及A0信号,每个引脚的输出都是正常的。对比SCK、SDA数据,发现也没有问题。几经排除,最终发现是SCK与CS信号时序上不对齐所导致。
正确的CS与CLK的时序如下
所有CLK信号落在CS区间里面。
有问题的CS与CLK的时序
最后一个CLK落在CS区间外面,导致整体的SPI数据错误,LCD屏无法识别SPI信号。
程序代码如下
一种解决办法是在SPI2_stopTransaction之前增加一点延时,让CLK能够全部落在CS区间里面;另一种解决办法就是增加CLK的速率,使用SPI_BaudRatePrescaler_4分频。我两种方法都试验过,都有效果,但是使用第二种方法,不会产生额外的延时,SPI的读写速度更快。因此我是选择用第二种方法。
附上第二种方法的时序图
所有CLK全都落在CS区域之间。
另队上液晶屏控制信号的简图
正确的CS与CLK的时序如下
所有CLK信号落在CS区间里面。
有问题的CS与CLK的时序
最后一个CLK落在CS区间外面,导致整体的SPI数据错误,LCD屏无法识别SPI信号。
程序代码如下
static bool SSP2_writeByte(byte data) { /* Send SPI2 data */ SPI_I2S_SendData(SPI2, data); /* Wait for SPI2 Tx buffer empty */ while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)==RESET); return TRUE; } bool LcdSPIProtocol_write(byte* data) { //VirtualTimer_sleep(50); /** Control the SSEL, start new transaction */ SPI2_startTransaction(); /** Write the command code */ SSP2_writeByte(*data); { //VirtualTimer_sleep(10); SPI2_stopTransaction(); ASSERT_BOOL(TRUE); } return TRUE; }CS是直接由SPI2_startTransaction与SPI2_stopTransaction进行控制。在程序里CS的跳变时间间隔就是程序执行SSP2_writeByte的时间间隔。我在使用示波器测量发现,当我改变SPI的时钟频率SPI_InitStructure.SPI_BaudRatePrescaler( = SPI_BaudRatePrescaler_8;),这个时间间隔的变化没有多大变化。我使用SPI_BaudRatePrescaler_8和SPI_BaudRatePrescaler_16,SPI_BaudRatePrescaler_32,发现CS的时间间隔基本不变。因此当使用16与32分频时,SCK已经远远超出了CS的区间范围。
一种解决办法是在SPI2_stopTransaction之前增加一点延时,让CLK能够全部落在CS区间里面;另一种解决办法就是增加CLK的速率,使用SPI_BaudRatePrescaler_4分频。我两种方法都试验过,都有效果,但是使用第二种方法,不会产生额外的延时,SPI的读写速度更快。因此我是选择用第二种方法。
附上第二种方法的时序图
所有CLK全都落在CS区域之间。
另队上液晶屏控制信号的简图
相关文章推荐
- [stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO
- 最近在搞SPI Flash的驱动,有一个问题迟迟不能解决
- STM32 液晶屏 显示字符串 中遇到的一个问题
- 关于 STM32 SPI 从机模式的问题
- STM32 软件模拟SPI时序驱动NRF24L01
- STM32通过FSMC驱动3.2寸液晶屏实现的音乐频谱
- SPI 调试遇到的一个问题
- 基于ATMEGA8515的SPI驱动ST7565P液晶屏的程序(原创)
- stm32驱动3.2寸触摸屏(包括IO模拟,SPI硬件接口)
- Linux SPI 子系统驱动笔记之Linux spi设备驱动与SPI控制器驱动的匹配问题
- SPI设备驱动学习BUG问题记录
- esp32的spi驱动的编写遇到的问题
- STM32 VCP PC端安装驱动失败的问题解决
- 关于STM32 SPI NSS问题的探讨
- STM32驱动科大讯飞语音合成芯片XFS3031CNP的若干问题
- 想问一个关于camera驱动的技术问题
- MSSQL/SQLSERVER 2000 2005 2008 2008R2 jar包驱动问题 一个sqljdbc4.jar就OK了
- STM32 USB转串口驱动移植到SylixOS中遇到的问题总结
- STM32 VCP PC端安装驱动失败的问题解决----试了解决了问题
- 将驱动编译到内核注意一个小问题