当前位置: 首页 > news >正文

【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断


一、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驱动链接----点击下载

http://www.lryc.cn/news/5278.html

相关文章:

  • Qt_文件操作
  • int和Integer有什么区别?
  • Axure 9 收录不同效果的制作过程
  • [Datawhale][CS224W]图神经网络(一)
  • 【Android实现16位灰度图数据转RGB数据并以bitmap格式显示】
  • uni-app②
  • FFmpeg视频处理
  • FreeRTOS任务通知 | FreeRTOS十二
  • CentOS搭建博客typecho
  • 湖南中创教育PMP如何实施风险应对,避免产生投诉
  • Urho3D子系统
  • 无线网络术语总结
  • 海卡和海派有什么区别
  • vue3学习资料整理
  • Linux基础语法进阶版
  • 近红外染料标记小分子1628790-37-3,Cyanine5.5 alkyne,花青素CY5.5炔基
  • 洛谷——P1004 方格取数
  • Linux删除软链接
  • 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
  • 设计模式之工厂模式详解和应用
  • ArcGIS中的附件功能
  • epoll单台设备支持百万并发连接
  • 网络字节序
  • 03- SVC 支持向量机做人脸识别 (项目三)
  • 浅谈指向二维数组元素的指针变量
  • 左右值引用和移动语义
  • 一起学习用Verilog在FPGA上实现CNN----(七)全连接层设计
  • tomcat打debug断点调试
  • 如果持有互斥锁的线程没有解锁退出了,该如何处理?
  • 信息论绪论