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

STM32 UART 通信详解

通用异步收发传输器UART是STM32微控制器中最基础、最常用的串行通信接口之一。它通过简单的两根信号线TX和RX实现全双工异步数据交换广泛应用于与PC调试、传感器模块、蓝牙/Wi-Fi模块等的通信。一、UART协议基础1. 核心特性UART是一种异步、串行、全双工的通信协议。其物理层仅需两根信号线TX (Transmit)数据发送线输出。RX (Receive)数据接收线输入。通信双方没有共享的时钟信号同步完全依赖于预先约定好的波特率 (Baud Rate)。2. 数据帧格式每一帧数据都遵循固定的结构依次包含以下部分起始位1位逻辑低电平0标志一帧数据的开始。数据位实际传输的有效数据长度通常为8位1字节也可配置为5-9位。校验位可选1位用于简单的错误检测。常见模式有奇校验、偶校验或无校验。停止位1位、1.5位或2位逻辑高电平1标志一帧数据的结束。最常用的配置是8N1即8位数据位、无校验、1位停止位。3. 波特率波特率定义为每秒传输的码元比特数量单位是bps比特每秒。通信双方必须设置相同的波特率否则无法正确解码数据。常见的波特率有9600、19200、115200等其中115200因其较高的速度在调试中尤为常用。二、STM32中的USART外设STM32芯片中集成的实际上是USART (Universal Synchronous/Asynchronous Receiver/Transmitter)外设。它与UART的关键区别在于USART既支持异步模式即UART功能也支持同步模式需要额外的时钟线SCLK。在大多数异步通信应用中我们使用的就是其UART功能。主要特性支持全双工异步通信。可编程的波特率通过小数波特率发生器实现高精度配置。可配置的数据字长度8或9位、停止位1或2位、校验位。支持硬件流控制RTS/CTS、多处理器通信。支持利用DMA进行高效数据传输减轻CPU负担。支持多种工作模式如单线半双工、LIN总线、智能卡、IrDA等。三、硬件连接与电平转换STM32的GPIO引脚工作电压通常为3.3VTTL电平。若要与其电平标准不同的设备如PC的RS-232接口为±12V或USB接口通信必须进行电平转换。典型连接方案与PC通信STM32的TX引脚连接至USB转TTL模块如CH340、CP2102的RX引脚。STM32的RX引脚连接至USB转TTL模块的TX引脚。STM32的GND与USB转TTL模块的GND必须连接以确保共地。将USB转TTL模块插入PC的USB端口。四、软件配置步骤以STM32F103 USART1为例配置UART通信通常包含以下几个核心步骤无论是使用标准库、HAL库还是寄存器操作其逻辑是相通的。1. 使能时钟首先需要开启USART外设及其对应GPIO引脚所在总线的时钟。// 使能GPIOA和USART1的时钟它们挂载在APB2总线上 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);2. 配置GPIO引脚将USART的TX引脚如PA9配置为复用推挽输出RX引脚如PA10配置为浮空输入或上拉输入。GPIO_InitTypeDef GPIO_InitStruct; // 配置TX (PA9) GPIO_InitStruct.GPIO_Pin GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStruct); // 配置RX (PA10) GPIO_InitStruct.GPIO_Pin GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode GPIO_Mode_IN_FLOATING; // 浮空输入 GPIO_Init(GPIOA, GPIO_InitStruct);3. 配置USART参数初始化USART外设设置波特率、数据位、停止位、校验位等关键参数。USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate 115200; USART_InitStruct.USART_WordLength USART_WordLength_8b; USART_InitStruct.USART_StopBits USART_StopBits_1; USART_InitStruct.USART_Parity USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode USART_Mode_Tx | USART_Mode_Rx; // 使能发送和接收 USART_Init(USART1, USART_InitStruct);4. 使能USART完成配置后使能USART外设。USART_Cmd(USART1, ENABLE);5. 可选配置中断如果希望以中断方式接收数据提高程序效率需要配置NVIC并开启接收中断。// 使能USART1接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 配置NVIC嵌套向量中断控制器 NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel USART1_IRQn; ... // 设置优先级 NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStruct);然后在中断服务函数USART1_IRQHandler()中处理接收到的数据。五、数据收发函数1. 发送数据查询方式通过查询状态寄存器标志位等待发送数据寄存器为空后写入数据。void UART_SendByte(uint8_t data) { USART_SendData(USART1, data); // 将数据写入数据寄存器(DR) while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET); // 等待发送完成 }2. 接收数据查询方式查询接收数据寄存器非空标志位等待数据到达后读取。uint8_t UART_ReceiveByte(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) RESET); // 等待接收到数据 return USART_ReceiveData(USART1); // 从数据寄存器(DR)读取数据 }3. 使用HAL库更简洁若使用STM32CubeMX和HAL库配置过程被极大简化收发函数也更易用。阻塞式发送HAL_UART_Transmit(huart1, data, 1, 100);阻塞式接收HAL_UART_Receive(huart1, data, 1, 100);中断式接收HAL_UART_Receive_IT(huart1, data, 1);并在回调函数HAL_UART_RxCpltCallback中处理数据。六、实战示例串口回环测试一个简单的测试程序是“回环”或“回显”即MCU将接收到的每一个字节数据立即发送回去。int main(void) { // 系统初始化、时钟配置、UART初始化略 uint8_t received_data; while (1) { if (UART_ReceiveByte(received_data)) { // 假设有接收函数 UART_SendByte(received_data); // 将收到的数据发回 } } }使用串口调试助手如XCOM、SSCOM连接到对应的COM口设置正确的波特率如115200发送任意字符应能收到相同的字符回显。七、常见问题与调试无数据或乱码最常见的原因是波特率不匹配。请确保STM32程序设置的波特率与PC端串口调试助手的设置完全一致。其次检查接线是否正确TX接RXRX接TX以及共地是否连接。无法进入中断检查NVIC配置是否正确中断服务函数名称是否拼写错误以及是否在初始化时使能了接收中断。使用printf重定向通过重写fputc函数可以方便地使用printf函数通过串口格式化输出数据极大提升调试效率。int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 0xFFFF); return ch; }总结STM32的UART通信是嵌入式开发的基石。掌握其协议原理、硬件连接方法、以及通过库函数进行初始化和数据收发的编程技巧是进行设备间通信和系统调试的关键第一步。从简单的查询式回环测试开始逐步尝试中断接收、DMA传输以及自定义通信协议能够构建出更高效、更稳定的嵌入式通信系统。

