cubemx串口的发送与接收_STM32F103编程学习——串口接收不定长数据

串口通信

在实际应用场合中大多数采用中断收发或DMA收发数据,提高MCU的处理效率。而实际应用的通信帧数据大多数都是不定长的,即每一帧数据的长度不定,若是采用接收中断的方式来处理数据,若数据帧较长的话,需要多次进入接收中断,会降低MCU的处理效率;若采用DMA的方式来接收数据,其每次都需要接收完DMA设置的接收长度数据才会触发中断,这样的话短帧数据一帧以接收完但不会触发中断,需要在应用程序中提取数据,处理起来稍微麻烦。

串口的空闲中断

为了解决实际应用中高效率的接收不定长数据,STM32的我串口提供了一种IDLE中断,即空闲中断来实现不定长数据的接收,平时接收信号线无数据的时候,串口接收处于空闲状态下,当串口接收到数据后,串口接收处于忙状态,当串口在一定时间内没有接收到数据,即串口自动至于空闲状态,产生空闲中断。实现一帧数据的完整接收。

这个空闲判断时间可以采用STM32串口自带的时间来判断,也可自己设置定时器定时判断空闲的间隙时间,就好比FreeModbus中的T35us定时器的定时时隙一样。

空闲中断实现不定长数据接收

在串口初始化的代码中开启串口空闲中断后,由于STM32的HAL库中的串口中断服务函数中没有相关IDLE中断处理的代码,所以需要用户自己按照HAL库的风格,添加自己的中断服务函数以及中断回调函数,具体实现的过程如下:

c274a70d94504638915a1ecc87d03a31

串口IDLE中断的服务函数

添加callback回调函数,在回调函数中处理串口接收到的数据

ed19ab3427cb49c386975a1a3bd1cf21

串口idle中断的回调函数

主函数中添加实现数据回发的代码,即将接收到的代码再发送回去。

7ad6f7c33b7f4846a17451e2bfd3bb87

串口发送回接到的数据

串口的基本配置,首先应用Cube MX软件配置系统时钟树,为所有外设配置时钟。

896aba88f21a4f3992d39323e78409ef

系统时钟树

配置串口,使用UART1,并采用DMA收发方式,DMA采用正常模式,Byte对齐模式,内存地址递增,外设地址不变。

36cee1fa319142998f0baa1f17a3d462

串口DMA配置

串口的时钟采用采用16周期采用模式,提高串口通信数据的准确性。

06a49cff259f4c64b148ff442c413c0f

串口通信参数配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值