1.保护二极管电路

在一般的GPIO的电路中都会有这样一个保护电路,但是重点在于其实在IO引脚这一块其实是有一个电阻的,这个电阻起到了分压的作用,把电压钳制在-0.7V到4V之间(默认二极管导通压降0.7V),而一般的GPIO中这个电阻是没有的,这样其实是很难让人理解的。

2.驱动电路

2.1输入部分的驱动电路

首先是一组上下拉电阻,这一块的作用可不是提供电流以驱动电路哦,而是使得在输入模式下的IO引脚的电平是确定的,对应所谓上拉输入和下拉输入,而两个都不接的时候就对应所谓浮空输入和模拟输入,这个时候,引脚的状态在默认状态下是不受控制的,一般情况下不推荐设置浮空。接下来就是一个施密特触发器,其作用在于把模拟信号变为数字信号(更简单粗暴的讲就是把本来原来连绵的电平变成方波而已)(PS这个应该是相当于自控里的带通滤波器吧)。仔细看输出对接的三个输出:一个是在没滤波前进入了ADC中,用于之后的信号处理。另外一个是直接把数据写入寄存器中,显而易见的是在对应的GPIOx_IDR寄存器中每一个引脚就对应了其中的一位。

另外还有一种复用功能输入,所谓复用就是我还是用这个IO口,但是IO口只是起接受数据作用,这些数据会被其他外设TIM等“抢走”,有种卸磨杀驴的感觉。

2.2输出驱动部分

这一块顾名思义是用于驱动外部设备的,所以要给大电流才好。而从芯片中流出的电流少的可怜,所以要加此驱动电路,这一块是经典的CMOS电路。通过控制两个MOS的开关组合成,

1.上开下闭 输出高电平

2.上闭下开 输出低电平

3.双闭 输出高阻态

4.双开(MOS击毁)

其中1和2组合叫推挽输出

2和3组合叫开漏输出,4是不被允许的状态

这里面有一个大坑,其实输出里是有上下拉电阻的但是在拓扑图里是没有体现出来的,这一点真的很坑!因为CUBEMX里是要求配置上下拉的。这边我要说的推挽是强高电平,强低电平的,有强驱动力,所以上下拉不是刚需,求稳的话可以都不接,接的不好会有反效果。

而开漏中是强低电平和高阻态。其设计可以简单理解为就是为了I2C特意设计的,当高阻态的时候我们必须要配置上拉电阻,搭配形成一个弱上拉的效果,只有这样,才能满足I2C的通信效果!

3.补充

GPIO的通用功能已经介绍完全,此外还有的功能是外部中断,复用,功能重映射和锁定的功能。但由于其大部分的内容都是在其他外设上,所以暂时按下不表。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