【STM32】串口通信寄存器/库函数配置(提供完整实例代码)

STM32串口常用寄存器和库函数

STM32 串口通信常用寄存器
名称 说明 图示
USART_SR 状态寄存器,标志 TXE、RXNE、TC 等状态 USART_SR
USART_DR 数据寄存器,写入发送,读取接收 USART_DR
USART_BRR 波特率寄存器,设置通信速率 USART_BRR
USART_SR
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

在这里插入图片描述

USART_DR
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

在这里插入图片描述

USART_BRR
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

在这里插入图片描述

串口操作相关库函数(省略入口参数):

void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断

void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
库函数 说明
USART_Init() 初始化串口参数:波特率、数据位、停止位、校验位等
USART_Cmd() 使能串口
USART_ITConfig() 启用串口中断
USART_SendData() 向 DR 寄存器发送数据
USART_ReceiveData() 从 DR 寄存器接收数据
USART_GetFlagStatus() 检查 TXE、RXNE 等标志
USART_ClearITPendingBit() 清除中断挂起标志

串口配置一般步骤(标准库)

需要先了解 STM32F1的端口复用相关知识,请参考前面端口复用的文章。【STM32】端口复用和重映射。
在这里插入图片描述

源文档出自RM0008_STM32F10xxx单片机参考手册中文版 8.1.11小节

① 串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
② 串口复位: USART_DeInit(); 这一步不是必须的
③ GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP
④ 串口参数初始化:USART_Init();
⑤ 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

👇 简化为 9 步:
  1. 开启时钟(串口和 GPIO)
  2. GPIO初始化(TX:复用推挽输出;RX:浮空输入)
  3. 串口参数配置
  4. 配置中断(可选)
  5. 配置 NVIC(可选)
  6. 使能串口
  7. 收发函数
  8. 状态判断
  9. 编写中断服务函数(如果启用中断)

USART1 通信实例(标准库,无中断)

💡 目标:使用 USART1(PA9、PA10),实现串口发送字符串到上位机
📌 1. 初始化代码(串口+GPIO)
#include "stm32f10x.h"

void USART1_Init(uint32_t baudrate)
{
   
   
    // 1. 开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

    // 2. 配置 GPIO
    GPIO_InitTypeDef GPIO_InitStructure;
    // TX (PA9) 推挽复用输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // RX (PA10) 浮空输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫的小茶馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值