如何配置STM32的UART/USART接口?

news2024/12/22 23:48:03

配置STM32的UART/USART接口是实现串行通信的基础。以下是详细的配置步骤和示例代码。

1. 选择时钟源

首先,需要确保USART接口的时钟已经使能。通常,这在初始化代码中完成,或者通过STM32CubeMX工具进行配置。

// 假设USART2位于APB1总线上
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;

2. 配置GPIO引脚

USART接口至少需要两个GPIO引脚:一个用于TX(发送),另一个用于RX(接收)。你需要配置这些引脚为复用功能,并设置相应的模式和速度。

// 使能GPIO时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

// 配置USART2的TX和RX引脚(PA2和PA3)
GPIOA->MODER |= (1 << (2 * 2)) | (1 << (3 * 2)); // 设置为复用功能
GPIOA->OSPEEDR |= (3 << (2 * 2)) | (3 << (3 * 2)); // 设置速度为高速度
GPIOA->PUPDR |= (1 << (2 * 2)) | (1 << (3 * 2)); // 取消上拉

3. 设置USART参数

在这里插入图片描述

接下来,你需要设置USART的参数,如波特率、数据位、停止位和校验位。这些参数可以通过USART的寄存器直接设置,或者使用HAL库函数。

// 假设使用HAL库
UART_HandleTypeDef huart2;

huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;

if (HAL_UART_Init(&huart2) != HAL_OK)
{
  // 初始化失败处理
}

4. 配置中断(可选)

如果你打算使用中断来处理接收到的数据,你需要配置USART的中断,并在NVIC中使能它。

// 配置USART2中断
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);

// USART中断处理函数
void USART2_IRQHandler(void)
{
  HAL_UART_IRQHandler(&huart2);
}

5. 发送和接收数据

一旦USART接口配置完成,你就可以使用它来发送和接收数据了。

// 发送数据
uint8_t txData[] = "Hello, world!";
HAL_UART_Transmit(&huart2, txData, sizeof(txData), 1000);

// 接收数据
uint8_t rxData[100];
HAL_UART_Receive(&huart2, rxData, sizeof(rxData), 1000);

6. 使用DMA(可选)

如果你需要处理大量数据,可以考虑使用DMA来减轻CPU的负担。

// 配置DMA
DMA_HandleTypeDef hdma_usart2_rx;

// 初始化DMA并链接到USART2的接收数据寄存器
// ...

// 启动DMA接收
HAL_UART_Receive_DMA(&huart2, rxData, sizeof(rxData));

结论

STM32的UART/USART接口提供了灵活的配置选项,以适应各种通信需求。通过使用HAL库或直接操作寄存器,可以轻松地设置波特率、数据位、停止位和校验位。此外,USART的中断和DMA功能可以提高数据处理的效率。在设计串行通信系统时,还需要考虑错误处理和数据完整性,以确保系统的稳定性和可靠性。通过上述步骤和示例代码,开发者可以为STM32微控制器配置UART/USART接口,并实现可靠的串行通信。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1597931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别Elementor Pro,无需下载,全新中文版的国产替代方案来袭

如果你正在考虑创建自己的网站&#xff0c;那么在第一次谷歌搜索时&#xff0c;你可能已经看到了WordPress、Elementor和网站构建器这些专业名称。WordPress是最受欢迎的网站平台之一&#xff0c;这不难理解&#xff1a;它高度可定制&#xff0c;易于学习&#xff0c;而且是免费…

市场复盘总结 20240415

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 0% 最常用的…

服务器负载均衡SLB/加密原理

多台服务器提供相同的服务 SLB(server load balancing) 多台服务器对应一个虚拟地址&#xff0c;该地址是防火墙虚拟出来的。 服务器负载均衡功能仅支持IPV4协议 多通道协议仅支持FTP协议

k8s高可用集群部署介绍 -- 理论

部署官网参考文档 负载均衡参考 官网两种部署模式拓扑图和介绍 介绍两种高可用模式 堆叠 拓扑图如下&#xff08;图片来自k8s官网&#xff09;&#xff1a; 特点&#xff1a;将etcd数据库作为控制平台的一员&#xff0c;由于etcd的共识算法&#xff0c;所以集群最少为3个&…

【面试经典 150 | 数学】阶乘后的零

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;数学优化计算 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结…

Github copilot我用正版登录授权的,来体验一下吧

