• 注册 / 登录
  • 切换到窄版
  • 查看: 1861|回复: 0

    单片机IO速度配置简介

    [复制链接]

    668

    主题

    682

    帖子

    6599

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6599
    发表于 2024-1-29 13:56:47 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言

    这是个初学者不会去了解的问题,老司机也有可能掉坑的问题;问题看起来比较简单,相信很多人都能说出答案。但是很多人都只是停留在表面,没有在项目中经历过,也没有更深入的去了解。

    1.png

    很早以前单片机可能没有输出速度这个配置选项,后来的单片机基本都有配置速度的选项,下面结合STM32简单介绍一下。

    GPIO输出速度模式

    GPIO 引脚速度: GPIO_Speed_2MHz (10MHz, 50MHz) ;又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。)

    可理解为输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。(如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。)

    如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。

    注意: GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。(带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。)

    GPIO输出速度配置

    不管标准外设库,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项,如下:

    1. GPIO_InitStruct.Pin = GPIO_PIN_5;
    2. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    3. GPIO_InitStruct.Pull = GPIO_NOPULL;
    4. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    5. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    复制代码

    根据不同MCU型号,速度选项,有些有3个,有些有4个。一般定义在xxx_gpio.h文件中。

    1. #define GPIO_Speed_2MHz  GPIO_Speed_Level_1   /*!< I/O output speed: Low 2 MHz  */
    2. #define GPIO_Speed_10MHz GPIO_Speed_Level_2   /*!< I/O output speed: Medium 10 MHz */
    3. #define GPIO_Speed_50MHz GPIO_Speed_Level_3   /*!< I/O output speed: High 50 MHz */
    复制代码
    1. #define  GPIO_SPEED_FREQ_LOW        (0x00000000u)  /*!< Low speed       */
    2. #define  GPIO_SPEED_FREQ_MEDIUM     (0x00000001u)  /*!< Medium speed    */
    3. #define  GPIO_SPEED_FREQ_HIGH       (0x00000002u)  /*!< High speed      */
    4. #define  GPIO_SPEED_FREQ_VERY_HIGH  (0x00000003u)  /*!< Very high speed */
    复制代码

    对于普通输出GPIO,使用STM32CubeMX配置,默认配置低:

    2.png

    当然,如果配置成其他模式,有可能是中或高。

    1.USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。

    2.I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。

    3.SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。

    测量GPIO输出波形

    用示波器测量过GPIO输出波形,特别是在高速(单位M)的时候经常测量MCO引脚输出时钟;如果输出速度高于配置速度,会明显看到波形会出现不完整,幅度低等失真现象。

    结语

    速度配置决定IO口驱动电路的响应速度,需要结合实际情况配置速度;不同速度会有不同的影响,差异如下:

    配置高速:输出频率高,噪音大,功耗高,电磁干扰强;
    配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;

    在实际情况中,比如低功耗的产品会考虑功耗;环境不好与通信不稳定的场合,会考虑电磁干扰等。

    更多关于IO的内容请看:详解GPIO工作原理和八种模式STM32 GPIO配置寄存器(CRL、CRH)入门指南

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-11-3 20:46 , Processed in 0.044362 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表