今天有人问:GPIO配置不同输出速度会有什么影响?你知道答案吗?
1写在前面
这个问题看起来比较简单,我相信很多人都能说出答案。
但是,很多人都只是停留在表面,至于深层次的含义,估计很少有人思考。
需要更深理解其中含义,可能需要结合特定场景来说,我自己也是在项目中才深刻体会其中含义。
2GPIO输出速度
不管标准外设库,还是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 /*!< I/O output speed: Low 2 MHz */#define GPIO_Speed_10MHz GPIO_Speed_Level_2 /*!< I/O output speed: Medium 10 MHz */#define GPIO_Speed_50MHz GPIO_Speed_Level_3 /*!< I/O output speed: High 50 MHz */
#define GPIO_SPEED_FREQ_LOW (0x00000000u) /*!< Low speed */#define GPIO_SPEED_FREQ_MEDIUM (0x00000001u) /*!< Medium speed */#define GPIO_SPEED_FREQ_HIGH (0x00000002u) /*!< High speed */#define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003u) /*!< Very high speed */
对于普通输出GPIO,使用STM32CubeMX配置,默认配置低:
当然,如果配置成其他模式,有可能是中,或高。
比如:配置UART、CAN引脚,速度会是高。
提问:你想过为什么会是低、高吗?
3实验:测量GPIO输出波形
不知道大家用示波器测量过GPIO输出波形没有,特别是在高速(单位M)的时候。
我以前经常测量MCO引脚输出时钟,测量过的人应该都知道,如果输出速度和配置速度不匹配,会明显看到波形不正常。
波形会出现不完整,幅度低等失真现象。
相信不用我说,有一定常识的人都能理解。
4具体原因
速度的配置,就是决定IO口驱动电路的响应速度。
我们需要结合实际情况配置速度,不同速度会有不同的影响。
高低速差异:
配置高速:输出频率高,噪音大,功耗高,电磁干扰强;
配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;
看到差异,相信很多人就能理解了。
实际情况中,比如:低功耗的产品,你会考虑功耗。
环境不好的场合,通信不稳定,你会考虑电磁干扰等。
举例:
如果你使用9600波特率UART通信,建议速度配置为低。
所以,如果你想使产品更加完美,速度配置也是关键的一项。
关键字:STM32 GPIO 配置 输出速度
引用地址:
关于STM32的GPIO配置不同输出速度会有什么影响
推荐阅读最新更新时间:2024-10-31 02:42
【STM32】HAL库-GPIO及位段
GPIO模式 输入浮空 输入上拉 输入下拉 模拟输入 推挽输出 开漏输出 推挽复用输出 开漏复用输出 一篇介绍推挽与开漏输出的区别的文章 链接 I/O端口位的基本结构 配置表 输入浮空/上拉/下拉配置 输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 对输入数据寄存器的读访问可得到I/O状态 输出配置 输出缓冲器被激活 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’
[单片机]
STM32 的SPI总线配置
项目中经常会用到多路SPI,但是各路的配置又不尽相同,其中SPI3默认状态是JLINK模式,所以如果想正常使用SPI3,就需要对其重映射。下面给出SPI2和SPI3的配置程序,该配置已验证。 验证MCU:STM32F107 1、SPI2配置 void SPI_Init(void) { uint32_t cnt; GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /* 使能 SPI2 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_A
[单片机]
基于STM32的红外遥控和解码遥控程序解析
文本主要包含两个内容:一、红外遥控协议的的讲解;二、解码程序解析(参考正点原子的代码) 红外的介绍、优点、缺点就不给大家说了,网上书上都有,下面进入正题 一、红外遥控协议的的讲解 红外遥控的编码目前广泛使用的是:NEC Protocol的PWM(脉冲宽度调制)和Philips RC-5 Protocol的PPM(脉冲位置调制) 本文将以NEC协议实现红外遥控。 NEC协议的特征: 1、8位地址和8位指令长度; 2、地址和命令两次传输(确保可靠性); 3、PWM脉冲宽度调制,以发射红外载波的占空比代表 0 和 1 ; 4、载波频率为38KHz; 5、位时间为1.125ms和2.25ms; NEC 码位的定义:一个脉
[单片机]
STM32入门学习笔记之电容触摸实验(上)
8.1 电容触摸简介 8.1.1 电容触摸概述 随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为不存在机械接触,占用空间少,以前的机械按键在设计外壳的时候需要考虑尺寸,现在换成电容按键后这个问题不再需要考虑。 8.1.2 检测原理 常规的检测方式一般是通过计算电容放电时间来判断是否有手指按下,这是因为手指会与线路板的铜箔接触面上产生电容效应,当手指没有放在铜箔上的时候,铜箔与PCB之间存在杂散电容,这两个状态的电容值差别很大,检测原理如下图所示。 在检测之前首先用开关将电容Cs里
[单片机]
STM32待机模式唤醒测试以及独立看门狗测试
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 在上篇文章中http://blog.csdn.net/jdh99/article/details/7369844,进行了一些STM32待机模式的测试.其中关于如何在再次启动时判断是否是待机模式没有进行测试.另外上篇文章有个问题,闹钟中断在待机模式下是进入不了的. 本文进行了独立看门狗IWDG测试,以及待机模式更详细的测试. STM32中,复位分为3种: 1.系统复位:外部复位,WWDG,IWDG,SW复位,低功耗管理复位.除复位标志寄存器RCC_CSR不被复位,全部都被复位 2.电源复位:上电/掉电复位
[单片机]
STM32 USB部分中断函数简要分析
在 stm32f10x_it.c 中有下面这个函数 void USB_LP_CAN1_RX0_IRQHandler(void) { USB_Istr(); } 可见USB_Istr()是处理USB_LP_CAN1_RX0_IRQHandler中断的,而这个中断管理的是控制传输、中断传输、批量传输(单缓冲区)。 下面对此函数中关键部分进行分析 wIstr = _GetISTR();这句说白了就是获取ISTR寄存器的值,从usb_regs.h中这个宏定义#define _GetISTR() ((uint16_t) *ISTR)中便知 #define IMR_MSK (CNTR_CTRM | CNTR_WKUPM
[单片机]
关于在stm32中使用printf函数的问题
想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式)。 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR
[单片机]
探讨关于UPS电源系统的配置、安装及维护
UPS不仅是不间断供电装置,还具有电力净化的作用。本文将重点讨论UPS的选择和配置、蓄电池组容量的选择和配置以及UPS电源的安装与维护。 引言 UPS即不间断电源,随着各种电子设备的普及,UPS电源得到了越来越广泛地应用。 1 UPS选型和配置 1.1 了解UPS电源的性能指标:①输入电压:220V或380V(三相四线制),-15%~+10%。②输出电流:根据这个值选择导线截面和输入保险。③输出电压:一是输出电压稳定度,一般为±5%。有些为±3%左右。另一个是稳压精度:稳态≤±1%、瞬态≤±5% 。④瞬态电压恢复时间:≤±50ms。⑤输出容量:即视在功率S, S=UI⑥后备时间:指输入中断后,UPS能继续工作的时间,
[电源管理]