打印

GD32F303RCT6 SPI通信问题

[复制链接]
3770|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
xiaofei2022|  楼主 | 2022-5-23 17:53 | 只看该作者
示波器图片

微信图片_20220523175220.jpg (359.87 KB )

微信图片_20220523175220.jpg

使用特权

评论回复
评论
qwer345 2022-5-24 19:10 回复TA
波形上哪个异常啊 
板凳
xiaofei2022|  楼主 | 2022-5-23 19:29 | 只看该作者
已解决

使用特权

评论回复
地板
cainiao518| | 2022-5-23 20:14 | 只看该作者

什么原因?

使用特权

评论回复
5
QQ2224043166| | 2022-5-23 20:17 | 只看该作者

分享下 解决方法,大家一起成长学习

使用特权

评论回复
6
WoodData| | 2022-5-24 09:00 | 只看该作者
应该是SPI配置的问题吧??

使用特权

评论回复
7
昱枫| | 2022-5-24 11:00 | 只看该作者
分享一下

使用特权

评论回复
8
昱枫| | 2022-5-24 17:15 | 只看该作者
目前在移植项目,SPI这块 ST的移到 GD,也是有异常状态

使用特权

评论回复
9
艾伦183| | 2022-5-30 17:21 | 只看该作者

GD32F303RCT6 SPI通信问题

官方提供的移植资料,可以借鉴一下。2.7.1 CLK线重复配置
有客户反馈当SPI处于主模式下,重复配置SPI的CLK线会引起内部计数器紊乱:
问题代码: GPIO->CRL&=0x000fffff;
GPIO->CRL|=0xBBB00000;
上面这段代码是执行SPI口的IO初始化,调用两次后会使CLK上面产生一个脉冲。引起内部计数器出错,ST的
在SPI再次初始化的时候会将内部计数器清零,GD不会将内部计数器清零。
修改办法: vu32 temp;
temp=GPIOA->CFL;
temp&=0x000fffff;
temp|=0xbbb00000;
GPIOA->CRL=temp;
先进行运算再去进行赋值,内部的SPI 计数器就不会因为CLK数据的变化引起误操作。
2.7.2 SPI 通信BSY标志位
在SPI程序编写的过程中,轮询使用BSY作为检测标志位,传送数据丢失或者是错误。这是因为GD的BSY
标志位不是在写入DR后就置位的,而是有很小的一个延时后才置起的。传输过程中不要使用BSY作为每次传
输的判断,使用TXE和 RXNE来进行判断。
2.7.3 SPI 控制寄存器1(SPI_CR1)配置流程
客户如果从低到高一位一位配置该寄存器会出现MODF的错误,经过排查是由于GD的MCU在SPE使能之
前就开始检测是否有模式错误,而ST是在SPE使能之后,所以在MSTR写1之前要保证模式正确。SSM为0时
保证外接高电平或者SSM和SSI都写1或者是把SSOE打开。130\150没有该问题.
案例:BIDIMODE=0; RXONLY=0;MSTR=1;DFF=0;CPOL=0;CPHA=0;SSM=1;
SSOE=1;TXEIE=1;BR=2;LSBFIRST=0;CRCPOLY=7;SPE=1;
这个顺序在ST上正常,在GD上出现MODF错误,解决的话可以将整个寄存器一次写入,也可调整初始化顺
序,同时加上SSI的配置。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