cuter

【STM32最强F7探索大冒险】串口调试

0
阅读(3460)

粗心大意是老毛病了,小学的时候就开始,总是因为马虎考不了高分,被老师批评。今天调试STM32F7串口,又是因为粗心,浪费了好多时间,最后发现问题的原因很简单。不过在尝试解决问题过程中,也是有所收获的。


样例工程就不给了,是PACK自带的example,具体位置和使用方法可以参考《【STM32最强F7探索大冒险】GPIO的使用》。


设置好工程之后,编译、下载,打开串口调试助手,发现收到一堆乱码,如下图所示。

乱码.png


发现问题插曲一

在小组里看到网友发帖,也是串口打印乱码,最终是手动修改HSE_VALUE搞定的。参考网页为:《【STM32最强F7探索大冒险】+ STM32F767 Nucleo-USART移花接木OK》。

虽然有种感觉不是这里造成的,还是试了一下。刚开始还找错地方了,改了HSE_VALUE后,没有效果,感觉十分纳闷。然后又用搜索功能搜了HSE_VALE,才发现下图所示的才是正主,这个时钟是8MHz的,和代码配合,生成216MHz的系统时钟。


发现问题插曲二

插曲1没能搞定问题,开始单步调试。单步调试也比较搞笑,有几次跑的地方不对,害得我以为代码有问题,修改了之后,继续调试,发现能够走到预想的位置了,但问题依旧。到最后,解决了问题,回过头来,再把这段改动取消,发现打印是正常的,这尼玛...


发现问题插曲三

经过上两个插曲还没搞定,感觉问题有点严重了,于是到官网找了详细的芯片参考手册,研究了一下波特率是怎么计算的(如下图所示)。

波特率计算.png

然后继续单步调试,发现波特率的计算没有问题。和我预料的一样,分频系统是根据系统时钟大小和波特率大小计算出来的。不知道小组里那位朋友的代码是怎么计算串口时钟分频系数的,有点不解。在博世工作过之后,2000页的文档根本不算什么,发动机软件文档上万很正常...


重点来了

既然波特率没问题,那么就可以知道,系统时钟没问题。那么问题的原因,究竟是什么?浏览代码的时候,不经意地看到样例代码使用了校验位,刹那间忍不住吐槽自己的冲动....

到了这里,我以为改一下PC端的串口设置,都配成奇校验,就能搞定问题了,结果再次被亮瞎。PC端两款不同的串口调试助手收到的数据竟然不一样,也是醉了。最后只能修改代码,改成无校验,问题才解决。


结束语

上张OK的图吧,血淋淋地教训,解决问题的时候要有条理才能更快,看起来一样的问题,其本质有可能不同,不能盲从,否则容易跑偏。



版权声明:

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

博客官方地址:

ChinaAET:http://blog.chinaaet.com/cuter521