STM32_USART通用同步/异步收发器

目录

背景

程序

STM32浮空输入的概念

1.基本概念

2. STM32浮空输入的特点

3. STM32浮空输入的应用场景

STM32推挽输出详解

1. 基本概念

2. 工作原理

3. 应用场景

使能外设时钟

TXE 和 TC的区别

USART_IT_TXE

USART_IT_TC

使能串口外设

中断处理函数


背景

单片机有常用的三大通信(SPI、I2C、UART(USART))。本篇文章对STM32的UART初始化进行简要的说明。

程序

void USART1_Init(u32 bound){ //串口1初始化并启动
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
     //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
    //USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
   //Usart1 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器 
   //USART 初始化设置
	USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	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(USART1, &USART_InitStructure); //初始化串口
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE中断
    USART_Cmd(USART1, ENABLE);                    //使能串口 
}

对于RX脚的端口模式要设置为浮空输入。对于RX脚的端口模式要设置为推挽输出

STM32浮空输入的概念

1.基本概念

STM32浮空输入(Floating Input)模式是指GPIO端口的电平状态完全由外部信号决定,该引脚既不连接到内部上拉电阻,也不连接到内部下拉电阻,处于高阻态。这种模式下,引脚对外表现为高阻抗,可以检测到微弱的信号变化。

