电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
请问在使用串口通讯的时候,该如何去判断串口超时呢?
已解决
73482
个问题
已帮助
5993
位优秀工程师
请问在使用串口通讯的时候,该如何去判断串口超时呢?
奔跑的黑蚂蚁
2018-08-21
浏览量:2284
项目中有用到串口通讯,是用于几个数据采集点与主控器之间的信息交换,通讯协议是自定义。格式是(帧长+指令+读写标志+数据+CRC校验)。在调试的过程中发现,
(由于通讯协议中没有起始字节和结束字节,但是现在协议已经不能再更改了
)
如果没有串口超时检测的话,万一主控器或者是数据采集点的单片机正在接受串口数据时,人为断开串口线,接受数据的单片机就会一直在等待数据接收完成,从而导致数据错乱。我现在使用了一个定时器,一旦串口开始接收数据的时候,定时器就启动计时,没一毫秒中断一次,超过15毫秒数据接收没完成,就认为通讯异常,丢弃本次的数据(清除接收缓存和接收数据长度变量)不解析。我觉得应该还有其他的超时判断方法,请各位大神指教一下。
显示全部
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
yhj416606438
用一个定时中断计数器计数,如果在一帧信号里缺少一个字节计数器会超过一个值就判断出错
发布于
2018-08-21
举报
评论 0
0
0
其他答案
数量:
7
robe_zhang
hal 库函数里面,iic spi 接收函数 api 都有超时那个参数,可以看一下库怎么实现的。官方正规的方法,借鉴意义大
发布于
2018-08-21
举报
评论 0
0
0
这是经国
可以使用串口空闲中断,空闲时间长了,就是超时了
发布于
2018-08-21
举报
评论 1
0
0
奔跑的黑蚂蚁
回复了 这是经国 :目前UASRT1有空闲中断,2没有
回复
勇哥来巡山
常用的就是用一个定时器中断去判断超时,比如modbus就是这种机制
发布于
2018-08-24
举报
评论 0
0
0
donatello
串口的寄存器发送函数就有判断超时的,用USARTx->ISR寄存器的第23位来判断发送时长:
USARTx->DR=a;
while(!USARTx->ISR&0x700)
delay++;
发布于
2018-08-26
举报
评论 0
0
0
chen0000009
STM32有个串口空闲中断,叫做IDLE,这个中断可以在串口由有数据交互到出现空闲的时候产生一个中断,通过这个可以判断的
发布于
2018-08-31
举报
评论 0
0
0
菜鸟冷虎
要用一个串口的超时处理,根据数据进行定时器的计时然后再判断
发布于
2018-09-18
举报
评论 0
0
0
bigCQ
用一个串口的空闲中断去处理,这个中断会在传输完产生一个中断
发布于
2018-09-19
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
请问在使用串口通讯的时候,该如何去判断串口超时呢?
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: