GPIO(通用输入输出)与LPUART(低功耗通用异步收发传输器)简述

发布于:2025-06-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

GPIO(通用输入输出)与LPUART(低功耗通用异步收发传输器)在嵌入式系统中常结合使用,以下从关联、配置、使用场景及注意事项四方面展开说明:

一、GPIO与LPUART的关联

  1. 功能复用
    GPIO引脚可通过配置切换为LPUART的TX(发送)和RX(接收)引脚,实现串口通信。例如:
    • STM32L496的LPUART通信口可复用到PA2/PA3、PB10/PB11、PG7/PG8等引脚。
    • 树莓派3需关闭蓝牙占用后,才能将硬件串口分配给GPIO14/GPIO15。
  2. 硬件依赖
    LPUART需依赖GPIO的复用功能(AF模式)和正确电平配置(如推挽输出TX、浮空输入RX),同时需确保时钟和电源域使能。

二、配置步骤与示例

1. 硬件初始化
  • 时钟使能
    需开启GPIO端口和LPUART外设的时钟:

    // STM32示例:使能GPIOB和LPUART1时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_LPUART1_CLK_ENABLE();
  • 引脚配置
    设置GPIO为复用功能(AF模式),并指定引脚功能(如AF8对应LPUART1):

    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; // TX/RX引脚
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上下拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速模式
    GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; // 复用功能选择
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
2. LPUART参数配置
  • 波特率与数据格式
    需根据时钟源设置波特率(如HSI最高46kbps,LSE最高9.6kbps):

    UART_HandleTypeDef huart1;
    huart1.Instance = LPUART1;
    huart1.Init.BaudRate = 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; // 发送+接收模式
    HAL_UART_Init(&huart1);
  • 电源域配置(特殊场景)
    某些GPIO(如STM32的PG7/PG8)需额外配置电源域(如VDDIO2):

    __HAL_RCC_PWR_CLK_ENABLE();
    HAL_PWREx_EnableVddIO2(); // 使能VDDIO2电源域

三、使用场景

  1. 低功耗通信
    LPUART可在MCU停止模式下以极低功耗捕获数据帧,适用于电池供电设备(如智能手表、传感器节点)。

  2. 多速率兼容性
    通过切换时钟源(如HSI/LSE)和波特率,可适配不同速率需求:

    • HSI(高速内部时钟):适合高波特率(如115200bps)。
    • LSE(32.768kHz晶振):适合低功耗场景(波特率≤9600bps)。
  3. 硬件抽象
    LPUART支持DMA和硬件FIFO,可减轻CPU负担,适用于高速数据传输(如日志记录、传感器数据采集)。

四、常见问题与解决方案

  1. 无输出信号
    • 原因:GPIO复用配置错误、时钟未使能、波特率超出时钟范围。
    • 解决:检查引脚复用设置(如GPIO_AF8_LPUART1),确认时钟已使能,并验证波特率是否满足3×波特率 ≤ 时钟 ≤ 4096×波特率
  2. 数据接收异常
    • 现象:接收中断标志与奇偶校验标志顺序异常。
    • 解决:优先检查接收完成标志,再处理校验错误;中断模式下建议仅开启接收完成中断。
  3. 电源域冲突
    • 现象:PG7/PG8等引脚无信号。
    • 解决:使能VDDIO2电源域(如HAL_PWREx_EnableVddIO2()),并配置对应时钟。

五、总结

GPIO与LPUART的结合使用需关注:

  1. 复用功能配置:确保GPIO引脚切换至LPUART模式。
  2. 时钟与电源:根据场景选择时钟源,并使能相关电源域。
  3. 波特率验证:严格遵循时钟与波特率的约束关系。
  4. 中断处理:优化中断标志检查顺序,避免数据丢失。

通过合理配置,可实现低功耗、高可靠的串口通信,适用于物联网、可穿戴设备等场景。