登录/注册

stm32f103 usart1

更多

STM32F103 的 USART1 是其内置的通用同步/异步串行通信接口,常用于实现与其他设备(如 PC、传感器或其他微控制器)的串行数据交换。以下是关于 USART1 的关键信息和使用指南:


1. USART1 引脚分配

需在代码中配置引脚复用功能,并启用 AFIO 时钟(若使用重映射)。


2. 初始化步骤

(1) 启用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// 若使用重映射,还需启用 AFIO 时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

(2) 配置 GPIO

(3) 配置 USART1 参数

USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;          // 波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 8 数据位
USART_InitStructure.USART_StopBits = USART_StopBits_1;      // 1 停止位
USART_InitStructure.USART_Parity = USART_Parity_No;         // 无校验
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 使能收发
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控
USART_Init(USART1, &USART_InitStructure);

(4) 使能 USART1

USART_Cmd(USART1, ENABLE);

3. 数据收发

发送数据

void USART1_SendChar(char c) {
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送缓冲区空
    USART_SendData(USART1, c);
}

接收数据

char USART1_ReceiveChar() {
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); // 等待数据到达
    return USART_ReceiveData(USART1);
}

4. 中断配置(可选)

若需使用中断接收数据:

(1) 使能接收中断

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

(2) 配置 NVIC

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

(3) 编写中断服务函数

void USART1_IRQHandler() {
    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        char data = USART_ReceiveData(USART1);
        // 处理接收到的数据
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
    }
}

5. 注意事项

  1. 波特率计算
    USART1 挂载在 APB2 总线(默认 72 MHz),波特率计算公式为:

    BaudRate = APB2_CLK / (16 * USARTDIV)

    需根据实际时钟配置调整 USARTDIV 值(通过 USART_BRR 寄存器设置)。

  2. 硬件连接
    若与 PC 通信,需使用电平转换芯片(如 MAX3232)将 TTL 电平转换为 RS232 电平。

  3. 库函数兼容性
    上述代码基于标准外设库(SPL)。若使用 HAL 库,函数名称和流程会略有不同。


通过以上配置,USART1 可实现基本的串口通信功能。实际应用中需根据具体需求调整参数(如波特率、中断优先级等)。

STM32CubeMx配置USART1增加打印功能

STM32CubeMx配置USART1增加打印功能

2023-08-22 10:32:47

STM32USART1USART2模块串行数据通讯功能

STM32的USART1与USART2模块支持多种功能,包括IrDA红外、Smart Card(IC卡)等。

2023-07-24 14:28:45

STM32F745 USART1 Bootloader失败原因分析与解决

使用 STM32F745 进行产品开发的时候,出现了使用 STM32CubeProgramer 无法通过 USART1 Bootloader 进

2023-01-13 10:33:47

STM32F103中断串口通信USART

、参考文献一、实验原理实验原理可以参考笔者之前的两篇博客STM32F103串口通信USART小试牛刀_江南烟浓雨的博客-CSDN博客STM32F103

资料下载 李辉 2022-01-14 10:39:40

STM32F105 USART1/USART3 调试笔记

由103系列向105系列移植目录由103系列向105系列移植故障现象:USART1乱码故障排除:时钟和外部晶振的适配调整外部晶振配置时钟配置故障

资料下载 张国厚 2021-12-28 19:31:50

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32f103使用的DAC正弦波

基于STM32f103使用的DAC正弦波

资料下载 shyshyshy 2021-08-02 10:05:00

工程师笔记|STM32F745 USART1 Bootloader 失败原因分析与解决

使用 STM32CubeProgramer 无法通过 USART1 Bootloader 进行程序升级的问题。为了解决客户的问题,我在 NUCLEO-F

2023-01-08 16:50:05

USART1乱码与USART3收发故障排除方法

由103系列向105系列移植目录由103系列向105系列移植故障现象:USART1乱码故障排除:时钟和外部晶振的适配调整外部晶振配置时钟配置故障

2022-02-22 06:43:13

STM32F103C8 USART1串口重映射实现方法

STM32F103C8 USART1串口重映射实现方法代码我们知道,F103的usar

2022-01-07 08:16:46

如何去实现基于STM32F103C6的串口USART1功能呢

如何去实现基于STM32F103C6的串口USART1功能呢?串口USART1有何功能呢?

2021-12-13 06:37:24

如何实现STM32F103 USART1串口重映射功能?

如何实现STM32F103 USART1串口重映射功能?

2021-12-07 06:09:40

stm32f103串口数据接收

stm32f103串口数据接收,通用同步/异步收发器(USART)STM32F103xC、

2021-08-09 09:03:17

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

7天热门专题 换一换
相关标签