打印
[STM32F0]

请教一个关于HAL_UART_RxCpltCallback函数的问题

[复制链接]
11582|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
damifan|  楼主 | 2017-2-27 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在HAL_UART_RxCpltCallback函数中接收数据,每次pc发来5个字符,我只能接到钱两个?一直这样发,每次也是接到前两个,求解,谢谢
沙发
damifan|  楼主 | 2017-2-27 15:44 | 只看该作者
我设置的是每次接收1个字节

使用特权

评论回复
板凳
damifan|  楼主 | 2017-2-27 16:13 | 只看该作者
有人知道能帮一下不?

使用特权

评论回复
地板
damifan|  楼主 | 2017-2-27 16:46 | 只看该作者
请教

使用特权

评论回复
5
damifan|  楼主 | 2017-2-27 17:14 | 只看该作者
不要沉

使用特权

评论回复
6
icecut| | 2017-2-27 17:45 | 只看该作者
你不会一次多接收几个?
你接收完了,赶紧收下一个....别拖着...

使用特权

评论回复
7
damifan|  楼主 | 2017-2-27 17:53 | 只看该作者
感谢大神的回复,问题是我也不知道一次会来几个数据,pc发的5个字符是测试用的,实际传输可能一次来10几个或者几个均有可能,所以我只能一个一个的收,然后自己组包判断处理,大神一般对这问题咋解决

使用特权

评论回复
8
damifan|  楼主 | 2017-2-27 17:53 | 只看该作者
icecut 发表于 2017-2-27 17:45
你不会一次多接收几个?
你接收完了,赶紧收下一个....别拖着...

感谢大神的回复,问题是我也不知道一次会来几个数据,pc发的5个字符是测试用的,实际传输可能一次来10几个或者几个均有可能,所以我只能一个一个的收,然后自己组包判断处理,大神一般对这问题咋解决

使用特权

评论回复
9
icecut| | 2017-2-27 17:56 | 只看该作者
本帖最后由 icecut 于 2017-2-27 17:58 编辑
damifan 发表于 2017-2-27 17:53
感谢大神的回复,问题是我也不知道一次会来几个数据,pc发的5个字符是测试用的,实际传输可能一次来10几 ...

收一个,保存在缓冲区,赶紧提交下一个接收

你可以提交接收 n 多个.但是每接收到一个来一个中断.方法应该很多

使用特权

评论回复
10
damifan|  楼主 | 2017-2-27 22:07 | 只看该作者
还是没有解决问题的招

使用特权

评论回复
11
yklstudent| | 2017-2-27 23:12 | 只看该作者
USART+DMA,使用串口空闲中断来判断帧

使用特权

评论回复
12
renxiaolin| | 2017-2-28 09:03 | 只看该作者
这个问题不那么简单

使用特权

评论回复
13
renxiaolin| | 2017-2-28 09:05 | 只看该作者
HAL强调的是通用性,但牺牲啦cpu效率,做啦很多无用的代码,建议你根据需求精简代码,另外就你提的问题,需要跟踪看看HAL的代码,要花时间呀

使用特权

评论回复
14
damifan|  楼主 | 2017-2-28 15:01 | 只看该作者
这个问题在我研究啦HAL的代码后,决定自己重写中断函数,现在已经搞定,谢谢大家

使用特权

评论回复
15
mochou| | 2017-10-10 14:16 | 只看该作者
damifan 发表于 2017-2-28 15:01
这个问题在我研究啦HAL的代码后,决定自己重写中断函数,现在已经搞定,谢谢大家 ...

你好,把你的USART2 发送接收程序共享吧,我调试的用HAL库感觉USART+DMA一次只能接收一字节的数据,找不哪里有问题,

使用特权

评论回复
16
mochou| | 2017-10-10 14:18 | 只看该作者
damifan 发表于 2017-2-28 15:01
这个问题在我研究啦HAL的代码后,决定自己重写中断函数,现在已经搞定,谢谢大家 ...

你好,把你的USART2 发送接收程序共享吧,我调试的用HAL库感觉USART+DMA一次只能接收一字节的数据,找不哪里有问题,

使用特权

评论回复
17
chen033481| | 2017-10-17 14:56 | 只看该作者
DMA循环接收。接收是接收,解码是解码,两者分开就行了。或者用空闲帧中断同步解码。

使用特权

评论回复
18
sonicll| | 2017-10-17 15:34 | 只看该作者
caosix 发表于 2017-2-27 21:38
HAL 库 原始 设计 是 要 接收 已知长度 的数据。

当然 有人 改为 接收 一个字节 就 中断一次,

那是你设计的接收逻辑不合理,用DMA循环模式接收,使用__HAL_DMA_GET_COUNTER()来获取已经接收的数量

使用特权

评论回复
19
Erichk| | 2017-10-19 18:37 | 只看该作者
用空闲帧中断同步解码

使用特权

评论回复
20
Rollo| | 2017-10-20 10:48 | 只看该作者
需要跟踪看看HAL的代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

79

帖子

1

粉丝