当前位置: 首页 > news >正文

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

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. 中断处理:优化中断标志检查顺序,避免数据丢失。

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

http://www.xdnf.cn/news/947287.html

相关文章:

  • 简繁体智能翻译软件
  • 大数据清洗加工概述
  • 【c语言】安全完整性等级
  • Vue 3 + WebSocket 实战:公司通知实时推送功能详解
  • linux cgroup内存/io/cpu/网络使用总结
  • 怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
  • Android 开发中配置 USB 配件模式(Accessory Mode) 配件过滤器的配置
  • Android屏幕刷新率与FPS(Frames Per Second) 120hz
  • MySQL中【正则表达式】用法
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
  • 今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
  • web vue 项目 Docker化部署
  • 【DVWA系列】——xss(Reflected)——Medium详细教程
  • 破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
  • Python ROS2【机器人中间件框架】 简介
  • leetcodeSQL解题:3564. 季节性销售分析
  • 均衡后的SNRSINR
  • idea 设置git提交快捷键
  • 【习题】DevEco Studio的使用
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析(四)DPHY ECC
  • LangGraph 应用实例解析
  • 归并排序算法及其在算法中的应用
  • 使用Python 构建支持主流大模型与 Ollama 的统一接口平台
  • 查找日志文件中​​最后一次出现某个关键词的上下 20 行​​
  • ZYNQ学习记录FPGA(二)Verilog语言
  • matlab自控仿真【第一弹】❀传递函数和输出时域表达式
  • VAS1086Q 奇力科技线性芯片车规用品LED驱动芯片
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
  • 【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道