完善资料让更多小伙伴认识你,还能领取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是减少系统负荷很好的办法,但是在驱动设计实现上没考虑用户利用间隔分帧的需求。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:00 , Processed in 3.035654 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
168