首页 > 其他分享 >关于32位MCU GPIO八种工作模式配置

关于32位MCU GPIO八种工作模式配置

时间:2023-10-25 15:16:23浏览次数:32  
标签:输出 信号 引脚 32 电平 IO GPIO MCU 输入

参考链接:https://mp.weixin.qq.com/s/vgYzCcxmsfn7BGWERHfITQ

通常,32位MCU的GPIO有多种配置方式,如STM32、CH32 MCU的GPIO引脚都有八种配置方式,总体可分为两类:输入和输出。其中:

输入可分为:

  • 浮空输入
  • 上拉输入
  • 下拉输入
  • 模拟输入

输出可分为

  • 开漏输出
  • 推挽输出
  • 复用开漏输出
  • 复用推挽输出

上图为MCU GPIO模块的基本结构框图。下面将结合具体实例及实际测试现象对这8种配置方式进行讲解测试。

 

1、浮空输入模式

当GPIO引脚配置为浮空输入模式时,外部电平信号通过IO引脚传输到施密特触发器(即图中TTL肖特基触发器)并最终进入输入数据寄存器,MCU通过读取输入数据寄存器获取外部电平信号。

注:若IO引脚浮空(即无外部电平信号接入IO引脚)时,MCU读取输入数据寄存器的值是不确定的,0和1都有可能。

现象体现:

  • IO引脚浮空时,读取输入电平信号可能为0,也可能为1
  • IO引脚接高电平时,读取输入电平信号为1
  • IO引脚接低电平时,读取输入电平信号为0

 

2、上拉输入模式

当GPIO引脚配置为上拉输入模式时,上拉电阻开关闭合,当IO引脚未接电平信号时,VDD(高电平信号)通过上拉电阻经过施密特触发器存入输入数据寄存器,因此未接电平信号时读取该IO引脚输入数据寄存器值为1。

现象体现:

  • IO引脚浮空时,读取输入电平信号为1
  • IO引脚接高电平时,读取输入电平信号为1
  • IO引脚接低电平时,读取输入电平信号为0

 

3、下拉输入模式

当GPIO引脚配置为下拉输入模式时,下拉电阻开关闭合,当IO引脚未接电平信号时,VSS(低电平信号)通过下拉电阻经过施密特触发器存入输入数据寄存器,因此未接电平信号时读取该IO引脚输入数据寄存器值为0。

现象体现:

  • IO引脚浮空时,读取输入电平信号为0
  • IO引脚接高电平时,读取输入电平信号为1
  • IO引脚接低电平时,读取输入电平信号为0

 

4、模拟输入模式

当GPIO引脚配置为模拟输入模式时,IO引脚信号直接通过模拟输入端进入片上外设模块,IO口外部电压信号为模拟量,非电平形式。通常配置ADC时GPIO引脚初始化配置为模拟输入模式。

 

5、开漏输出模式

当GPIO引脚配置为开漏输出模式时,通过设置 位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于截止状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于导通状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平,可通过直接读取该引脚确定输出电平信号GPIO_ReadInputDataBit()

现象体现:

当IO引脚配置输出高电平且接上拉电阻时,读该引脚信号一直为高电平信号1,如下图:

当IO引脚配置输出高电平且接下拉电阻或不接电平信号时,读该引脚信号一直为低电平信号0,如下图:

IO引脚配置输出低电平时,无论上拉还是下拉,输出信号一直为低电平信号,如下图:

 

6、推挽输出模式

当GPIO引脚配置为开漏输出模式时,推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。推挽电路采用两个参数相同的MOSFET管,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。当设置输出的值为为高电平时,P-MOS导通,N-MOS截止,此时I/O端口的电平就由P-MOS管决定为高电平;当设置输出的值为低电平的时候,P-MOS管处于截止状态,N-MOS管处于导通状态,此时I/O端口的电平就由N-MOS管决定为低电平,同时IO口输出的电平可以通过输入电路读取,此时I/O端口的电平一定是输出的电平。

现象体现:

当IO引脚配置输出高电平信号时,读该引脚信号一直为高电平信号1,此时可以通过直接读取该引脚输入数据寄存器获取输出电平信号,如下图:

IO引脚配置输出低电平时,输出信号一直为低电平信号0,此时可以通过直接读取该引脚输入数据寄存器获取输出电平信号,如下图:

  

7、复用开漏输出模式

当GPIO引脚配置为复用开漏输出模式时,与开漏输出模式唯一区别在于输出控制电平之前电平的来源,开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的,开漏复用输出模式的输出电平是由复用功能外设输出决定的。其他与开漏输出相似。控制电路输出高电平:N-MOS截止,IO口电平由外部上拉/下拉决定。控制电路输出低电平:N-MOS开启,IO口输出低电平。该模式通常用于配置IIC。

 

