完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我现在采用串口接收,device从串口读出数据,根据超时时间判断一帧数据是否完成。现在的问题是超时时间要设置成230ms,才可以不出错的接收数据。如果时间短了,会把一帧数据分成两部分 如图所示,一帧数据424字节,每次接收数据是150多,或者18个。 接收函数 void read_uart(void parameter) rt_err_t env_recv_ind(rt_device_t dev, rt_size_t size) void dtu_recv_timer_timeout(void *para) |
|
相关推荐
5个回答
|
|
一帧424字节是连续发的吗,还是分成几个帧发的,如果是连续发的,超15ms左右就可以了,不可能有230ms的,除非是分几个帧发出来。如果是分几帧发出来的,就要做拼包处理了。
|
|
|
|
是调用device write函数发的,应该是轮询发送,发送的时候是一条,不是分开的。
我是DMA接收,接收的时候,就是有这么多时间差值啊,这个时间差值从哪来的呢 串口初始化和接收代码就在上面,能帮忙分析下可能是哪里耽误了时间吗?谢谢 |
|
|
|
使用rs485软件包可解决问题
使用串口DMA接收时,串口的空闲中断时间很短,很容易被触发,所以在接收一长段数据时,可能会有多次空闲中断发生;你的定时器测量的超时实际就变成了两次空闲中断的间隔时间,而两次空闲中断的间隔时间很不确定,跟很多因素相关,可能几个ms,也可能上百ms;从而就出现了你描述的情况。 |
|
|
|
也就是说我测量的是两次空闲中断之间的时间。那是不是dma接收的时候,用超时判断不太好。超时判断用在rxne接收的时候比较好。
|
|
|
|
其实,串口接收使用DMA是减少系统负荷很好的办法,但是在驱动设计实现上没考虑用户利用间隔分帧的需求。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1035 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3400 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1462 浏览 0 评论
2140 浏览 0 评论
1637 浏览 0 评论
75303 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 05:24 , Processed in 0.518160 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号