一文弄懂GPIO不同模式之间的区别与实现原理
GPIO全称 General Purpose Input Output ,即通用输入/输出。其实GPIO 的本质就是芯片的一个引脚,通常在ARM 中所有的I/O 都是通用的。不过,由于每个开发板上都会设计不同的外围电路,这就造成了GPIO 的功能可能有所不同。大部分GPIO 都是有复用功能的,比如有些GPIO 可能是串口的TX 或RX ,也可能是I2C 的SCL 或SDA 线。
所以,我们不仅要知道GPIO能够输出高低电平,还要理解为什么有些GPIO可以复用某些功能,而其他的不可以。
一、GPIO内部结构
我们在使用GPIO的时候,可能不会去想为什么通过写代码或者操作寄存器就可以控制一个引脚的高低电平。
今天就让我们一起来看看,为什么通过操作寄存器(其实写代码的过程就是在操作寄存器)就能控制引脚输入或者输出。
我们想要想控制一个GPIO口的需要操作7个寄存器,分别是 CRL,CRH,IDR,ODR,BRR,BSRR,LCKR 我们对GPIO的操作本质上就是在对这些寄存器进行读写操作,以下是这些寄存器的名称:GPIOx_CRL(x = A..E)端口配置低寄存器 32位寄存器 GPIOx_CRH(x = A..E)端口配置高寄存器 32位寄存器 GPIOx_IDR(x = A..E)端口输入数据寄存器 32位寄存器但仅用低16位 GPIOx_ODR(x = A..E)端口输出数据寄存器 32位寄存器但仅用低16位 GPIOx_BRR(x = A..E)端口位清除寄存器 16位寄存器 GPIOx_BSRR(x = A..E)端口位设置/清除寄存器 16位寄存器 GPIOx_LCKR(x = A..E)端口配置锁定寄存器 32位寄存器
首先,我们分析一下上面的结构电路。
1、保护二极管
保护二极管从它的名字就不难想到他是用来对系统进行保护的,通过两个二极管的导通可以防止引脚外部输入电压过低或过高。当电压过高时,上方的保护二极管导通。当电压过低时,下方的二极管导通,防止不正常电压导入到芯片内部造成芯片烧毁。
2、P·MOS管和N·MOS管
GPIO经过两个二极管的保护后向上流入输入模式,向下流入输出模式,而输出模式的控制是由一个由 P·MOS管和N·MOS管 组成的单元电路,该电路主要是控制输出的模式,由该结构狗策划给你的单元电路具有推挽输出 和开漏输出 两种模式。
当系统配置为推挽输出模式时: 若向该结构中输入高电平,经过反向后,上方的 P-MOS 导通,下方的N-MOS 关闭,对外输出高电平;若向该结构中输入低电平时,经过反向后,下方的 N-MOS 管导通,上方的P-MOS 关闭,对外输出低电平。当引脚高低电平切换时,两个 MOS 管轮流导通,P 管负责灌电流,N 管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。**推挽输出的低电平为0V ,高电平为3.3V **。
当系统配置为开漏输出模式时: 上方的P-MOS管完全不工作; 如果我们控制输出为0,低电平,则 P-MOS 管关闭,N-MOS 管导通,使输出接地;若控制输出为 1 (它无法直接输出高电平)时,则P-MOS 管和N-MOS 管都关闭,所以开漏输出模式下引脚既不输出高电平,也不输出低电平,为高阻态 。
推挽输出模式 一般应用在输出电平为0和3.3V而且需要 高速切换开关状态的场合 。 开漏输出模式 一般应用在I2C、SMBUS通信等需要 线与 功能的总线电路中。
在单片机中除了必须用开漏模式的场合,一般习惯使用推挽输出模式。
3、输出数据寄存器
前面我们知道双了 MOS 管结构电路的输入信号,是由GPIO 输出数据寄存器GPIOx_ODR 提供的,因此我们可以通过修改输出数据寄存器的值,就可以修改GPIO 引脚的输出电平。而置位/复位寄存器GPIOx_BSRR 可以通过修改输出数据寄存器的值,从而影响电路的输出。
4、复用功能输出
复用功能输出中的 复用 是指STM32 的其他片上外设对GPIO 引脚进行控制,此时GPIO 引脚用作该外设功能的一部分,算是第二用途。从其他外设引出来的复用功能输出信号与GPIO 本身的数据寄存器都连接到双MOS 管结构的输入中。二、输入输出模式
GPIO共有8中输入输出模式,分别是: 上拉输入、下拉输入、浮空输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出 ,下面我们详细介绍以下上面的八种输入输出模式。上拉输入: GPIO_Mode_IPU 下拉输入: GPIO_Mode_IPD 浮空输入: GPIO_Mode_IN_FLOATING 模拟输入: GPIO_Mode_AIN 开漏输出: GPIO_Mode_Out_OD 推挽输出: GPIO_Mode_Out_PP 开漏复用: GPIO_Mode_AF_OD 推完复用: GPIO_Mode_AF_PP
下面,详细讲一下几个常用的模式。
1、浮空输入
浮空输入模式下, I/O 端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的,通常用于IIC 、USART 等总线设备上。
2、上拉输入模式
上拉输入模式下, I/O 端口的电平信号直接进入输入数据寄存器。但是在I/O 端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(并且在I/O 端口输入为低电平的时候,输入端的电平也是低电平)。
3、下拉输入模式
下拉输入模式下, I/O 端口的电平信号直接进入输入数据寄存器。但是在I/O 端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。
4、模拟输入模式
模拟输入模式下, I/O 端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC 模块等。
5、开漏输出模式
见上面二中的详细介绍。 6、开漏复用输出模式
开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的,一般用于片内外设功能: TX1,MOSI,MISO,SCK,SS 。 7、推挽输出模式
见上面二中的详细介绍。 8、推挽复用输出模式
推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的,常见采用推挽输出模式的一般为片内外设功能 IIC 的SCL 、SDL 。
三、开漏输出和推挽输出的区别
开漏输出和推挽输出模式的区别主要是开漏输出 只可以输出强低电平,高电平得靠外部电阻拉高 。输出端相当于三极管的集电极,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);推挽输出 可以输出强高、低电平 ,连接数字器件。
四、STM32中GPIO的配置
在固件库开发中,操作寄存器 CRH 和 CRL 来配置 IO 口的模式和速度是通过 GPIO 初始化函数完成:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); /*第一个参数是用来指定 GPIO,取值范围为 GPIOA~GPIOG。 *第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef */
初始化 GPIO 的常用格式是: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-- PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz GPIO_Init(GPIOB, GPIO_InitStructure);//根据设定参数配置 GPIO
IO 口速度设置有三个可选值:typedef enum { GPIO_Speed_10MHz, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef;
模式则有8个可选定义如下: typedef enum { GPIO_Mode_AIN = 0x0, //模拟输入 GPIO_Mode_IN_FLOATING = 0x04, //浮空输入 GPIO_Mode_IPD = 0x28, //下拉输入 GPIO_Mode_IPU = 0x48, //上拉输入 GPIO_Mode_Out_OD = 0x14, //开漏输出 GPIO_Mode_Out_PP = 0x10, //通用推挽输出 GPIO_Mode_AF_OD = 0x1C, //复用开漏输出 GPIO_Mode_AF_PP = 0x18 //复用推挽 }GPIOMode_TypeDef; 五、总结
今天主要介绍了GPIO的定义,以及GPIO不同模式之间的区别与实现方式。相信看完本文,你会对GPIO有一个更深的理解。
如果是做软件的小伙伴,可以不用太关注于GPIO是如何实现的,但是需要知道每个模式下GPIO的特点和应用场合。只有这样,我们在实际应用中才能更好的配置出最合适的那个。
END 文章链接:https://mp.weixin.qq.com/s/qHZPtQBXfwpp8GraAqnpEg
转载自:嵌入式微处理器
文章来源:嵌入式悦翔园 ,作者JamesBin
文章链接:一文弄懂GPIO不同模式之间的区别与实现原理
版权申明:本文来源于网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
评论当好三员助力湘商回归吴刚华随着稳增长20条的发布,推动湘商回归这项重要工作,也成为优化营商环境推动招商引资促进区域经济发展的重要保证。春节以来,全省各地都在全力当好湘商回归的护航员引导员服务员,并把之
StockSplit拆股2月财经新势力记得很早以前,牛群和冯巩有个相声。牛群点子多,冯巩就问牛群有什么好点子可以帮大伙致富,让钱包快速鼓起来。牛群说换成零钱。这就是拆股。既然拆股没啥实际意义,为什么很多公
通胀重返视野,全球资产定价之锚又要起舞了?投资者正在为即将公布的关键通胀数据做好准备工作,这些数据可能会加剧全球债券市场的暴跌趋势。美国劳工部本周二将公布美国CPI数据报告,经济学家普遍预计1月消费者价格指数将出现三个月来
七一文学最是书香能致远我的童年时光在乡村度过。70后的农村生活,物质的贫乏是难以忘记的。在那个勉强能吃饱肚子的年代,我家却有些乡邻所没有的书籍,这是我们和别人最大的不同。那时生活虽然清贫,但是夜晚一家人
大S具俊晔情人节泄亲密私照,网友别再刺激平头汪小菲大S具俊晔去年3月宣布闪婚,但经纪人透露结婚日期是以在韩国登记的2月8日为准,今(14日)逢情人节,又是大S具俊晔结婚1周年,稍早微博突流出夫妻俩私下甜蜜照片,可见大S在后面熊抱揽
起床号没有那么多天赋异禀,优秀的人总是努力翻山越岭小火伴们,大家好!今天是2月14日,农历正月二十四,星期二。没有那么多天赋异禀,优秀的人总是努力翻山越岭。一首歌曲战士与祖国送给大家。战士与祖国作词陈道斌吕行作曲吕行演唱吕行如果有
2月13日机构推荐51只个股e公司数据统计发现,昨日共有51只个股获得机构给予买入或增持等看好评级,其中,获看好个股数量居前的行业是医药生物汽车机械设备,分别为5只5只4只。5只个股在近期被机构集中推荐,近5
毛主席2次为刘胡兰题词,却拒绝给董存瑞题词?主席我不合适!题词的事有眉目了吗,毛主席还是没给董存瑞烈士题词吗?中央没给消息,让我再等等。冀兴坡是负责扩建董存瑞烈士陵园的负责人,这是他第三次向中央请示希望毛主席能为董存瑞烈士题词,可惜依然是
代表委员履职故事建议都从调研中来代表委员履职故事原标题建议都从调研中来工人日报中工网记者卢越自从当选为第十三届全国人大代表,大庆油田第四采油厂第一作业区资料班资料员孙雨飞这些年一直在琢磨如何更好地培养企业高技能人
如何推动产业融合实现传统制造业高质量发展?深圳市政协委员建言献策深圳以实体经济为本,坚持制造业当家。据悉,深圳制造业占GDP比重超过30共有专精特新企业3842家,其中以制造业最多,达3051家。而深圳制造业构建的良好产业生态链,正为这座全球先
联合国最新提案俄立即完全无条件从乌克兰国际公认边界撤军在俄罗斯对乌克兰实施军事行动一周年之际,国际上支持乌克兰的国家再次发声,他们起草了一份决议草案,准备在联合国大会上进行投票表决,以确保乌克兰的主权独立国家统一以及领土完整。据联合国