STM32 UART常用配置函数及实验

一、UART常用配置函数

1. UART_HandleTypeDef huart1

**功能:**UART句柄结构体变量

复制代码
UART_HandleTypeDef huart1;  // 定义USART1的句柄

作用: 存储UART外设的所有配置参数和状态信息
包含内容: 波特率、数据位、停止位、校验位、硬件流控制、中断/DMA配置等
**使用方式:**作为所有UART操作的参数传递给HAL库函数

2. void MX_USART1_UART_Init(void)

**功能:**USART1外设初始化函数

复制代码
void MX_USART1_UART_Init(void)
{
    huart1.Instance = USART1;                    // 指定使用USART1
    huart1.Init.BaudRate = 115200;               // 波特率115200
    huart1.Init.WordLength = UART_WORDLENGTH_8B; // 8位数据位
    huart1.Init.StopBits = UART_STOPBITS_1;      // 1位停止位
    huart1.Init.Parity = UART_PARITY_NONE;       // 无校验位
    huart1.Init.Mode = UART_MODE_TX_RX;          // 收发模式
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
    huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 16倍过采样
    
    HAL_UART_Init(&huart1);  // 调用HAL库初始化函数
}

3. HAL_UART_Transmit

**功能:**阻塞式UART数据发送函数

复制代码
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

参数:

复制代码
huart:UART句柄指针
pData:要发送的数据缓冲区指针
Size:要发送的数据字节数
Timeout:超时时间(毫秒)

4. HAL_UART_Receive

**功能:**阻塞式UART数据接收函数

复制代码
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

5. HAL_UART_Transmit_IT

功能: 中断方式发送

复制代码
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

6. HAL_UART_Receive_IT

**功能:**中断方式接收

复制代码
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

7. HAL_UART_Transmit_DMA

**功能:**DMA方式发送

复制代码
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

8. HAL_UART_Receive_DMA

**功能:**DMA方式接收

复制代码
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

9. HAL_UART_TxCpltCallback

**功能:**发送完成回调

复制代码
__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    // 用户重写此函数处理发送完成事件
}

10. HAL_UART_RxCpltCallback

**功能:**接收完成回调

复制代码
__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    // 用户重写此函数处理接收完成事件
}

二、实验示例

1. 实验现象

在程序的主循环中,通过USART1串口以每秒一次的频率持续发送字符'F'。实验现象是连接到USART1的接收设备(串口调试助手)会每隔1秒收到一个字符'F',形成稳定而有规律的数据流。

2. 示例代码

USART初始化

复制代码
/**
  * @brief  USART1串口初始化函数
  * @retval 无
  */
void MX_USART1_UART_Init(void)
{
    // 配置USART1句柄参数
    huart1.Instance = USART1;                    // 使用USART1外设
    huart1.Init.BaudRate = 115200;               // 波特率115200
    huart1.Init.WordLength = UART_WORDLENGTH_8B; // 8位数据位
    huart1.Init.StopBits = UART_STOPBITS_1;      // 1位停止位
    huart1.Init.Parity = UART_PARITY_NONE;       // 无奇偶校验
    huart1.Init.Mode = UART_MODE_TX_RX;          // 使能发送和接收模式
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
    huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 16倍过采样
    
    // 调用HAL库初始化函数,检查初始化是否成功
    if (HAL_UART_Init(&huart1) != HAL_OK)
    {
        // 初始化失败时调用错误处理函数
        Error_Handler();
    }
}

主函数

复制代码
int main(void)
{
    // 初始化HAL库,重置所有外设,初始化Flash接口和系统滴答定时器
    HAL_Init();

    // 配置系统时钟
    SystemClock_Config();

    // 初始化所有已配置的外设
    MX_GPIO_Init();          // 初始化GPIO
    MX_USART1_UART_Init();   // 初始化USART1串口

    // 定义要发送的字符
    uint8_t ch1 = 'F';

    // 主程序循环
    while (1)
    {
        // 通过USART1发送字符'F',使用最大延时等待发送完成
        HAL_UART_Transmit(&huart1, &ch1, 1, HAL_MAX_DELAY);
        
        // 延时1秒
        HAL_Delay(1000);
    }
}
相关推荐
智购科技自动贩卖机11 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
单片机仿真设计13 小时前
【proteus仿真】基于 STM32 单片机智能仓库设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
jianqiang.xue20 小时前
ESP-IDF保姆级入门19|低功耗模式全解与工程化设计:分级休眠/唤醒源配置/功耗调优/外设适配,实现工业级功耗性能平衡
stm32·单片机·物联网·架构·esp32
单片机仿真设计20 小时前
【proteus仿真】基于 STM32 单片机汽车安全监控装置设计(仿真 + 源码)
stm32·单片机·嵌入式硬件·proteus·毕设
单片机仿真设计20 小时前
【proteus仿真】基于 STM32 单片机的智能浴室系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
新晨单片机设计21 小时前
S005A-基于STM32单片机震动防盗报警器【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
糖糖单片机设计1 天前
STM32智能行李箱控制系统
stm32·单片机·嵌入式硬件
Brilliantwxx1 天前
【STM32】GPIO :寄存器原理、点灯实战与输出特性全解
stm32·单片机·嵌入式硬件
jianqiang.xue1 天前
审查技能库(中):硬件与系统安全
stm32·单片机·物联网·架构·esp32
zcmodeltech1 天前
工程车模型多车型动作控制系统设计与实现方案——基于STM32与Modbus RTU的挖掘机、装载机、自卸车、起重机、电力工程车全场景控制方案,服务范围覆盖全国
分布式·stm32·单片机·嵌入式硬件·交互