Github copilot 市面上的那种可以说是破解的&#xff0c;不是代码补全不稳定&#xff0c;就是chat不稳定&#xff0c;反正就是不怎样&#xff01; 下面是官网正版开通的&#xff0c;欢迎体验15天 体验地址&#xff1a;https://www.bilibili.com/read/cv33696436 这种copilo…

zabbix解析以及安装

目录 zabbix 是什么&#xff1f; zabbix 是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快…

移动Web学习07-适配单位vw/vh哔哩哔哩移动端vw单位适配案例

1.1、VW相对单位 前面我们已经学习了rem单位 &#xff0c;他是一个相对单位、相对于HTML表格字号大小 VW/VH也是一个相对单位&#xff0c;他是相对于视口的尺寸计算结果 VW&#xff1a;viewport width VH: viewport height <meta name"viewport" content"…

软件设计:UML 模型图总结

1. 相关链接 参考教程&#xff1a; https://sparxsystems.com/resources/tutorials/ https://sparxsystems.com/enterprise_architect_user_guide/15.2/model_domains/whatisuml.html Unified Modeling Language (UML) description, UML diagram examples, tutorials and r…

STM32 MPU配置参数

TXE LEVEL一般只用MPU_TEX_LEVEL0 1 - 1 - 1 -0性能最强&#xff08;TEX - C - B- S&#xff09;. #define MPU_TEX_LEVEL0 ((uint8_t)0x00) #define MPU_TEX_LEVEL1 ((uint8_t)0x01) #define MPU_TEX_LEVEL2 ((uint8_t)0x02) 基于上表进行常用配置 &#xff…

Ue不消耗輸入

1、介紹 我們都知道ue裏面使用輸入時&#xff0c;都是在PlayerController裏面進行獲取&#xff0c; 使用官方的操作映射&#xff0c;軸映射&#xff0c;以及目前最新的增强型輸入 但是我們發現了一個問題 那就是輸入會被消耗 就是儅我鼠標按在一個按鈕上時 你另一個地方接受…

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(2)-深度探究

目录 1. 前文回顾 1.1 简单背后的复杂 1.2 复杂性的来源 2. 关键代码 2.1 功能概述 2.2 关系梳理 2.3 理解构造函数二 2.4 理解HLS_CONSTEXPR 2.5 理解const volatile 3. 探究ap_int<8> c&#xff1b;经历了什么 4. 在调试中查看 1. 前文回顾 在《Vitis HLS…

数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型&#xff0c;用于访问控制功能。 通过本指南&#xff0c;我们会了解权限和角色在 Databend 中的基本概念&#xff0c;以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能…

病毒繁殖-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第52讲。 病毒繁殖&#xf…

气象观测站点数据下载与处理

一、下载途径 全国400多个气象站气候数据&#xff08;1942-2022&#xff09; 王晓磊&#xff1a;中国空气质量/气象历史数据 | 北京市空气质量历史数据 气象数据免费下载网站整理 中国气象站观测的气象数据怎么下载 二、R语言处理 2.1 提取站点文件 library(dplyr) library(…

4、XTuner 微调个人小助手(笔记)

视频地址&#xff1a; https://b23.tv/QUhT6ni 课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 1、Finetune 简介 两种Finetune范式 …

LeetCode_丑数

题目&#xff1a; 题解&#xff1a; 由题&#xff0c;我们知道丑数大于0&#xff0c;丑数都可以写成2*2*...*2*3*3...*3*5*5...*5&#xff0c;有了这个基础就很好写代码了。 用三个while循环将前面的2 3 5全部除掉如果这个数是丑数&#xff0c;最后n是等于1的&#xff0c;反之…

Leetcode-48-旋转图像

题目说明 给定一个 n n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明&#xff1a;你必须在原地旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入…

代码随想录阅读笔记-回溯【全排列】

题目 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 以[1,2,3]为例&#xff0c;抽象成树形结构如下&#xff1a; 回溯三部曲 1、递归函数参数 首先排列是有…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day 14

Day 14 Classfication (short version) 二分类的时候 用sigmoid 那不就是 logistic 回归嘛&#xff08;softmax 的二分类等价&#xff09; Loss 哦 今天刚学的 &#xff0c;KL散度 &#xff0c;看来cross-entropy 和KL散度是等价的咯~ 我感觉我的直觉没错 这里MSE离得很远的时候…