这是一个对新手来说可能不会去深入了解的问题,但它却可能让经验丰富的专业人士遇到困难的问题。
这个问题最近在技术交流群中引起了我的注意,因此我想简单地分享一下我的见解。
问题概述
这个问题似乎很简单,我相信很多人都可以给出答案。
但是,许多人只是停留在表面,他们没有在实际项目中遇到过这个问题,也没有进一步深入了解它。
很早之前年的单片机可能没有输出速度这个配置选项,但是这后面的单片机基本都有配置速度的选项,下面结合STM32来简单介绍一下。
GPIO输出速度
不管标准外设库,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项。
类似如下:
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
根据不同MCU型号,速度选项,有些有3个,有些有4个。一般定义在xxx_gpio.h文件中。
#define GPIO_Speed_2MHz GPIO_Speed_Level_1 /*!
#define GPIO_Speed_10MHz GPIO_Speed_Level_2 /*!
#define GPIO_Speed_50MHz GPIO_Speed_Level_3 /*!
#define GPIO_SPEED_FREQ_LOW (0x00000000u) /*!
#define GPIO_SPEED_FREQ_MEDIUM (0x00000001u) /*!
#define GPIO_SPEED_FREQ_HIGH (0x00000002u) /*!
#define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003u) /*!
对于普通输出GPIO,使用STM32CubeMX配置,默认配置低:
当然,如果配置成其他模式,有可能是中,或高。
比如:配置UART、CAN引脚,速度会是高。
提问:你想过为什么会是低、高吗?
测量GPIO输出波形
不知道大家用示波器测量过GPIO输出波形没有,特别是在高速(单位M)的时候。
我以前经常测量MCO引脚输出时钟,测量过的人应该都知道,如果输出速度高于配置速度,会明显看到波形不正常。
波形会出现不完整,幅度低等失真现象。
相信不用我说,有一定常识的人都能理解。
差异原因
速度的配置,就是决定IO口驱动电路的响应速度。
我们需要结合实际情况配置速度,不同速度会有不同的影响。
高低速差异:
配置高速:输出频率高,噪音大,功耗高,电磁干扰强;
配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;
看到差异,相信很多人就能理解了。
实际情况中,比如:低功耗的产品,你会考虑功耗。
环境不好的场合,通信不稳定,你会考虑电磁干扰等。
举例:
如果你使用9600波特率UART通信,建议速度配置为低。
所以,如果你想使产品更加完美,速度配置也是关键的一项。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !