当我们使用ST公司的STM32CubeMx工具在STM32芯片上进行引脚初始化配置时,当我们指向某个引脚时,会自动拉出一个长的可配置菜单选项。有些人可能会发现一些类似上图的情况,其中一个引脚可以配置为ADC的输入通道。为什么同时有GPIO_analog选项?两者有什么区别?
ADC_Inx不难理解,也就是说GPIO可以作为ADC模拟输入通道,而此时的GPIO确实处于模拟模式。为什么要多拿一个GPIO_Analog?不就是和ADC_Inx一个意思吗?
真的不是一个意思。
其实GPIO_Analog和GPIO_Input或者GPIO_Output一样,也是GPIO工作模式的一个选项。这种情况下,ADC_Inx作为模拟输入通道,GPIO处于模拟模式。但不能说GPIO是在模拟模式下配置为ADC转换通道,也可以作为比较器、DAC等模拟外设的复用通道,也可以简单地配置为模拟模式,与其他模拟外设没有任何关联。
一般来说,STM32的GPIO输入状态分为三类,模拟状态是GPIO输入模式之一。
1.输入[上推/下拉]进行上拉/下拉
2.浮动空并输入[浮动输入]
3.模拟状态[模拟]
前1和前2种输入模式的GPIO功能框图如下:
此时,输出缓冲器被禁用;图中施密特触发器已启用;输入输出引脚的数据被采样到数据输入寄存器,可以读取。上拉/下拉电阻可以根据需要开启或关闭。当同时禁用上拉和下拉电阻时,实现浮动空输入模式。
使用STM32芯片,复位后GPIO默认处于浮动空输入状态。对于未使用的GPIO,不建议将GPIO置于浮点空输入模式。施密特触发器在没有外部信号时,往往会随机进行电平翻转跳变,带来噪声,增加芯片功耗。同时,浮动引脚空对外部噪声或干扰非常敏感,对静电放电极为不利。
以上是浮动空输入和下拉输入的框图和特点,GPIO模拟模式的功能框图如下:
这种模拟模式的GPIO状态与上述可配置上拉和下拉输入的GPIO状态之间主要有两个明显的区别:
1.施密特触发器关断,触发器输出始终为0。
2.内部上拉和下拉电阻关闭。
关闭此施密特触发器,取消GPIO的数字输入功能。如果此时读取输入数据寄存器的值,结果将始终为0。随着施密特触发器的关闭,上述电平跳变噪声及其引起的相应额外功耗将消失。
换句话说,当GPIO的状态从浮地空或上拉下拉输入状态变为模拟状态时,施密特触发器引起的噪声被消除,芯片的动态功耗由于其关断而降低。
另外,GPIO_Analog状态配置的GPIO属于高阻抗状态,也有利于保持模拟信号的真实性。
至此,基本可以消除当初的疑惑了。GPIO可以配置为某些模拟外设的复用引脚,比如ADC、ADC、DAC的复用功能引脚,但也可以不是模拟外设的任何复用引脚,只是配置在模拟模式。比如那些不用的引脚,我们可以配置成GPIO_Analog状态。应用过低功耗STM32芯片的人可能会在官方ST例程中发现,在进入低功耗模式之前,相应的不带外设的GPIO配置为模拟状态。
====================
1.《analog 基于CubeMx管脚配置时的ADC_IN与GPIO_Analog选项话题》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《analog 基于CubeMx管脚配置时的ADC_IN与GPIO_Analog选项话题》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1172130.html