<think> 首先,用户的问题是关于STM32中的USART通用同步/异步收发器)的介绍和使用方法。我需要基于提供的引用内容来回答,并确保回答结构清晰、逐步解决问题。 回顾系统级指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,例如[^1]。 用户提供了几个引用: - [^1]: 描述了STM32USART引脚和寄存器。 - [^2]: 解释了USART的通用性和物理连接。 - [^3]: 区分了USARTUART,讨论了帧格式和波特率。 - [^4]: 详细介绍了字长设置、起始位、停止位等。 - [^5]: 讨论了USART的应用场景和配置。 用户上一次的问题是:“我想了解stm32usart同步异步收发器的相关信息 请问stm32 usart同步异步收发器的介绍、使用方法等相关信息” 我需要结构化回答: 1. **介绍USART**:解释什么是USART,它的特性等。 2. **使用方法**:包括配置步骤、波特率设置等。 3. **基于引用**:确保融入引用信息,并在结束时添加引用标识。 回答结构: - 先概述USART。 - 然后详细说明介绍部分。 - 再讲使用方法。 - 最后生成相关问题。 确保回答真实可靠,基于STM32的知识。 关键点从引用中提取: - USART通用同步/异步收发器,支持全双工通信。 - STM32有多个USART接口。 - 引脚包括TX、RX等。 - 支持异步同步模式(UART异步模式)。 - 帧格式:起始位、数据位、停止位、可选校验位。 - 波特率使用小数发生器。 - 应用:调试、设备通信、模块通信等。 - 配置涉及寄存器设置,如USART_CR1。 在回答中自然地添加引用标识,例如:[^1] 最后,生成相关问题。 没有数学表达式在这个主题中,所以可能不需要LaTeX数学格式,除非有计算,如波特率计算,但用户问题重点在介绍和方法,不是计算。所以可能不需要数学格式。 生成相关问题: - 类似示例中的快速排序相关问题。 - 例如:USART的波特率如何计算?如何配置中断?USARTSTM32中的常见错误等。 完整回答结构: 1. USART介绍 - 定义和特点 - 引脚和寄存器 2. USART使用方法 - 配置步骤 - 波特率设置 - 数据传输 3. 相关问题 现在,撰写回答。 </think> ### STM32 USART通用同步/异步收发器)介绍与使用方法 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是STM32微控制器中的一种关键外设,支持全双工通信(同时发送和接收数据),广泛应用于嵌入式系统中。其核心优势在于简单、通用且成本低,仅需2~3根线即可实现数据传输(如TX发送引脚和RX接收引脚)。USART支持同步异步通信模式,而UART仅支持异步模式(缺少时钟输出功能)。STM32不同型号的器件提供多个USART接口(小容量产品有2个,中等容量有3个,大容量有3~5个),并兼容多种协议如LIN、IrDA等[^1][^2][^3]。 #### 一、USART介绍 1. **基本特性**: - **同步异步模式**: - **异步模式**:不需外部时钟,通过起始位、数据位、停止位组成帧格式传输数据。例如,起始位为低电平,停止位为高电平,数据位可编程为8位或9位(通过USART_CR1寄存器的M位配置)[^3][^4]。 - **同步模式**:需要外部时钟信号(SCLK引脚),支持高速通信。 - **帧格式**:每帧包括起始位、数据信息(8或9位)、可选校验位和停止位。空闲帧表示全1状态,断开帧表示全0状态[^3][^4]。 - **波特率**:使用小数波特率发生器,支持多种波特率(如9600、115200 bps),确保数据同步传输[^3][^4]。 - **增强功能**:支持DMA(直接内存访问)实现高速数据传输、中断驱动操作,以及工业标准NRZ异步串行格式[^3]。 2. **硬件组成**: - **引脚**:包括TX(发送)、RX(接收)、nCTS(清除发送)、nRTS(发送请求)和SCLK(同步时钟输出)[^1]。 - **内部模块**:包含控制寄存器(如USART_CR1、USART_CR2)、状态寄存器和数据寄存器,用于配置通信参数[^1][^3]。 3. **应用场景**: - **嵌入式调试**:通过USART将程序状态或传感器数据发送到PC端的串口调试助手(如打印变量值),便于实时监控和调试[^5]。 - **设备间通信**:连接简单外部设备,如温度传感器或舵机(例如,微控制器读取传感器数据或发送控制指令)[^5]。 - **模块集成**:与蓝牙或Wi-Fi模块通信(例如,STM32通过UART接口将数据转发给蓝牙模块)[^5]。 #### 二、USART使用方法 USART的配置涉及初始化寄存器、设置波特率、启用中断或DMA。以下是基于STM32 HAL库(标准固件库)的典型步骤,以异步模式为例: 1. **初始化配置**: - 设置GPIO引脚模式(TX为推挽输出,RX为浮空输入)。 - 配置USART参数: - 波特率:例如115200 bps。 - 字长:8位或9位(通过`USART_InitTypeDef`结构体设置)。 - 停止位:1位或2位。 - 校验位:无校验、奇校验或偶校验。 - 流控制:可选是否启用nCTS/nRTS硬件流控制。 - 示例代码(伪代码,基于HAL库): ```c UART_HandleTypeDef huart; void USART_Init(void) { huart.Instance = USART1; // 选择USART外设 huart.Init.BaudRate = 115200; huart.Init.WordLength = UART_WORDLENGTH_8B; // 8位字长 huart.Init.StopBits = UART_STOPBITS_1; // 1位停止位 huart.Init.Parity = UART_PARITY_NONE; // 无校验 huart.Init.Mode = UART_MODE_TX_RX; // 启用发送和接收 huart.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 禁用硬件流控制 HAL_UART_Init(&huart); // 初始化USART } ``` 2. **数据传输**: - **发送数据**:使用HAL库函数`HAL_UART_Transmit()`发送数据缓冲区。 - **接收数据**:使用中断或DMA模式接收数据(例如`HAL_UART_Receive_IT()`启用中断接收)。 - 示例代码(简单发送): ```c char msg[] = "Hello USART!"; HAL_UART_Transmit(&huart, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); // 阻塞式发送 ``` 3. **波特率设置**: - 波特率由系统时钟分频生成,公式涉及USARTDIV值(分频因子)。例如,对于系统时钟72 MHz和波特率115200 bps: $$ \text{USARTDIV} = \frac{f_{\text{ck}}}{16 \times \text{baud}}} $$ 其中,$f_{\text{ck}}$为时钟频率[^4]。 - 实践中直接用库函数计算,避免手动计算错误。 4. **高级功能**: - **DMA集成**:启用DMA以提高效率(减少CPU负载),配置USART的DMA发送/接收通道[^3]。 - **中断处理**:为USART事件(如接收完成)编写中断服务例程(ISR)。 - **错误处理**:监控状态寄存器(如USART_SR)检测帧错误或噪声。 #### 注意事项 - USART在调试中常用作“打印”接口,但需确保PC端软件(如串口调试助手)与STM32的波特率一致。 - 同步模式需额外连接SCLK引脚,适用于高速场景;异步模式更简单,适合大多数应用[^3][^4]。 - 实际开发中,参考STM32参考手册和CubeMX工具简化配置[^5]。 通过以上步骤,您可以快速集成USARTSTM32项目中,实现可靠的数据交换。实践中,注意优化资源使用(如DMA)以提升系统性能[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值