本帖最后由 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库接收不定长数据的功能了。
整个工程代码如下。
|