1003|6

970

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

HAL_UART_Receive_IT(huart,pData,Size)中参数size是要求一定要接收size个BYTE吗 [复制链接]

邀请:@maychang   @chunyang   @吾妻思萌   @wangerxian   参与回复

HAL_UART_Receive_IT(huart,pData,Size)中参数size是要求一定要接收size个BYTE吗,如果接收不到,是不是这个函数会一直等下去

此帖出自stm32/stm8论坛

最新回复

本帖最后由 damiaa 于 2024-1-25 11:26 编辑 所以开始程序初始化的时候就要设置多少个接收数据产生中断。 在中断里面又会重新设置下次要接收多少个数据产生中断。   这个函数会接收数据  同时会设置下一次接收多少数据 并开始接收准备。   所以很灵活 比如你接收101个字节完事 你可以第一次开启接收100个字节后产生中断处理前面数据。 后面你中断中设置下次再接收1个字节后产生中断。等后面一个字节接收了你就收工。 当然这不一定有多好。反正是有比较灵活的用法了。   详情 回复 发表于 2024-1-25 11:19
点赞 关注
 

回复
举报

6881

帖子

2

TA的资源

版主

沙发
 

不会一直等下去,而是接收到一定的size数据才会产生中断。一般size都会设置为1,没接收到一个数据产生一次中断。

此帖出自stm32/stm8论坛
 
 

回复

274

帖子

8

TA的资源

纯净的硅(初级)

板凳
 
这个函数是不阻塞的。当收到size个数据后会调用接收完成的回调函数,没收到size个数据,就一直不调用接收完成的回调函数。
此帖出自stm32/stm8论坛
 
 

回复

6078

帖子

4

TA的资源

版主

4
 

没到中断条件(接收到Size个字节数据)不会调用它,所以不存在等待。到了就直接处理。

 

但最好设置成1字节。这样收到一个处理一个。否则比如你设置成10个字节,你串口发送设备只发9个。

 

接收的这个设备端收到9个不产生中断。用户就没收到1个数据。只有第10个数据发过去,中断才产生。你一次收到10个数据。

 

发送1 2 3 4 5 6 7 8 9==》接收缓冲1 2 3 4 5 6 7 8 9 不产生中断  接收不调用中断处理数据 用户看不到一个数据

继续发送10==》接收缓冲1 2 3 4 5 6 7 8 9 10 产生中断  接收调用中断处理10个数据 用户看到10个数据

 

这也许不是你要的结果。具体怎么样整还是靠你自己把握。

 

此帖出自stm32/stm8论坛

点评

谢谢。如您所说【接收缓冲1 2 3 4 5 6 7 8 9 不产生中断】【接收缓冲1 2 3 4 5 6 7 8 9 10 产生中断】。HAL_UART_Receive_IT()不是在中断中接收函数吗,这个函数接收到size个数据后它自己会产生一个中断吗?  详情 回复 发表于 2024-1-25 10:59
 
 
 

回复

970

帖子

0

TA的资源

五彩晶圆(初级)

5
 
damiaa 发表于 2024-1-25 10:23 没到中断条件(接收到Size个字节数据)不会调用它,所以不存在等待。到了就直接处理。   但最好 ...

谢谢。如您所说【接收缓冲1 2 3 4 5 6 7 8 9 不产生中断】【接收缓冲1 2 3 4 5 6 7 8 9 10 产生中断】。HAL_UART_Receive_IT()不是在中断中接收函数吗,这个函数接收到size个数据后它自己会产生一个中断吗?

此帖出自stm32/stm8论坛

点评

不是函数产生中断 是cpu的串口接收到10个数据产生中断,在这个中断里会调用这个函数处理这10个数据。    详情 回复 发表于 2024-1-25 11:15
 
 
 

回复

6078

帖子

4

TA的资源

版主

6
 
本帖最后由 damiaa 于 2024-1-25 11:20 编辑
 

是cpu的串口接收到10个数据cpu产生中断,在这个中断里会调用这个函数处理这10个数据。

中断的产生是有cpu处理  用户要设置多少个数据产生中断,并且中断产生后及时的把这些数据取走并处理。

 

此帖出自stm32/stm8论坛
 
 
 

回复

6078

帖子

4

TA的资源

版主

7
 
本帖最后由 damiaa 于 2024-1-25 11:26 编辑

所以开始程序初始化的时候就要设置多少个接收数据产生中断。

在中断里面又会重新设置下次要接收多少个数据产生中断。

 

这个函数会接收数据  同时会设置下一次接收多少数据 并开始接收准备。

 

所以很灵活

比如你接收101个字节完事

你可以第一次开启接收100个字节后产生中断处理前面数据。

后面你中断中设置下次再接收1个字节后产生中断。等后面一个字节接收了你就收工。

当然这不一定有多好。反正是有比较灵活的用法了。

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表