8、复用推挽输出模式

当GPIO引脚配置为开漏输出模式时,与推挽输出模式唯一区别在于输出控制电路之前电平的来源。开漏输出模式的输出电平是CPU写入输出数据寄存器的,推挽复用输出模式的输出电平是由复用功能外设输出决定的

标签:输出,信号,引脚,32,电平,IO,GPIO,MCU,输入
From: https://www.cnblogs.com/liaigu/p/17787234.html

相关文章

  • 导入失败!检索 COM 类工厂中 CLSID 为 {36D27C48-A1E8-11D3-BA55-00C04F72F325} 的组件
    出现以上错误,需要进行如下配置:一、配置project的DCOM权限1:在服务器上安装office的Project软件.2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"4:在"DCOM配置"中找到"Micro......
  • python win32com加密表格文件;加密目录下的所有表格文件
    需求背景:写一个工具,对指定路径下的所有Excel文件进行加密,设置打开密码和编辑密码实现思路:需要用python遍历指定目录下的所有文件,判断是否是EXCEl文件,还要判断文件是否原本就有密码,加密完成后将结果写入到文本文件代码:importosimporttkinterimporttkinter.filedialogfrom......
  • stm32性能评估(程序执行效率,中断最大速率)
    自从研究stm32以来,对mcu的运行速度一直没有一个明确的概念,困惑一直卡在这,很烦,最近有了一点心得,记录一下。stm32的官方数据为1.25MIPS/MHZ,即每秒执行的汇编指令数应该是主频的1.25倍。stm32f103 72M主频,所以一秒执行90M汇编指令,stm32H743480M主频,一秒的指令只会大于600M指令......
  • CH32F系列MCU固件中加入版本信息方法
    具体方法如下:1、新建一个.c文件,如banben.c 2、新建文件中加入以下信息,如下图#defineVERINFO_ADDR_BASE(0x0800F000)//存放FLASH的地址constcharSoftware_Ver[]__attribute__((at(VERINFO_ADDR_BASE+0x00)))="Software:1.0.0";constcharCompiler_Date[]_......
  • 安信可小安派【IO中断】基于AI-M6X MCU
    最近在研究小安派的中断。昨晚写了一个Demo来进行测试。关于什么是中断这里已经讲的很清楚了。首先贴上引用参考。第一个是泽哥写的中断:http://ai-thinker.com/forum.php?mod=viewthread&tid=562&highlight=%E4%B8%AD%E6%96%AD&_dsign=fe47e0a0复制代码这个是我自己写......
  • 关于STM32F407ZGT6的USB损坏后使用ST-Link和USART1实现串口功能
    开发板:STM32F407ZGT6;目标:想使用软件“串口调试助手”情况:开发板上的USB_UART口所在器件损坏或者直接没有;解决办法:查看该开发板的原理图,可得:串口1的RX接TXD,串口1的TX接RXD,那么按如下步骤操作:1、现在使用USB转TTL模块,将串口1的RX接USB转TTL模块的TXD,将串口1的TX接USB转TTL模块的R......
  • 华为S2326TP-EI交换机端口汇聚(划分vlan做汇聚)
    批量创建Vlan11-20,并将交换机端口1-10分别加入到Vlan中,设置为ass口,[Quidway]system-view     //进入配置视图[Quidway]sysnameSwitchA //给交换机命名[SwitchA]vlanbatch11to20     //同时创建vlan11到vlan20[SwitchA]interfaceethernet0/0/1......
  • 关于CH32V系列MCU浮点打印使用配置差异
    当程序中需要打印浮点数时,按照下图配置任意勾选一个即可打印浮点数: 当勾选第一个时,float打印会输出正确数值,具体如下: 当勾选第二个时,float打印输出数值如下(5.20会输出5.19),具体如下。 此时若需要输出正确数值5.20,将float类型改为double类型即可 产生该现象的原因:fl......
  • PC3221单节锂电池充电器芯片ESOP8封装高耐压输入
    特性输入耐压28V输出耐压15V输入过压保护7V短路保护高达1A可编程充电电流精度1%的4.2V预设充电终止电压防电池反接无需MOSFET、检测电阻或隔离二极管在无过热危险的情况下实现充电速率最大化的热调节功能ESOP8/DFN2x2-8/DFN2x3-8/DFN3x3-8封装符合RoHS标准描述PC3221是......
  • 关于CH32V系列MCU FLASH地址的分配
    来源:https://www.cnblogs.com/liaigu/p/17784283.html关于在MRS开发环境下,针对CH32V系列MCUFLASH分配,具体方法如下:比如开辟一段空间,存放数组等数据,首先在ld文件中修改FLASH分配,如下图:.consumer_flash1:{.=ALIGN(4);}AT>FLASH1.consumer......