OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2362|回复: 2

求助:STM32F103串口发送缓冲区被覆盖

[复制链接]

2

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2016-11-30
在线时间
62 小时
发表于 2019-6-27 21:22:52 | 显示全部楼层 |阅读模式
50金钱


STM32F103 串口使用中断型式发送数组数据,现在的数据还没有发送完成,又有新的数据需要发送,如何处理?

如果直接将需要发送的数据写入到发送数组中,就会覆盖掉还没有发送完成的数据;如果等发送完成,再将需要发送的数据写入到发送数组,则将阻塞CPU,求助各位大佬。


最佳答案

查看完整内容[请看2#楼]

用环形缓冲区。或者是方案、产品设计问题,环形缓冲区即是“生产者”和“消费者”模型,如果“生产者”(塞入数据)比“消费者”(发送)还快,只能增大缓冲区。增大缓冲区还是解决不了,就是考虑方案的合理性或者程序的设计是否合理。 环形缓冲区: https://blog.csdn.net/qq_20553613/article/details/78902689
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2019-6-27 21:22:53 | 显示全部楼层
用环形缓冲区。或者是方案、产品设计问题,环形缓冲区即是“生产者”和“消费者”模型,如果“生产者”(塞入数据)比“消费者”(发送)还快,只能增大缓冲区。增大缓冲区还是解决不了,就是考虑方案的合理性或者程序的设计是否合理。
环形缓冲区:
https://blog.csdn.net/qq_20553613/article/details/78902689
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4520
金钱
4520
注册时间
2018-5-11
在线时间
946 小时
发表于 2019-6-27 21:54:32 | 显示全部楼层
这个问题要统筹考虑来解决。
首先,要计算一下你要放送的数据量是否已经超出串口的传输能力:估算每秒需要发送的数据有多少个字节,你配置的串口速率是否满足传输要求(波特速率除以10基本上就是每秒所能传输的最大字节数)。如果超出,能不能提高串口的速率?
然后,在串口速率基本够用的情况下,如果出现来不及传送的情况的话,就要考虑发送缓冲区是否可以开得再大一些?
另外,在具体软件设计技巧上,缓冲区最好采用环形缓冲区,这样不用等所有的数据发送完,就可以添加新的数据。可以大大提高缓冲区的利用效率。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 17:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表