用GD32F103VCT6替代STM32F103VCT6出现的SPI问题以及解决方法

问题:
原本是MCU用STM32F103VCT6跟DSP通过SPI进行双向通信传输数据,用GD32F103VCT6直接替换,代码没有修改,还是STM32的标准库,出现与DSP通讯失败。

解决问题过程:
上网搜索相关问题 发现一篇比较有用的文章。
GD32中SPI部分需要特别注意的部分 以及STM32移植到GD32SPI需要修改的部分
我按照这位博主说的去改,发现原来配置的SPI部分 MOSI和MISO确实没有明确设置引脚的输入输出模式,但是我重新配置了之后还是不行,通讯不了。

用逻辑分析仪去分别检测STM32F103VCT6和GD32F103VCT6的SPI波形和数据。
发现1:逻辑分析仪能抓到GD的spi波形,证明是能工作的
发现2:两者的数据对比起来也是一样的。
发现3:STM32发送的每个字节之间都有延时的,而GD32的是没有的,两个字节之间的间隔时间跟时钟翻转持续时间是一样的。

根据发现3,我去修改了代码里面的
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
一个一个去测试,发现单单修改这个波特率分频系数也不能达到STM32的两个字节之间的间隔时间。

然后我修改了工作的主频,从72MHz修改为48MHz,(因为用到了USB,所以顺便把USB的时钟分频系数从1.5分频改为1分频,否则USB工作也不正常。)

回到正题,这时候当我改成48MHz,spi的波特率分频系数改为64之后,发送的两个字节之间的延时时间会达到跟STM32的差不多,比它慢2us左右,这时候通讯也正常了,MCU跟DSP能够正常收发数据。

正当我以为所有都弄好之后,我把逻辑分析仪的线跟测试板拔开,发现后面工作偶尔又不正常了,这时候我想起来之前单板测试的时候,如果MCU端接了排线,但是没有接其他设备,在逻辑分析仪上看到MISO端竟然有几个毛刺出现,难道是因为排线导致出现了干扰吗?

后面找到了GD32的技术支持,他说排线不能太长,5cm左右就好,我之前测试的时候排线都24cm的,因为在STM32的板子上是正常的。

后面找了一条6CM的排线去测试,果然正常了。

这次出现的问题总结:
1.上网找资料,看看别人踩的坑,不管行不行填了再说。
2.善用工具帮助自己分析问题,要敢于假设并且付诸于实践证明。
3.有技术支持一定要找技术支持,别人解决问题经验丰富。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值