完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题:
原本是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.有技术支持一定要找技术支持,别人解决问题经验丰富。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1175浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:15 , Processed in 1.145566 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号