4380|0

145

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

关于STM串口在高波特率下的收发问题 [复制链接]

搞了许久的问题终于解决了,真的是好久好久好久好久。。。

首先感谢soso姐,感谢huo_hu,感谢chunyang的帮助,真的很感谢。

下面说说问题所在

项目第一步是搞一个数据收发,最简单不过的一个过程,但是搞了很久,中间遇到了很多很多很多问题。主要还是因为这是初次接触STM32,还有一个原因大抵也是因为我太懒了吧。哈哈。
从开始到现在遇到的问题,弱智型的就不说了,以免暴露我的智商。哈哈。
1.收到第一帧数据还没有发出去,下一帧数据到来,就会刷掉第一帧数据,这个问题如何解决。
2.波特率高的情况下,数据接收出错怎么办?(前提是在波特率低的时候完全不会出错)

我是串口家DMA解决问题,因为我发送的是命令,我得从前两个字节知道我收到的命令是否正确还有我下面将要收到的命令长度是多少。

第一个问题其实很容易解决的,就是把收到的数据存在一个答buf中,把收到的数据长度也存到一个buf中,这样就对应的长度发送对应的指令,不会发生数据覆盖的问题。

第二个问题就比较纠结了,对于一个以前没有做到底层的硬件的来说那就更纠结了,做软件错了你立马就能知道问题出在哪了,与硬件打交道,出错了检查代码没有错然后想到的问题肯定是,我靠,这块板子没有毛病吧。我在这个问题中纠结好久,直到我测试了下一块板子,我确定不是板子问题。。。哈哈哈。那既然波特率比较低的时候没有问题,为什么高了就会出问题呢。以前没有怎么考虑过代码效率问题的我对这个问题完全一筹莫展。
后来大概计算了一下,我24M的系统时钟,2M的波特率,那么我传输一个字节的时候可以处理大概是100多条指令,1M的时候大概是200多条指令。低了一倍。那就完全有可能当你1M能跑的时候2M不行,因为已经来不及处理完程序了。问题很明确了,怎么改呢?我用了一个比较笨的办法,我的代码暂时是无法削减了。。。只好把STM给的库代码的效率提高喽。
我没有用库提供的操纵寄存器的函数,直接操纵寄存器,问题解决了。。。
代码腰不酸腿不痛上楼也跑的快了,果然再次测试没有问题了。。。

好像这个问题纠结了好久好久好久好久好久,不知道大家烦了没有,反正我是快崩溃了。。。组里的人出差就我一个人在,没有人商量,墨迹了这么久。。。

代码的效率果然是很重要很重要很重要。要做死啊浪费这么久时间,赶紧做下面的工作去了。
此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表