stm32F103 串口2 中断 无法接收指定字符串 [已解决]
stm32F103 串口2中断接收指定字符串
- USART 初始化和中断配置示例
- 中断处理函数示例
- 关键点总结
确保在串口配置中正确使能空闲中断 (
USART_IT_IDLE) 是关键。这个中断可以帮助你在串口接收一帧数据完成后,进行相应的处理和分析。
为了确保你在串口配置时能避免类似问题,这里是一个详细的 USART 初始化和中断配置示例:
USART 初始化和中断配置示例
#include "stm32f4xx.h" // 包含相关的 STM32 库头文件void USART2_Init(void) {// USART2 初始化配置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;// 使能 USART2 和 GPIOA 时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);// 配置 USART2 TX(PA2)和 RX(PA3)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA, &GPIO_InitStructure);// 连接 USART2 引脚到其 AFGPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);// 配置 USART2 参数USART_InitStructure.USART_BaudRate = 115200; // 波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure);// 使能 USART2 接收中断和空闲中断USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // 使能接收中断USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); // 使能空闲中断// 配置 USART2 中断优先级NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 设置优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);// 使能 USART2USART_Cmd(USART2, ENABLE);
}
中断处理函数示例
确保你的中断处理函数如下配置,以便处理接收数据和空闲中断:
void USART2_IRQHandler(void) {u8 clr;if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { // 接收到一个字节if (i < USART2_REC_LEN) { // USART2最大接收字节数限制USART2_RX_BUF[i++] = USART_ReceiveData(USART2); // 读取一个字节len++; // 数据长度计算} else {USART_ReceiveData(USART2); // 读取一个字节,主要用于清除RXNE标志}}if (USART_GetITStatus(USART2, USART_IT_IDLE) != RESET) { // 接收到一帧数据USART2->SR; // 先读SRUSART2->DR; // 再读DR// 确保缓冲区以 '\0' 结尾if (i < USART2_REC_LEN) {USART2_RX_BUF[i] = '\0';} else {USART2_RX_BUF[USART2_REC_LEN - 1] = '\0'; // 超过缓冲区限制时保证最后一位是 '\0'}// 字符串比对if (strcmp((const char *)USART2_RX_BUF, "pass") == 0) {printf("pass111\r\n");} else if (strcmp((const char *)USART2_RX_BUF, "fail") == 0) {printf("fail111\r\n");} else {printf("Unrecognized command: %s\r\n", USART2_RX_BUF);}// 清空接收缓冲区for (clr = 0; clr < USART2_REC_LEN; clr++) {USART2_RX_BUF[clr] = '\0';}USART2_RX_STA = 0; // 重新开始接收i = 0; // 数组下标清0len = 0; // 数据长度清0}
}
关键点总结
- 使能中断:确保启用了接收中断 (
USART_IT_RXNE) 和空闲中断 (USART_IT_IDLE)。 - 配置正确的优先级:确保 USART2 的中断优先级设置正确,以避免被其他中断打断。
- 检查串口连接:确保串口连接正常,主机端配置一致,并且信号稳定。
希望这些信息对你进一步的开发和调试有所帮助!如果还有其他问题,随时告诉我。
相关文章:
stm32F103 串口2 中断 无法接收指定字符串 [已解决]
stm32F103 串口2中断接收指定字符串 USART 初始化和中断配置示例中断处理函数示例关键点总结 确保在串口配置中正确使能空闲中断 ( USART_IT_IDLE) 是关键。这个中断可以帮助你在串口接收一帧数据完成后,进行相应的处理和分析。 为了确保你在串口配置时能避免类似问…...
Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)
目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过…...
超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)
超声波测距模块参考资料 1.电路连接及引脚配置 触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读…...
Go语言结构体和元组全面解析
Go语言中的复合类型与其应用 在编程中,标准类型虽然方便,但无法满足所有需求。Go通过支持结构体和元组类型,为开发者提供了自定义数据类型的能力。本文将介绍如何定义结构体、如何使用指针操作结构体、如何通过元组返回多个值等内容…...
集成电路学习:什么是SDK软件开发工具包
SDK:软件开发工具包 SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解…...
java后端如何发送http请求
用java后端发送请求需要用到的一个工具包为HttpClient。HttpClient是Apache的一个子项目,是高效的、功能丰富的支持HTTP协议的客户端编程工具包。 引入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&…...
装WebVideoCreator记录
背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js WebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安装node和npm_linux离线安装npm-CSDN博客 1…...
【编程底层思考】什么是GC Roots
在Java虚拟机(JVM)中,GC Roots是垃圾收集(Garbage Collection,GC)过程中的起点,用于确定对象是否可被回收。GC Roots集合是一组必须活跃的(即必须保留在内存中的)引用&am…...
[STL --stack_queue详解]stack、queue,deque,priority_queue,容器适配器
stack stack介绍 1、stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2、stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供…...
240907-Gradio插入Mermaid流程图并自适应浏览器高度
A. 最终效果 B. 示例代码 import gradio as grmermaid_code """ <iframe srcdoc <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" />…...
ubuntu 安装python3 教程
本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 p…...
NOR Flash、NAND Flash……
存储类型描述Compact Flash一种用于便携式电子设备的数据存储设备,于1994年由SanDisk公司推出。SRAM静态随机存取存储器,不需要刷新电路即能保存数据,速度快但集成度低、功耗大。PSRAM伪静态随机存取存储器,结合了SRAM和DRAM的特点…...
【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发
【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发 提高代码的性能是软件开发中一个重要的方面,尤其是在处理大数据、高并发或实时性要求较高的应用时。以下是一些提…...
2024整理 iptables防火墙学习笔记大全_modepro iptables
Iptables名词和术语 2iptables表(tables)和链(chains) 2表及其链的功能 2 Filter表 2 NAT表 2 MANGLE表 2iptables的工作流程 3iptables表和链的工作流程图 3 二、 iptables实战应用 4iptables命令参数详解 4 iptable…...
实验记录 | 点云处理 | K-NN算法3种实现的性能比较
引言 K近邻(K-Nearest Neighbors, KNN)算法作为一种经典的无监督学习算法,在点云处理中的应用尤为广泛。它通过计算点与点之间的距离来寻找数据点的邻居,从而有效进行点云分类、聚类和特征提取。本菜在复现点云文章过程ÿ…...
【OJ】常用技巧
1. 模版 #include<bits/stdc.h> using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);// write herereturn 0; }2. 填充数组 memset是一个字节一个字节填充,如果是使int类型填充非0或者-1就会报错,如 int a[100]; memset(a…...
Redis:Redis性能变慢的原因
一、淘汰策略性能问题 当使用Redis当作缓存使用时,通常会给这个实例设置内存上限maxmemory,然后设置一个数据淘汰策略;如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。 原因在于,当Redis内存达到…...
Linux多线程——利用C++模板对pthread线程库封装
文章目录 线程封装主要框架线程启动线程等待其他信息 测试函数 线程封装 我们之前介绍过pthread的线程库,这个线程库主要是基于C语言的void*指针来进行传参和返回 我们使用C的模板对其封装可以让他的使用更加方便,并且经过测试可以让我们更加直观的了解…...
SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)
SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序) RabbitMQ常见问题解决方案问题一:消息丢失的解决方案(1)生成者丢失消息丢失的情景解决方案1…...
TensorRT-LLM高级用法
--multi_block_mode decoding phase, 推理1个新token, 平时:按照batch样本,按照head,将计算平均分给所有SM; batch_size*num_heads和SM数目相比较小时:有些SM会空闲;加了--multi_block_mode&…...
Linux 的 id 命令
id 是 Linux 系统中一个常用的命令行工具,用于显示用户和组的身份信息。 基本功能 id 命令可以显示当前用户或指定用户的以下信息: 用户 ID (UID)主组 ID (GID)所属的所有组 (Groups)用户名和组名(当与数字 ID 对应时) 常用命…...
纸箱压缩试验机哪个好
在包装行业,纸箱抗压性能直接决定着产品运输安全、仓储效率和企业成本控制。而纸箱压缩试验机(抗压试验机)就是衡量纸箱是否“扛得住”的核心设备。面对市面上琳琅满目的品牌与型号,很多企业主都会问:纸箱压缩试验机哪…...
Muon最佳实践:10个提升开发效率的实用技巧
Muon最佳实践:10个提升开发效率的实用技巧 【免费下载链接】muon GPU based Electron on a diet 项目地址: https://gitcode.com/gh_mirrors/mu/muon Muon作为一款基于GPU的轻量级Electron替代方案,采用Golang开发并使用Ultralight引擎࿰…...
117. 如何在Rancher监控中测试 AlertManager
Procedure 程序This guide demonstrates how to test Alertmanager and PrometheusRule configuration, to validate that alerts are sent successfully by Alertmanager. 本指南演示如何测试 AlertManager 和 PrometheusRule 配置,以验证 AlertManager 是否成功发…...
ChatGPT上车CarPlay:智能交互新突破与安全边界的平衡
ChatGPT集成CarPlay:行车途中的语音智能交互4月3日,OpenAI宣布ChatGPT正式获得苹果CarPlay系统的集成支持。这一更新让CarPlay用户能够在车载仪表盘界面直接通过语音与ChatGPT进行交互,实现了行车途中的免提提问与请求服务。该功能的实现得益…...
AI辅助开发:让快马智能生成代码优化50台云桌面的动态资源调度策略
今天想和大家分享一个特别实用的技术实践——如何用AI辅助开发来优化云桌面的资源调度。最近在做一个项目,需要在一台主机上运行50台云桌面,这对资源调度提出了很高的要求。传统的静态分配方式显然不够灵活,于是我开始探索AI辅助开发的解决方…...
禅道最新22.0+ 手动删除无法安装之清理卸载办法
禅道项目管理软件卸载方法详解:如何彻底清除所有相关文件和配置在企业或个人开发环境中,禅道(Zentao)作为一款广受欢迎的开源项目管理工具,因其功能全面、易用性强而被广泛使用。然而,在某些情况下…...
OpenHTMLtoPDF字体加载异常全解析:从故障排查到环境适配
OpenHTMLtoPDF字体加载异常全解析:从故障排查到环境适配 【免费下载链接】openhtmltopdf An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section 508, …...
BetterNCM安装器终极指南:3分钟搞定网易云音乐插件管理
BetterNCM安装器终极指南:3分钟搞定网易云音乐插件管理 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款专为PC版网易云音乐用户设计的强大插件管理器…...
Linux 下 tar 命令归档与压缩完整指南
存档文件是包含多个文件的单个常规文件或设备文件,可用于创建可管理的个人备份,或者在其他方法(如 rsync)不可用时简化通过网络传输文件的任务。在 Linux 系统中,tar 实用程序是用于创建、管理和提取存档的常用命令。存…...
