【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
一、Uart串口接收空闲中断----详解
首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。
Uart串口通信----数据传输方式
串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。
一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以 起始位 开始,以 停止位 结束,字符之间没有固定的时间间隔要求。
每一个字符的前面都有一位 起始位 (低电平),字符本身由8位数据位组成,接着字符后面是一位 校验位 (检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位 停止位 ,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。具体如下图所示。
实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。
Uart串口通信----接收空闲中断
一般我们串口接收的时候都是使用的RXNE(接收数据寄存器非空中断)。
接收到一个字节数据就进入一次中断,然后把它放入缓存,但是数据量很大的时候会频繁进入中断影响单片机的时效性。
这时我们就可以使用 IDLE (空闲线路检测中断):当接收完一个字符后,在下一个字节时间内收到的全都是高电平(在一个字节时间内没有收到下一个字节的低电平起始位),那么产生空闲中断。
一帧完整字符串数据内的字符是连续发送的,这样发送的字符之间的时间间隔通常是很小的,比一个字节时间小。
当产生串口空闲中断时,就说明这一帧数据接收完成。
二、使用STM32CubeMX----新建Uart串口接收空闲中断工程
前言
本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。
串口通信引脚 与 MCU引脚 对应关系如下:
串口通信引脚 | MCU引脚 |
---|---|
TX | PA9 |
RX | PA10 |
步骤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 xxx 和 USER 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串口接收空闲中断
具体步骤如下:
- 初始化串口。
- 然后在初始化中,调用一次接收空闲中断函数HAL_UARTEx_ReceiveToIdle_IT();
- 然后在接收空闲中断回调函数中处理接收数据。
- 回调函数中要调用一次接收空闲中断函数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驱动链接----点击下载
相关文章:

【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输,每个字符…...
Qt_文件操作
本文包含以下内容: 文件操作 基本介绍:ini文件:csv文件:代码功能文件读写:1.1 读取文件1.1.1按行读取1.1.2整体读取1.2 写入文件2. 文件信息读取3. 文件夹的创建4. 获取文件夹下所有的文件5. 获取文件夹及子文件夹下所有的文件用树的方式在界面显示文件夹目录基本介绍: …...

int和Integer有什么区别?
第7讲 | int和Integer有什么区别? Java 虽然号称是面向对象的语言,但是原始数据类型仍然是重要的组成元素,所以在面试中,经常考察原始数据类型和包装类等 Java 语言特性。 今天我要问你的问题是,int 和 Integer 有什么…...

Axure 9 收录不同效果的制作过程
效果类别 一、默认选中实现单选效果 1、默认选中 点击组件,右键选择selected字样; 2、实现单选效果 点击所有组件,右键选择selected group,填好命名,并设置选中时的组件样式;选择其中一个组件…...

[Datawhale][CS224W]图神经网络(一)
目录一、导读1.1 当前图神经网络的难点1.2 图神经网络应用场景及对应的相关模型:1.3 图神经网络的应用方向及应用场景二、图机器学习、图神经网络编程工具参考文献一、导读 传统深度学习技术,如循环神经网络和卷积神经网络已经在图像等欧式数据和信号…...
【Android实现16位灰度图数据转RGB数据并以bitmap格式显示】
Android实现16位灰度图数据转RGB数据并以bitmap显示(单通道Gray数据转三通道RGB数据并显示) 需求发现问题解决方案需求 问题需求:项目上需要实现将深度相机传感器给出的数据实时显示出来的功能。经过了解得知,传感器给出的数据为16位灰度图数据,即16位数据表示一个像素的…...

uni-app②
文章目录二、微信小程序简介(一)文档相关开发者工具使用小程序代码构成小程序基本操作三、uniapp 开发规范uniapp 开发环境开发工具下载 HBuilderX工程搭建项目运行浏览器运行四、组件基础组件基础组件列表组件公共属性集合扩展组件自定义组件UNI-ICON五…...
FFmpeg视频处理
目录 1. Ubuntu(wsl)安装 ffmpeg 2. ffmpeg查看指令 3. ffmpeg查看媒体文件信息 4. ffmpeg基础操作指令 5. ffmpeg视频抽帧 5.1 基于时间抽取帧 5.2 两种抽帧方式 5.3 视频流抽帧 5.4 视频批量抽帧 6. ffmpeg更改视频播放速度 7. ffmpeg视频格…...

FreeRTOS任务通知 | FreeRTOS十二
目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …...

CentOS搭建博客typecho
Ubuntu搭建博客typecho_Dyansts的博客-CSDN博客 见过这样的文章展示页面吗? 详细视频安装教程: 9分钟快速搭建typecho博客,让你不再烦恼_哔哩哔哩_bilibili 现在就把他搭建出来 展示页面:Hello World 其他的插件:…...
湖南中创教育PMP如何实施风险应对,避免产生投诉
一、评估风险 评估风险影响的直接或间接价值 面临的潜在威胁,威胁发生的可能性有多大? 威胁一旦发生,损失是多大? 评估承受风险的能力 采取怎样的措施才能将损失降到最低,甚至为零 二、规划风险 对识别出来的风险进行分组或分类 确定…...
Urho3D子系统
通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。 发动机初始化后,以下子系统将…...
无线网络术语总结
学习802.11协议,其中有一些英文缩略词,这里做一下总结与记录。 学习资料:知乎徐方鑫 802.11相关文章 802.11协议精读3:CSMA/CD与CSMA/CA - 知乎 (zhihu.com) 无线网络术语缩写全称中文含义APAccessPoint无线访问节点用于无线网络…...

海卡和海派有什么区别
一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式,海派是到海港海关清关拆柜后,尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后,尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…...

vue3学习资料整理
一、一个后端程序员为什么要学习前端? 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点(nodejs的概念与特征详解)》 https://www.1pindao.co…...

Linux基础语法进阶版
Linux基础语法 查看文件内容指令 touch 主要是修改文件时间,多用创建文件 -a #只更改访问时间 -m #只更改修改时间 -c --no-create#不创建任何文件cat 展示小文件内容 -b #对于非空输出行编号 -n #对于所有行输出编号 -E #在每行结束处显示"$" -A #展示所…...

近红外染料标记小分子1628790-37-3,Cyanine5.5 alkyne,花青素CY5.5炔基
试剂基团反应特点:Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃。氰基5.5是Cy5.5的类似物,一种流行的荧光团,已广泛用于各种应用,包括完整生物体成像。在温和的铜催化化学条件下,该试剂可与叠氮基共轭&a…...
洛谷——P1004 方格取数
【题目描述】 设有 NN 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0…...

Linux删除软链接
不防大家试试 unlink 命令 首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建test_chk目录 的软链接 #ln-s test_chk test_chk_ln 软链接创建好了,我们来…...

【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
用于大型Transformer的8-bit矩阵乘法介绍原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes 相关博客 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...