相关文章:

STM32 UART 通信详解

通用异步收发传输器(UART)是STM32微控制器中最基础、最常用的串行通信接口之一。它通过简单的两根信号线(TX和RX)实现全双工异步数据交换,广泛应用于与PC调试、传感器模块、蓝牙/Wi-Fi模块等的通信。一、UART协议基础1…...

Yii::$app->getAuthManager();的庖丁解牛

Yii::$app->getAuthManager() 是 Yii2 权限控制系统(RBAC)的唯一入口和核心代理。 它的本质是:通过服务定位器(Service Locator)模式,从全局应用容器中获取实现了 yii\rbac\ManagerInterface 接口的授权…...

革新性动物森友会存档编辑工具:NHSE全流程定制指南

革新性动物森友会存档编辑工具:NHSE全流程定制指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE(Animal Crossing: New Horizons save editor)是一款专业…...

别再乱删了!手把手教你用官方工具彻底卸载Autodesk全家桶(3ds Max/CAD)

彻底告别安装失败!Autodesk软件专业卸载与重装全指南 你是否曾经遇到过这样的困扰:明明已经卸载了3ds Max或AutoCAD,重新安装时却频频报错?那些隐藏在系统深处的残留文件就像顽固的污渍,无论你怎么擦洗都挥之不去。本…...

一网推百度爱采购代运营助力泰铖自动化斩获海量精准询盘

在工业制造数字化升级的当下,百度爱采购已然成为机械设备企业开拓线上客源的核心阵地,然而诸多中小厂商因缺乏专业运营手段,难以发挥平台价值。张家港市泰铖自动化设备有限公司主营半自动弯管机、缩管机、倒角机与切管机,曾面临线…...

每刻报销单到金蝶云星空:从API调用到数据写入全教程

每刻报销单集成至金蝶云星空的技术方案分享 在本次案例中,我们探讨的是如何通过轻易云数据集成平台实现每刻报销单的数据无缝对接到金蝶云星空系统。整个方案分为三个具体执行部分:付款申请、特殊付款申请单以及专项付款申请单。从获取数据,…...

