描述 #
该文件包含 CH32V00x 系列微控制器 USART 固件库的所有函数原型、常量定义、枚举类型和结构体定义。USART(通用同步/异步收发器)支持异步 UART 模式和同步 SPI 模式,具备完整的硬件流控、IrDA、SmartCard、LIN 总线、半双工、过采样 8 倍等高级功能,适用于工业通信、传感器网络、智能卡读写等场景。所有配置参数均通过位域组合实现高效寄存器控制,避免了冗余的函数调用,提升了实时性与灵活性。
常量 #
USART_Word_Length
#
串行帧数据位长度配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_WordLength_8b |
0x0000 |
8 位数据长度 |
USART_WordLength_9b |
0x1000 |
9 位数据长度(支持奇偶校验时,校验位占据第 9 位) |
以上所有值都强制转换为
uint16_t。9 位模式常用于多机通信或扩展数据宽度,配合奇偶校验可实现 8 位数据 + 1 位校验的可靠传输。
USART_Stop_Bits
#
停止位数量配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_StopBits_1 |
0x0000 |
1 个停止位 |
USART_StopBits_0_5 |
0x1000 |
0.5 个停止位(仅在 9 位数据模式下有效) |
USART_StopBits_2 |
0x2000 |
2 个停止位 |
USART_StopBits_1_5 |
0x3000 |
1.5 个停止位(仅在 9 位数据模式下有效) |
以上所有值都强制转换为
uint16_t。0.5 和 1.5 停止位是为兼容某些旧式串行设备(如 RS-485 多点网络)设计的特殊模式,实际应用中较少使用。
USART_Parity
#
奇偶校验模式配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_Parity_No |
0x0000 |
无校验 |
USART_Parity_Even |
0x0400 |
偶校验(校验位使数据位中 ‘1’ 的个数为偶数) |
USART_Parity_Odd |
0x0600 |
奇校验(校验位使数据位中 ‘1’ 的个数为奇数) |
以上所有值都强制转换为
uint16_t。校验位自动插入在数据位的最高位(MSB),当使用 8 位数据时,校验位占据第 8 位;9 位数据时占据第 9 位,适用于噪声环境下的基础错误检测。
USART_Mode
#
收发模式配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_Mode_Rx |
0x0004 |
使能接收功能 |
USART_Mode_Tx |
0x0008 |
使能发送功能 |
以上所有值都强制转换为
uint16_t。可组合使用(如USART_Mode_Rx | USART_Mode_Tx)实现全双工通信,单独使用可实现单工或半双工(配合硬件流控或软件切换)。
USART_Hardware_Flow_Control
#
硬件流控配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_HardwareFlowControl_None |
0x0000 |
无硬件流控 |
USART_HardwareFlowControl_RTS |
0x0100 |
仅使用 RTS(请求发送)输出流控 |
USART_HardwareFlowControl_CTS |
0x0200 |
仅使用 CTS(清除发送)输入流控 |
USART_HardwareFlowControl_RTS_CTS |
0x0300 |
同时使用 RTS 和 CTS 实现双向流控 |
以上所有值都强制转换为
uint16_t。硬件流控通过 RTS/CTS 引脚自动控制数据流,防止接收缓冲区溢出,适用于高速通信(如 115200bps 以上)或数据突发场景。
USART_Clock
#
同步模式时钟使能
| 名称 | 值 | 简述 |
|---|---|---|
USART_Clock_Disable |
0x0000 |
禁用同步时钟输出(异步模式) |
USART_Clock_Enable |
0x0800 |
启用同步时钟输出(SCLK 引脚) |
以上所有值都强制转换为
uint16_t。启用后 USART 可作为 SPI 主设备使用,SCLK 由 USART 内部生成,用于同步外部从设备。
USART_Clock_Polarity
#
时钟极性配置(同步模式)
| 名称 | 值 | 简述 |
|---|---|---|
USART_CPOL_Low |
0x0000 |
时钟空闲时为低电平 |
USART_CPOL_High |
0x0400 |
时钟空闲时为高电平 |
以上所有值都强制转换为
uint16_t。与 CPHA 配合使用,可配置 SPI 模式 0、1、2、3 中的任意一种,兼容多种外设时序要求。
USART_Clock_Phase
#
时钟相位配置(同步模式)
| 名称 | 值 | 简述 |
|---|---|---|
USART_CPHA_1Edge |
0x0000 |
在时钟第一个边沿采样数据 |
USART_CPHA_2Edge |
0x0200 |
在时钟第二个边沿采样数据 |
以上所有值都强制转换为
uint16_t。与 CPOL 组合决定数据采样时机,是 SPI 通信中匹配主从设备的关键参数。
USART_Last_Bit
#
最后一个数据位时钟输出控制
| 名称 | 值 | 简述 |
|---|---|---|
USART_LastBit_Disable |
0x0000 |
不输出最后一个数据位的时钟脉冲 |
USART_LastBit_Enable |
0x0100 |
在最后一个数据位传输完成后输出一个额外时钟脉冲 |
以上所有值都强制转换为
uint16_t。用于确保从设备在数据传输结束后有足够时间处理数据,常用于驱动某些对时序敏感的 SPI 存储器或传感器。
USART_Interrupt_definition
#
中断标志定义
| 名称 | 值 | 简述 |
|---|---|---|
USART_IT_PE |
0x0028 |
奇偶校验错误中断 |
USART_IT_TXE |
0x0727 |
发送数据寄存器空中断 |
USART_IT_TC |
0x0626 |
传输完成中断(最后一位发送完毕) |
USART_IT_RXNE |
0x0525 |
接收数据寄存器非空中断 |
USART_IT_ORE_RX |
0x0325 |
溢出错误中断(RXNE 使能时) |
USART_IT_IDLE |
0x0424 |
空闲线检测中断 |
USART_IT_LBD |
0x0846 |
LIN 帧中断检测中断 |
USART_IT_CTS |
0x096A |
CTS 变化中断 |
USART_IT_ERR |
0x0060 |
错误中断掩码(包含 PE、FE、NE、ORE) |
USART_IT_ORE_ER |
0x0360 |
溢出错误中断(EIE 使能时) |
USART_IT_NE |
0x0260 |
噪声检测错误中断 |
USART_IT_FE |
0x0160 |
帧格式错误中断 |
USART_IT_ORE |
0x0360 |
溢出错误中断(别名,等同于 USART_IT_ORE_ER) |
以上所有值都强制转换为
uint16_t。中断掩码设计采用“寄存器地址 + 位偏移”编码方式,便于底层驱动通过位运算快速定位中断源。USART_IT_ERR是多个错误中断的组合掩码,用于批量处理错误。
USART_DMA_Requests
#
DMA 请求配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_DMAReq_Tx |
0x0080 |
发送 DMA 请求 |
USART_DMAReq_Rx |
0x0040 |
接收 DMA 请求 |
以上所有值都强制转换为
uint16_t。启用后,数据传输可由 DMA 控制器自动完成,无需 CPU 干预,极大提升吞吐量并降低中断负载,适用于大数据块传输(如音频、图像)。
USART_WakeUp_methods
#
唤醒方式配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_WakeUp_IdleLine |
0x0000 |
空闲线检测唤醒 |
USART_WakeUp_AddressMark |
0x0800 |
地址标记唤醒(用于多机通信) |
以上所有值都强制转换为
uint16_t。用于低功耗模式下,通过检测特定帧结构(如 11 位空闲或地址帧)唤醒休眠的 USART,适用于电池供电的远程传感器节点。
USART_LIN_Break_Detection_Length
#
LIN 总线帧中断检测长度
| 名称 | 值 | 简述 |
|---|---|---|
USART_LINBreakDetectLength_10b |
0x0000 |
检测 10 位中断帧 |
USART_LINBreakDetectLength_11b |
0x0020 |
检测 11 位中断帧 |
以上所有值都强制转换为
uint16_t。LIN(Local Interconnect Network)协议中,主节点发送 13 位低电平作为帧起始,从节点通过检测 10 或 11 位持续低电平识别帧头,此配置匹配不同 LIN 版本规范。
USART_IrDA_Low_Power
#
IrDA 模式配置
| 名称 | 值 | 简述 |
|---|---|---|
USART_IrDAMode_LowPower |
0x0004 |
低功耗 IrDA 模式(接收器灵敏度降低) |
USART_IrDAMode_Normal |
0x0000 |
正常 IrDA 模式 |
以上所有值都强制转换为
uint16_t。IrDA(红外数据协会)模式通过内部滤波器抑制可见光干扰,低功耗模式适用于电池供电的红外遥控或近距离通信,但通信距离和抗干扰能力下降。
USART_Flags
#
状态标志位定义
| 名称 | 值 | 简述 |
|---|---|---|
USART_FLAG_CTS |
0x0200 |
CTS 输入状态标志 |
USART_FLAG_LBD |
0x0100 |
LIN 帧检测标志 |
USART_FLAG_TXE |
0x0080 |
发送数据寄存器空 |
USART_FLAG_TC |
0x0040 |
传输完成(最后一位发送完毕) |
USART_FLAG_RXNE |
0x0020 |
接收数据寄存器非空 |
USART_FLAG_IDLE |
0x0010 |
空闲线检测标志 |
USART_FLAG_ORE |
0x0008 |
溢出错误标志 |
USART_FLAG_NE |
0x0004 |
噪声检测标志 |
USART_FLAG_FE |
0x0002 |
帧格式错误标志 |
USART_FLAG_PE |
0x0001 |
奇偶校验错误标志 |
以上所有值都强制转换为
uint16_t。这些标志位映射到 USART 状态寄存器(STATR),用于轮询查询通信状态。注意:部分标志(如 ORE、FE、NE、PE)需通过读 STATR + 读 DATAR 清除,否则会持续置位。
枚举 #
无
结构体 #
USART_InitTypeDef
#
USART 初始化结构体,用于配置基本通信参数
| 名称 | 类型 | 简述 |
|---|---|---|
USART_BaudRate |
uint32_t |
通信波特率,范围通常为 1200~4500000 bps,由 PCLKx 时钟和 BRR 寄存器计算得出,支持非标准波特率(如 57600、115200) |
USART_WordLength |
uint16_t |
数据位长度,可选 8 位或 9 位,影响帧结构和校验位位置 |
USART_StopBits |
uint16_t |
停止位数量,支持 0.5、1、1.5、2 位,用于兼容不同设备时序 |
USART_Parity |
uint16_t |
奇偶校验模式,可选无、偶、奇校验,提升数据可靠性 |
USART_Mode |
uint16_t |
收发模式,可组合启用发送、接收或全双工 |
USART_HardwareFlowControl |
uint16_t |
硬件流控配置,支持 RTS、CTS 或双向流控,防止缓冲区溢出 |
该结构体是 USART 初始化的核心,所有参数均直接映射到 USART 控制寄存器(CTLR1/2/3),调用
USART_Init()后会一次性写入硬件,无需逐位配置,极大简化了开发流程。
USART_ClockInitTypeDef
#
USART 同步模式时钟初始化结构体
| 名称 | 类型 | 简述 |
|---|---|---|
USART_Clock |
uint16_t |
是否启用同步时钟输出(SCLK) |
USART_CPOL |
uint16_t |
时钟极性,决定空闲电平 |
USART_CPHA |
uint16_t |
时钟相位,决定采样边沿 |
USART_LastBit |
uint16_t |
是否在最后一个数据位后输出额外时钟脉冲 |
该结构体专用于同步模式(SPI 模式),与
USART_InitTypeDef配合使用。当USART_Clock_Enable启用时,USART 可作为 SPI 主设备,此时USART_Mode应设为USART_Mode_Tx或USART_Mode_Rx,不能同时启用双工,因为同步模式下收发共用同一时钟。
函数 #
USART_DeInit
#
void USART_DeInit(USART_TypeDef *USARTx)
将 USARTx 外设寄存器恢复为复位默认值,通过复位 APB 总线时钟实现,而非直接写寄存器。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设,仅支持 USART1(CH32V00x 仅有一个 USART 模块) |
返回值:
无
该函数通过调用
RCC_APB2PeriphResetCmd对 USART1 进行硬件复位,确保所有寄存器恢复初始状态,适用于系统初始化或异常恢复场景,比手动清零寄存器更可靠。
USART_Init
#
void USART_Init(USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct)
根据指定参数初始化 USART 外设,包括波特率、数据位、停止位、校验、模式和流控。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_InitStruct |
USART_InitTypeDef * |
指向包含配置参数的结构体指针 |
返回值:
无
该函数是 USART 配置的核心,内部自动计算 BRR(波特率寄存器)值,支持 8 倍过采样模式(需提前调用
USART_OverSampling8Cmd),计算公式基于 PCLK1/PCLK2 时钟频率,确保在不同系统时钟下仍能精确配置波特率。
USART_StructInit
#
void USART_StructInit(USART_InitTypeDef *USART_InitStruct)
将 USART_InitTypeDef 结构体所有成员初始化为默认值。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USART_InitStruct |
USART_InitTypeDef * |
待初始化的结构体指针 |
返回值:
无
默认配置为:9600bps、8 位数据、1 停止位、无校验、全双工、无流控。建议在调用
USART_Init()前先调用此函数,避免结构体中包含未初始化的随机值导致通信异常。
USART_ClockInit
#
void USART_ClockInit(USART_TypeDef *USARTx, USART_ClockInitTypeDef *USART_ClockInitStruct)
配置 USART 同步模式下的时钟参数(CPOL、CPHA、LastBit)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_ClockInitStruct |
USART_ClockInitTypeDef * |
包含时钟配置的结构体指针 |
返回值:
无
仅在
USART_Clock_Enable为真时生效,用于将 USART 转换为 SPI 主设备。配置后,SCLK 引脚将输出同步时钟,数据通过 TX/RX 引脚收发,实现与 SPI 传感器、存储器的通信。
USART_ClockStructInit
#
void USART_ClockStructInit(USART_ClockInitTypeDef *USART_ClockInitStruct)
将 USART_ClockInitTypeDef 结构体初始化为默认值。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USART_ClockInitStruct |
USART_ClockInitTypeDef * |
待初始化的结构体指针 |
返回值:
无
默认配置为:时钟禁用、CPOL=低、CPHA=第一边沿、最后一个时钟脉冲禁用。适用于大多数 SPI 从设备(模式 0)。
USART_Cmd
#
void USART_Cmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 USART 外设。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
通过设置
CTLR1的 UE 位控制 USART 使能状态。在初始化后必须调用此函数才能开始通信,关闭后可节省功耗。
USART_ITConfig
#
void USART_ITConfig(USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState)
使能或禁用指定的 USART 中断源。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_IT |
uint16_t |
中断源,如 USART_IT_RXNE、USART_IT_TXE 等 |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
该函数通过操作 USART 的中断使能寄存器(IER)实现中断控制,支持所有标准中断。中断服务函数需在 NVIC 中配置优先级并编写对应中断处理程序。
USART_DMACmd
#
void USART_DMACmd(USART_TypeDef *USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
使能或禁用 USART 的 DMA 请求。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_DMAReq |
uint16_t |
DMA 请求类型:USART_DMAReq_Tx 或 USART_DMAReq_Rx |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,数据传输由 DMA 控制器自动完成,无需 CPU 参与。需提前配置 DMA 通道与 USART 的映射关系(参考 DMA 驱动文档),适用于大数据量传输,如文件下载、音频流等。
USART_SetAddress
#
void USART_SetAddress(USART_TypeDef *USARTx, uint8_t USART_Address)
设置 USART 的节点地址,用于多机通信(地址标记唤醒模式)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_Address |
uint8_t |
节点地址,范围 0~255 |
返回值:
无
仅在
USART_WakeUpConfig(USART_WakeUp_AddressMark)模式下有效。当接收到地址帧时,若地址匹配则唤醒并接收后续数据,适用于 RS-485 多点网络。
USART_WakeUpConfig
#
void USART_WakeUpConfig(USART_TypeDef *USARTx, uint16_t USART_WakeUp)
配置 USART 的唤醒方式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_WakeUp |
uint16_t |
唤醒方式:USART_WakeUp_IdleLine 或 USART_WakeUp_AddressMark |
返回值:
无
用于低功耗模式(如 Stop 模式)下,通过检测空闲线或地址帧唤醒 MCU,显著降低待机功耗,适用于电池供电的远程终端。
USART_ReceiverWakeUpCmd
#
void USART_ReceiverWakeUpCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用接收器静音模式(Mute Mode)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,接收器忽略所有数据,仅监听唤醒帧(空闲线或地址标记),用于节能场景。与
USART_WakeUpConfig配合使用,实现智能唤醒。
USART_LINBreakDetectLengthConfig
#
void USART_LINBreakDetectLengthConfig(USART_TypeDef *USARTx, uint16_t USART_LINBreakDetectLength)
配置 LIN 总线中断帧检测长度。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_LINBreakDetectLength |
uint16_t |
检测长度:10b 或 11b |
返回值:
无
LIN 协议中,主节点发送 13 位低电平作为帧起始,从节点通过检测 10 或 11 位低电平识别帧头,此配置确保与不同 LIN 版本兼容。
USART_LINCmd
#
void USART_LINCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 LIN 总线模式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,USART 自动识别 LIN 帧结构(包括同步场、标识符、数据、校验),适用于汽车电子中的低成本传感器网络。
USART_SendData
#
void USART_SendData(USART_TypeDef *USARTx, uint16_t Data)
向 USART 发送单个数据字节或字(根据数据位长度)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
Data |
uint16_t |
待发送数据,仅低 9 位有效(0x01FF) |
返回值:
无
数据写入发送数据寄存器(DATAR),硬件自动处理移位与校验。若发送缓冲区满(TXE 未置位),需等待或使用中断/DMA。
USART_ReceiveData
#
uint16_t USART_ReceiveData(USART_TypeDef *USARTx)
从 USART 接收一个数据字节或字。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
返回值:
接收到的数据(低 9 位有效)
读取接收数据寄存器(DATAR),自动清除 RXNE 标志。若无数据,返回值可能为无效数据,建议先检查
USART_GetFlagStatus(USART_FLAG_RXNE)。
USART_SendBreak
#
void USART_SendBreak(USART_TypeDef *USARTx)
发送一个持续 10~11 位的低电平中断帧(Break)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
返回值:
无
用于 LIN、Modbus 等协议中作为帧起始或复位信号,通过置位
CTLR1的 SBK 位实现,发送后自动恢复。
USART_SetGuardTime
#
void USART_SetGuardTime(USART_TypeDef *USARTx, uint8_t USART_GuardTime)
设置 SmartCard 模式下的保护时间(Guard Time)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_GuardTime |
uint8_t |
保护时间,单位为 T(1 个字符传输时间),范围 0~255 |
返回值:
无
SmartCard 通信中,主机发送后需等待至少 GT 时间再接收响应,避免总线冲突。GT = 0 表示无等待。
USART_SetPrescaler
#
void USART_SetPrescaler(USART_TypeDef *USARTx, uint8_t USART_Prescaler)
设置 SmartCard 模式下的系统时钟预分频器。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_Prescaler |
uint8_t |
预分频值,范围 0~255 |
返回值:
无
用于调整 SmartCard 通信的时钟频率,使波特率与卡片要求匹配(如 3.57MHz 或 4.91MHz)。
USART_SmartCardCmd
#
void USART_SmartCardCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 SmartCard 模式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,USART 自动启用单线半双工模式,仅使用 TX 引脚进行双向通信,适用于读写 IC 卡、SIM 卡等。
USART_SmartCardNACKCmd
#
void USART_SmartCardNACKCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 SmartCard 模式下的 NACK(否定应答)发送。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
当接收错误时,主机可发送 NACK 通知卡片重传,提高通信可靠性。
USART_HalfDuplexCmd
#
void USART_HalfDuplexCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用半双工模式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,TX 和 RX 引脚复用为单线,仅允许一方发送,适用于 RS-485 总线等半双工通信场景,需外部收发控制电路。
USART_OverSampling8Cmd
#
void USART_OverSampling8Cmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 8 倍过采样模式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
注意:必须在
USART_Init()之前调用! 8 倍过采样可提升波特率精度,尤其在低频系统时钟下(如 8MHz),能更精确生成 115200bps 等非整数倍波特率。
USART_OneBitMethodCmd
#
void USART_OneBitMethodCmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用单边沿采样方法。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,接收器仅在每个数据位的中间采样一次,降低功耗并提升抗噪声能力,适用于长距离、低速通信。
USART_IrDAConfig
#
void USART_IrDAConfig(USART_TypeDef *USARTx, uint16_t USART_IrDAMode)
配置 IrDA 模式下的接收器灵敏度。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_IrDAMode |
uint16_t |
USART_IrDAMode_LowPower 或 USART_IrDAMode_Normal |
返回值:
无
通过设置
CTLR3的 IRLP 位,控制接收器滤波器带宽,低功耗模式牺牲灵敏度换取更低电流消耗。
USART_IrDACmd
#
void USART_IrDACmd(USART_TypeDef *USARTx, FunctionalState NewState)
使能或禁用 IrDA 红外通信模式。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
NewState |
FunctionalState |
ENABLE 或 DISABLE |
返回值:
无
启用后,TX 引脚输出红外调制信号,RX 引脚接收红外脉冲,适用于遥控器、红外数据传输等场景,需外接红外收发模块。
USART_GetFlagStatus
#
FlagStatus USART_GetFlagStatus(USART_TypeDef *USARTx, uint16_t USART_FLAG)
查询指定标志位状态(SET 或 RESET)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_FLAG |
uint16_t |
标志位,如 USART_FLAG_RXNE、USART_FLAG_TXE 等 |
返回值:
SET 或 RESET
用于轮询方式判断通信状态,如等待发送完成或接收数据。注意:部分标志(如 ORE、FE、NE、PE)需配合读 DATAR 清除。
USART_ClearFlag
#
void USART_ClearFlag(USART_TypeDef *USARTx, uint16_t USART_FLAG)
清除指定的 USART 状态标志。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_FLAG |
uint16_t |
要清除的标志位 |
返回值:
无
通过向 STATR 写入 1 清除对应位(写 1 清零)。注意:
TXE、RXNE、TC等标志有特殊清除方式,详见注释。
USART_GetITStatus
#
ITStatus USART_GetITStatus(USART_TypeDef *USARTx, uint16_t USART_IT)
检查指定中断是否发生(SET 或 RESET)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_IT |
uint16_t |
中断源,如 USART_IT_RXNE、USART_IT_ERR 等 |
返回值:
SET 或 RESET
用于中断服务函数中判断具体中断源,需结合
USART_GetITStatus()和USART_ClearITPendingBit()使用。
USART_ClearITPendingBit
#
void USART_ClearITPendingBit(USART_TypeDef *USARTx, uint16_t USART_IT)
清除指定中断的挂起标志。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
USARTx |
USART_TypeDef * |
选择 USART 外设(仅 USART1) |
USART_IT |
uint16_t |
要清除的中断源 |
返回值:
无
通过向 STATR 写入 1 清除中断标志。必须在中断服务函数末尾调用,否则中断会持续触发。部分错误中断需配合读 DATAR 清除。