【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
创始人
2024-05-25 18:44:24
0

一、Uart串口接收空闲中断----详解

首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。

Uart串口通信----数据传输方式

串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口
一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以 起始位 开始,以 停止位 结束,字符之间没有固定的时间间隔要求。

每一个字符的前面都有一位 起始位 (低电平),字符本身由8位数据位组成,接着字符后面是一位 校验位 (检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位 停止位 ,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。具体如下图所示。

在这里插入图片描述

实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置

Uart串口通信----接收空闲中断

一般我们串口接收的时候都是使用的RXNE(接收数据寄存器非空中断)。
接收到一个字节数据就进入一次中断,然后把它放入缓存,但是数据量很大的时候会频繁进入中断影响单片机的时效性。

这时我们就可以使用 IDLE (空闲线路检测中断):当接收完一个字符后,在下一个字节时间内收到的全都是高电平(在一个字节时间内没有收到下一个字节的低电平起始位),那么产生空闲中断。

一帧完整字符串数据内的字符是连续发送的,这样发送的字符之间的时间间隔通常是很小的,比一个字节时间小。
当产生串口空闲中断时,就说明这一帧数据接收完成。

二、使用STM32CubeMX----新建Uart串口接收空闲中断工程

前言

本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。
串口通信引脚MCU引脚 对应关系如下:

串口通信引脚MCU引脚
TXPA9
RXPA10

步骤1:打开 STM32CubeMX 软件

具体 STM32CubeMX 界面如下:

在这里插入图片描述

步骤2:选择 从MCU开始我的项目

在这里插入图片描述

步骤3:选择MCU芯片

我们本次实验选择 STM32F407VET6 芯片做 MCU
在这里插入图片描述

进入工程编辑,具体界面如下:

在这里插入图片描述

步骤4:设置烧写方式为 SWD模式

这一步必须选择一种烧写方式,否则烧写一次程序后,芯片中就没法再次烧写程序了。需要硬件重启才可以重新烧写程序。

STM32烧写程序连接方式详解

在这里插入图片描述

步骤5:设置时钟源

设置外部晶振为芯片系统时钟源。
在这里插入图片描述

步骤6:Uart 串口配置

设置参数

串口设置参数
波特率115200 Bits/s
数据长度8 bit
奇偶校验
停止位1位
数据方向接收和发送使能

在这里插入图片描述

使能中断

在这里插入图片描述

步骤7:设置时钟

STM32F407 时钟最大频率为 168M
在这里插入图片描述

步骤8:项目编辑

在这里插入图片描述

步骤9:代码生成编辑

在这里插入图片描述

步骤10:点击 GENERATE CODE 生成代码

在这里插入图片描述
新建的工程,已经生成,接下来就是对工程代码的编辑。

三、使用keil5----编辑Uart串口空闲中断

想要使用keil5打开工程,需要电脑先安装 keil5编译环境,具体操作流程。
可以点击下方文章链接:Keil5编译环境搭建流程

步骤1:使用keil5打开工程

点击工程文件中的MDK-ARM 文件
在这里插入图片描述
打开keil5工程
在这里插入图片描述

步骤2:用户代码编辑位置

用户代码 要写在 USER xxxx BEGIN xxxUSER xxxx END xxx 之间。
这样下次使用 STM32CubeMX 重新生成代码后,自己写的代码不会被删除。

在这里插入图片描述

步骤3:使用到的HAL库函数

//串口空闲中断模式接收
HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);  
//串口空闲中断回调函数
HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);                                                                                                                                                                                                                      

步骤4:Uart串口接收空闲中断

具体步骤如下:

  1. 初始化串口。
  2. 然后在初始化中,调用一次接收空闲中断函数HAL_UARTEx_ReceiveToIdle_IT();
  3. 然后在接收空闲中断回调函数中处理接收数据。
  4. 回调函数中要调用一次接收空闲中断函数HAL_UARTEx_ReceiveToIdle_IT(); 使得程序可以重新触发接收中断。

代码实现如下:

uint8_t Uart1_RX_data[100];//接收数据缓存,大小可设void Uart1_IT_Init(void)
{HAL_UARTEx_ReceiveToIdle_IT(&huart1, Uart1_RX_data, 100);//调用接收空闲中断
}	//接收空闲中断回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart->Instance==USART1){/****处理数据****/HAL_UARTEx_ReceiveToIdle_IT(&huart1, Uart1_RX_data, 100);//调用接收空闲中断}
}

将接收中断函数HAL_UART_Receive_IT()写到初始化中。

在这里插入图片描述

步骤5:烧写程序到芯片

具体烧写操作步骤,可以查看以下文章,有详细的烧写说明。
文章链接:
烧写程序(STM32+GD32):ST-link V2调试下载器实物和连接方式
烧写程序(STM32+GD32):ST-link驱动下载和安装
烧写程序(STM32+GD32):Keil5使用ST-link下载程序
资源链接:ST-link驱动链接----点击下载

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...