你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F030F4P6 串口接收发送问题

[复制链接]
su-409464 提问时间:2018-3-7 08:52 /
阅读主题, 点击返回1楼
收藏 评论22 发布时间:2018-3-7 08:52
22个回答
回答时间:2018-3-7 11:10:22
普通的串口接收就一个字节
anobodykey 回答时间:2018-3-7 11:17:53
su-409464 发表于 2018-3-7 10:53
好像真的是 溢出了~~~
几个字符可以,但是一长串 字符就 挂了!!!!

ST的串口没有硬件缓存区,你得用软件实现,譬如申请一个100字节的缓存区,在中断中把收到的数据放到缓存中,在主函数中进行回显操作,论坛里有很多这样的例程的
su-409464 回答时间:2018-3-7 11:20:20
安 发表于 2018-3-7 11:10
普通的串口接收就一个字节

好的谢谢!
su-409464 回答时间:2018-3-7 11:28:53
anobodykey 发表于 2018-3-7 11:17
ST的串口没有硬件缓存区,你得用软件实现,譬如申请一个100字节的缓存区,在中断中把收到的数据放到缓存 ...

好的明白!
这样的话 关于软件缓存的动作我就有一个 疑问;

首选由于 ST 没有硬件缓存区,那么意味着 接收到一个完整的字节 后  中断触发。

中断触发后,串口是否还在工作呢?
比如发送端发过来 一个20字节的字符, 收到第一个字符之后 开始进入中断,

后面19个字符 是等中断出来, 然后下一个字节接收 触发中断 ,再进入中断接收?
还是, 在第一个字节进入中断后, 串口继续工作,后面的字符继续  “收” 进来?

如果是第二种情况 那么, 如果 发送端是不定时的话, 那软件上做缓存  会不会 出现 “断节” 的现象

比如 缓存区15个字节, 第一次 来了10个字符, 接收过程中又来了10个~~~ 只收后一个包的5个字符
回答时间:2018-3-7 11:42:29
中断产生后需要自己去把数据收到缓冲区,如果不收,这样就容易导致溢出。所有处理都是自己写代码解决。如果用DMA就不需要管理,接收到指定数量后会产生DMA中断。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

su-409464 回答时间:2018-3-7 11:58:49
安 发表于 2018-3-7 11:42
中断产生后需要自己去把数据收到缓冲区,如果不收,这样就容易导致溢出。所有处理都是自己写代码解决。如果 ...

谢谢你!

DMA  的工作机制 是  接收到指定数量后会产生DMA中断????

那这样的不合适, 比如对应接收不定长 字符串的时候,    这个指定数量 就麻烦了。

可能接收了 其中的一般,  也可能接收了  未达到指定数量~~~~

wudianjun2001 回答时间:2018-3-7 12:55:17
中断标志好像没清除吧
还有一般不要在中断里发送数据,收到后到缓冲区,然后在主循环里发

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

好心情123 回答时间:2018-3-7 12:57:04
是接收中断溢出问题,我也碰到了同样的问题,找了很久才发现,默认中断溢出是打开的,可以初始化的时候关闭掉

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

anobodykey 回答时间:2018-3-7 13:59:15
su-409464 发表于 2018-3-7 11:28
好的明白!
这样的话 关于软件缓存的动作我就有一个 疑问;

你要相信MCU的速度是很快的M级别的,而串口的速度是很慢的一般处于K级别,你处理完第一个字节时,第二个字节都有可能还没来到总线上呢,软件做的好的话一般不会出现你说的断节现象
su-409464 回答时间:2018-3-7 14:54:06
好心情123 发表于 2018-3-7 12:57
是接收中断溢出问题,我也碰到了同样的问题,找了很久才发现,默认中断溢出是打开的,可以初始化的时候关闭 ...

我没有修改初始化 将中断溢出 关闭,  我参考这个  ,在中断接收函数中 清中断标志位 和中断接收溢出位
http://bbs.21ic.com/icview-160999-1-1.html
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版