从Stuxnet到S7CommPlus:一个C#程序员的工控协议安全入门笔记

从Stuxnet到S7CommPlus:一个C#程序员的工控协议安全入门笔记 工业控制系统(ICS)安全一直是个神秘而重要的领域。作为一名C#开发者,我曾以为这离我的日常开发很远,直到偶然接触到Stuxnet病毒的故事——这个专门针对西门…...

哪款头戴式蓝牙耳机性价比高?十大热门平价头戴式耳机品牌推荐!

2026年头戴耳机市场新老品牌争奇斗艳,从入门到高端让人目不暇接。作为一名经历过选择困难的音频爱好者,我完全理解这种幸福的烦恼:参数术语堆砌、营销话术包装,让人难辨虚实。在实测过多款产品后,我发现关键要避开这些…...

Windows 10/11 上保姆级安装AdGuard Home,并配置为开机自启服务(附NSSM详细步骤)

Windows 系统深度集成 AdGuard Home:从零构建企业级 DNS 过滤服务 在数字生活高度渗透的今天,网络隐私保护已成为现代计算机用户的刚需。作为 Windows 平台用户,我们常常面临一个两难选择:要么忍受各类广告追踪和恶意域名的侵扰&…...

Rust 时间处理神器:chrono 从入门到实战

Rust 时间处理神器:chrono 从入门到实战 在 Rust 生态中,chrono 凭借其遵循 ISO 8601 标准、支持时区、类型安全且性能优异的特性,成为了 Rust 开发者的首选工具。本文将从入门到进阶,并结合实际开发场景带你全面掌握 chrono 的使…...

归并排序力扣题(leetcode)何

1.概述在人工智能快速发展的今天,AI不再仅仅是回答问题的聊天机器人,而是正在演变为能够主动完成复杂任务的智能代理。OpenAI的Codex CLI就是这一趋势的典型代表——一个跨平台的本地软件代理,能够在用户的机器上安全高效地生成高质量的软件变…...

2026届学术党必备的AI写作工具推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 大语言模型DeepSeek,于论文写作中能予以多维度辅助。在文献检索阶段,…...

2025届必备的五大AI辅助论文平台解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 就毕业论文写作而言,人工智能技术的应用得遵循学术规范。其一,AI能够…...

旺店通与轻易云集成平台的无缝数据对接方案

数据源系统:旺店通企业奇门旺店通企业奇门是慧策旗下核心的智能零售解决方案,提供从订单管理到仓储物流的全链路服务。其特点包括:一体化智能零售平台,覆盖电商经营全流程打破数据孤岛,实现跨系统数据互通AI驱动的智能…...

DeerFlow智能客服应用:多轮对话系统实战

DeerFlow智能客服应用:多轮对话系统实战 1. 引言 想象一下这样的场景:一位顾客在电商平台咨询商品信息,客服机器人不仅能准确回答产品参数,还能根据对话历史推荐相关配件,甚至在用户表达不满时自动生成工单并转接人工…...

超越wx.uploadFile!小程序多图上传终极方案:自定义FormData+后端接收详解

小程序多图上传实战:从FormData封装到企业级解决方案 在小程序开发中,文件上传是常见的业务场景,但原生wx.uploadFile接口在复杂需求面前往往力不从心。当我们需要批量上传、进度监控、自定义请求头时,一套完整的自定义上传方案就…...

光伏电站全流程软件产品核心功能解析

随着光伏产业规模化发展,电站管理已进入全流程数字化管控时代,一款优质的光伏电站全流程软件,需覆盖项目开发、施工建设、智能运维、数据决策全链路,精准破解各环节痛点,为电站高效运营提供技术支撑。结合行业实践&…...

自动导引车(AGV)与自主移动机器人(AMR)控制系统的 C# 开源封装库瞧

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...

别再死记硬背了!用Tomcat 10 + IDEA手把手带你理解Servlet和JSP到底怎么工作

别再死记硬背了!用Tomcat 10 IDEA手把手带你理解Servlet和JSP到底怎么工作 刚接触JavaWeb开发时,很多人会被Servlet和JSP的各种概念搞得晕头转向。生命周期、九大内置对象、MVC模式...这些教科书式的术语堆砌,往往让人越看越迷糊。今天我们就…...

OpenClaw 龙虾 = 效率倍增器 + 数字员工孵化器+附安装教程

