本帖最后由 千樱硕 于 2020-4-26 10:04 编辑
我在使用STM32H7的SPI2驱动一个320*480分辨率的4寸屏幕。发现速度非常慢。刷全屏一秒只能3到4次。所以我研究了一下ST7796S的手册。但是有些地方不明白。想问一下。
1. 传输速度
下面是ST7796S的4线SPI电特性图
我对其中的T_scycw 很不理解。这个时间他给出的出的66ns。但是下面的T_shw 和 T_slw 加起来30ns。
正常使用应该按照哪个为准呢? 如果按照T_scycw为准,那不是4线SPI推荐频率只有15Mh多一点?
2.实际使用频率。
我为STM32H7的SPI2设备设置的频率是400M输入,SPI2配置为8分频。最终SPI2的通信速度是50MBits/s. 也能正常通信。
不过就像开头说的,通信速度和显示的速度完全不匹配。我使用的16Bit颜色。这样的话
480*320*16 = 2,457,600。 也就是说我只是用同一种颜色刷屏的话。50Mbps 的速度足够刷20次了。
但是速度还是很慢。我使用STM32CubeMX配置的SPI2。配置如下
总结来说就是50MBps,8Bit数据大小,禁用FIFO,使能了端口保持。
最终我用HAL库的HAL_SPI_TransmitReceive 函数每次传输1Byte数据。
最终是直接驱动LCD刷屏每秒只能刷3次左右,配置了STemWin后,进行了
画线和画矩形(DrawHline,DrawVLine,FillRect)的优化后GUI_Clear()刷屏
只有美妙2次左右。请论坛的各位熟练操作LCD屏幕的朋友帮帮我找出性能瓶颈在哪里?
3. 50MBps的通信速度有几率让画面失真。但是降到25MBps就完全没出现过这样的情况。
另外我发现很奇怪的地方,在是用50MBps的时候连续传输颜色数据,每传输16Bit就让CS端跳变两次,
就能在50MBps下正常工作。这是为什么呢? 数据手册上颜色数据是可以连续传输的。不需要CS跳变
但是刷屏的速度已经很慢了,再让速度慢一倍的话,简直不能忍受了。
|