news 2026/5/29 18:30:53

USART串口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
USART串口

1.USART简介

同步不常用,只支持时钟输出,不支持时钟输入,并不支持两个USART之间进行同步通信。

波特率发生器:用来配置波特率,是一个分频器

硬件流控制:可以防止数据处理过慢而导致的数据丢失的问题

注意:UASRT1在APB2总线上,其它的都是在APB1总线上的设备

2.USART内部结构框图

注意:TDR、RDR、发送移位寄存器、接收移位寄存器占用同一个地址,统称为DR寄存器。

当数据从发送数据寄存器移到发送移位寄存器时,标志位TXE置1,然后在发送器的控制下数据一位一位地输出到TX引脚;接收数据时同理,标志位为RXNE。

硬件数据流控:nRTS是输出脚(请求发送);nCTS是输入脚(清除发送)(n表示低电平有效)。TX和CTS为一对,RX和RTS为一对。

唤醒单元:实现串口挂载多设备(通过地址寻址来实现多设备)

发送器时钟:USART1挂载在APB2,是PCLK2的时钟,一般为72M;其它挂载在APB1,是PCLK1的时钟,一般为36M。

3.USART基本结构(简化)

4.细节

1.数据帧

1.字长设置

2.停止位

2.USART输入数据的策略(了解)

以波特率的频率连续采样一帧数据,每次都要保证采样位置在位的正中间

3.波特率发生器

5.实战代码

1.部分函数的功能

//基本初始化 void USART_DeInit(USART_TypeDef* USARTx); void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); void USART_StructInit(USART_InitTypeDef* USART_InitStruct); //配置同步时钟输出 void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); //开启USART到DMA的触发通道 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); //发送接收数据 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);//发送(写DR寄存器) uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//接收(读DR寄存器) //与标志位相关 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

2.配置思路(发送+接收)

1.RCC开启时钟(把GPIO和USART的时钟打开)

2.配置GPIO(把TX配置成复用输出模式,RX配置成输入模式)

3.配置USART(波特率发生器、发送(接收)控制器、发送(接收)寄存器)

4.配置中断(需要接收的情况下)

5.开启USART(使能)

3.基本配置格式

//USART是APB2上的设备 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //开启GPIO的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStructure;//结构体定义 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//IO口 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化USART USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate=9600;//波特率 USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制 USART_InitStructure.USART_Mode=USART_Mode_Tx;//配置模式(此处只是发送模式) USART_InitStructure.USART_Parity=USART_Parity_No;//校验位(无校验) USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位(1位停止位) USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字长(8位) USART_Init(USART1,&USART_InitStructure); //开启USART USART_Cmd(USART1,ENABLE);

4.在Keil中使用printf的方法

1.需要include <stdio.h>头文件

2.重定向fputc函数到串口(printf每次执行打印操作都要用到fputc函数)

3.可以封装sprintf函数(使打印操作更加方便)

//对sprintf函数进行封装 void Serial_Printf(char *format,...) { char String[100]; va_list arg;//参数列表变量 va_start(arg,format);//从format开始接收列表 vsprintf(String,format,arg); va_end(arg);//释放参数列表 Serial_SendString(String); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 6:26:02

10分钟快速上手:InfluxDB 3.0完整部署与实战指南

10分钟快速上手&#xff1a;InfluxDB 3.0完整部署与实战指南 【免费下载链接】influxdb Scalable datastore for metrics, events, and real-time analytics 项目地址: https://gitcode.com/gh_mirrors/inf/influxdb 还在为时序数据监控系统的复杂部署而头疼吗&#xff…

作者头像 李华
网站建设 2026/5/27 17:38:07

腾讯混元7B开源模型发布:混合推理与256K上下文重构边缘AI范式

腾讯混元7B开源模型发布&#xff1a;混合推理与256K上下文重构边缘AI范式 【免费下载链接】Hunyuan-7B-Instruct-GPTQ-Int4 腾讯开源Hunyuan-7B-Instruct-GPTQ-Int4大语言模型&#xff0c;支持混合推理模式与256K超长上下文&#xff0c;优化智能体任务性能&#xff0c;采用GQA与…

作者头像 李华
网站建设 2026/5/26 15:21:09

解锁大脑奥秘:Yeo7与AAL90脑图谱的终极映射指南

解锁大脑奥秘&#xff1a;Yeo7与AAL90脑图谱的终极映射指南 【免费下载链接】Yeo7网络与17网络的AAL90脑图谱映射关系模板 本仓库提供了一个资源文件&#xff0c;该文件包含了Yeo7网络与17网络的AAL90脑图谱的映射关系模板。该模板可以帮助研究人员在脑图谱分析中更好地理解和应…

作者头像 李华
网站建设 2026/5/30 5:58:22

VASP入门指南:从零开始掌握材料计算核心技术

VASP入门指南&#xff1a;从零开始掌握材料计算核心技术 【免费下载链接】VASP学习入门资源LearnVASPTheHardWay教程 《Learn VASP The Hard Way》是一份专为初学者打造的VASP学习教程&#xff0c;旨在帮助用户从零基础快速掌握VASP的使用方法。教程内容涵盖了VASP的基本操作、…

作者头像 李华
网站建设 2026/5/28 6:15:30

MySQL主从复制

MySQL 主从复制 MySQL主从负载至少需要2台数据库服务器,其中一台为master库,另外一台为slave库,MySQL主从数据同步时一个异步复制的过程,要实现负载首先需要在master 上开启bin-log 日志功能,bin-log日志用于记录在master 库中执行的增、删、修改、更新操作的SQL语句,真…

作者头像 李华
网站建设 2026/5/22 12:58:14

如何快速上手3ds Max OSL着色器:终极渲染增强指南

如何快速上手3ds Max OSL着色器&#xff1a;终极渲染增强指南 【免费下载链接】3dsMax-OSL-Shaders shared OSL shaders for 3ds Max 项目地址: https://gitcode.com/gh_mirrors/3d/3dsMax-OSL-Shaders 在当今三维创作领域&#xff0c;OSL着色器正在成为3ds Max用户实现…

作者头像 李华