作为一个每天和电脑打交道 12 小时的 IT 从业者,我用过不下 50 款 AI 工具,但能让我坚持用了 3 个月、每天都离不开的,只有OpenClaw 龙虾。很多人还把它当成普通的聊天机器人,这真的大错特错。OpenClaw 龙虾不是未来科技&#xff…...

Blue-Topaz主题快速上手:打造个性化Obsidian笔记环境

Blue-Topaz主题快速上手:打造个性化Obsidian笔记环境 【免费下载链接】Blue-Topaz_Obsidian-css A blue theme for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/bl/Blue-Topaz_Obsidian-css Blue-Topaz是一款为Obsidian设计的蓝色主题,…...

Python AI服务上线倒计时:Cuvil预编译缓存机制如何帮你抢在竞品前24小时完成vLLM兼容升级?

第一章:Cuvil编译器在Python AI推理中的定位与价值Cuvil编译器是一个面向AI推理场景的轻量级、Python原生友好的编译框架,专为优化动态图模型(如PyTorch TorchScript子集、ONNX子图及自定义算子图)在CPU/GPU边缘设备上的执行效率而…...

OpenClaw如何做好记忆持久化的 · 六、经济学与可扩展性——记忆的代价

六、经济学与可扩展性——记忆的代价⏱ 30 秒速览 | 中度使用(日均 50 次对话)纯记忆附加成本:~$5/月(Claude Sonnet)/ ~$1/月(GPT-4o-mini)。72% 花在记忆注入,24% 花在自动提取&am…...

3分钟搞懂增量式PID:为什么你的温控系统更适合用这个?

增量式PID:工业温控系统抗干扰的隐秘武器 车间里的温度控制系统突然开始剧烈震荡,显示屏上的曲线像心电图一样疯狂跳动——这种场景对PLC工程师来说再熟悉不过了。当传统的位置式PID在噪声干扰下"失控"时,增量式PID往往能成为稳定系…...

选择AutoCAD许可管理工具的七大关键评估维度

智能选择AutoCAD许可管理工具的七大关键维度你正在为AutoCAD许可证管理找工具,这是个门槛高的活,就是不光是没门路我帮你梳理出七大关键评估维度,帮你少踩坑,多省钱。许可方式匹配是否够精细?AutoCAD的许可机制越细化&…...

给硬件小白的保姆级教程:手把手搞定RK3399 Linux-SDK的MIPI屏幕驱动配置

从零点亮RK3399的MIPI屏幕:一份没有硬件基础也能上手的实战指南 当你第一次拿到RK3399开发板和那块神秘的MIPI屏幕时,可能会被各种专业术语吓到——DTS配置、初始化序列、GPIO引脚、背光控制...这些概念对于软件背景的开发者来说,简直就像天书…...

汽车变速箱企业Kisssoft许可证成本控制成功案例

汽车变速箱企业Kisssoft许可证成本控制成功案例讲真,用Kisssoft做仿真设计,许可证成本真是吃掉不少预算,是一大推企业并尚未真正掌握咋用好这伙许可证一出来,弄得浪费严重,合规风险也高。咱就在2026年帮助一家汽车变速…...

柔性车间动态重调度实战:机器故障下的遗传算法优化策略

1. 柔性车间调度与机器故障的实战挑战 想象一下你正在管理一个汽车零部件生产车间,突然一台关键数控机床在下午3点15分突发故障,维修需要4小时。此时有10个不同型号的曲轴正在排队等待加工,每道工序都有多个备选设备但加工效率各不相同。这就…...

5步构建家庭网络广告拦截系统:从规则部署到性能优化

5步构建家庭网络广告拦截系统:从规则部署到性能优化 【免费下载链接】AdGuardHomeRules 高达百万级规则!由我原创&整理的 AdGuardHomeRules ADH广告拦截过滤规则!打造全网最强最全规则集 项目地址: https://gitcode.com/gh_mirrors/ad/…...

深入解析Qt平台插件xcb连接失败问题及高效解决方案

1. 为什么你的Qt程序突然罢工了? 最近在远程服务器上调试Qt程序时,你是不是也遇到过这个让人抓狂的错误提示?"qt.qpa.xcb: could not connect to display"这个报错就像一堵墙,把我们的开发工作拦在了半路。作为一个在Li…...