[STM32H7] STM32H743+CubeMX-串口非空闲中断接收

[复制链接]
803|2
 楼主| zljiu 发表于 2021-9-4 13:30 | 显示全部楼层 |阅读模式

一、前言
在实际工作上,串口连续中断接收最灵活与实用。 如果项目上使用了RTOS,那么串口非空闲中断接收+消息队列就是一个完美的组合。如果项目上没有使用RTOS,那么串口非空闲中断接收+ringbuffer算法(FIFO)也是一个完美的组合。

二、CubeMX
2.1、选择串口
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg
接着,需要打开global interrupt。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg
为了更加稳定,上拉USART3_RX引脚。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg

 楼主| zljiu 发表于 2021-9-4 13:31 | 显示全部楼层
三、代码3.1、main.c

__HAL_UART_ENABLE_IT()打开串口3的接收非空闲中断。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg


 楼主| zljiu 发表于 2021-9-4 13:33 | 显示全部楼层
3.2、stm32f7xx_it.c
在中断回调函数里,判断是不是非空闲中断。下图摘自STM32F103项目,STM32H743的话,需要将huart3.Instance->DR改为huart3.Instance->RDR。当中断时非空闲中断时,将接收到的字符放入FIFO里,等解释串口的代码从FIFO里获取即可。(中断回调函数不能写太多代码,中断回调函数必须快进快出,保证整个系统的实时性。)
215456133049d729ea.png

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

本版积分规则

51

主题

3327

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部