CH32V203F6P6-SPI数据丢失问题

参考这篇文章GD32-SPI数据丢失问题 - 哔哩哔哩 (bilibili.com)

防止文章被删,我复制一遍

 

最近公司更新单片机,由STM32更换为GD32单片机.更换后一切功能正产,但SPI存在数据丢失问题.

原程序:

spi发送函数

主函数


原程序逻辑顺序:发送完SPI数据后,再进行片选锁存.

逻辑分析仪实测顺序:在发送完SPI数据之前,就进行了片选锁存,导致数据丢失.

GD32-在数据未发送完成时便进行锁存动作


经过测试发现,STM32同样存在该问题,但发生频率没有GD32多.

stm32-在数据未发送完成时便进行锁存动作


猜测:

STM32/GD32 的SPI数据发送是独立于其他部分的,类似于DMA.数据发送和程序执行属于并行执行.

解决办法一:

函数结尾加入对正在发送标识的判断

在函数结尾加入标识判断
可以看到片选信号的动作明显位于时钟信号截止后,修改完成

 

 

修改后数据正常
解决办法二:

在发送完SPI数据后加入延时函数.等待SPI数据发送完成.(时间宝贵未验证)

在红色箭头处加入延时函数

 

 


作者:快给我去spa https://www.bilibili.com/read/cv17641980 出处:bilibili

posted @ 2023-02-16 09:52  TheRemember  阅读(256)  评论(0)    收藏  举报