打印
[STM32F1]

STM32的HAL库实现串口的不定长数据接收

[复制链接]
825|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
clokyme|  楼主 | 2021-12-31 14:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 clokyme 于 2021-12-31 14:08 编辑

#申请原创#前言:
在使用STM32HAL库进行串口通信的时候发现不论使用轮询、中断或DMA接收方式都只能接收固定长度的数据,但是在实际使用的过程中我们需要接收不定长的数据,那是否意味我们无法使用HAL库了呢?是否需要重新构建自己的接收函数吗?答案是否定的,我们依然可以直接使用HAL库中封装好的函数,我们只需利用串口的空闲中断来实现接收不定长的数据,但是HAL库中没有IDLE中断的服务函数,为此我们只需自己构建一个IDLE中断的服务函数即可。
实现步骤:
  • 建立工程
  • 打开CubeMX软件,根据自己的硬件选择对应的芯片型号,建立CubeMX工程。然后配置调试接口,这里需要根据自己硬件的调试口选择是SWD还是JTAG接口,然后配置系统时钟,根据硬件选择是否使用外部晶振,配置时钟树。




2.配置串口通信相关参数,主要设置通信方式波特率、数据位、校验方式等信息。


3.设置中断优先级,若要使用DMA方式的话需要再额外配置DMA相关信息

3.配置好上述信息后就可以配置工程的最后一些信息,即可生成工程和代码,此处我选择生成IAR工程,也可以选择生成MDK的工程,看自己的需求了。

  • 添加用户代码,实现不定长数据接收


添加中断回调服务函数

然后再在主函数中将接收到的数据简单的发出去。上述修改完成后就实现了我们使用HAL库接收不定长数据的功能了。


整个工程代码如下。



8886161c57f57313db.png (46.53 KB )

8886161c57f57313db.png

7875261c581d22a934.png (18.4 KB )

7875261c581d22a934.png

com.zip

1.05 MB

使用特权

评论回复
沙发
jgp886585| | 2021-12-31 15:14 | 只看该作者
看看

使用特权

评论回复
板凳
weiwei4dk| | 2021-12-31 17:08 | 只看该作者
谢谢分享, 不定长接收还是很常用的

使用特权

评论回复
地板
kkzz| | 2022-1-2 16:27 | 只看该作者
用定时器判断不行吗  

使用特权

评论回复
5
hudi008| | 2022-1-2 16:30 | 只看该作者
在一帧数据尾部添加一个小尾巴  

使用特权

评论回复
6
hudi008| | 2022-1-2 16:31 | 只看该作者
数组是如何存储  

使用特权

评论回复
7
lzmm| | 2022-1-2 16:31 | 只看该作者
可以使用环形fifo  

使用特权

评论回复
8
minzisc| | 2022-1-2 16:31 | 只看该作者
IDLE中断的服务函数是定时器吗   

使用特权

评论回复
9
selongli| | 2022-1-2 16:32 | 只看该作者
用的dma中断吗   

使用特权

评论回复
10
fentianyou| | 2022-1-2 16:32 | 只看该作者
我一般用超时判断的。  

使用特权

评论回复
11
xiaoyaodz| | 2022-1-2 16:33 | 只看该作者
期待自带的idle了   

使用特权

评论回复
12
febgxu| | 2022-1-2 16:33 | 只看该作者
HAL库中断呢   

使用特权

评论回复
13
sdlls| | 2022-1-2 16:34 | 只看该作者
串口的空闲中断是什么标志   

使用特权

评论回复
14
pixhw| | 2022-1-2 16:34 | 只看该作者
定时器判断。   

使用特权

评论回复
15
minzisc| | 2022-1-2 16:34 | 只看该作者
这个不是通过字符串判断吗  

使用特权

评论回复
16
lzmm| | 2022-1-2 16:34 | 只看该作者
可以直接使用HAL库中封装好的函数

使用特权

评论回复
17
hudi008| | 2022-1-2 16:34 | 只看该作者

使用特权

评论回复
18
kkzz| | 2022-1-2 16:34 | 只看该作者
DMA怎么判断不定长呢?   

使用特权

评论回复
评论
cool_coder 2022-1-2 20:15 回复TA
启动 DMA 之后等 IDLE 中断就行了。 
19
febgxu| | 2022-1-2 16:34 | 只看该作者
使用中断如何判断呢  

使用特权

评论回复
20
xiaoyaodz| | 2022-1-2 16:34 | 只看该作者
判断idle太麻烦了。  

使用特权

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

本版积分规则

3

主题

44

帖子

1

粉丝