对GPIO电路的完全分析
本文分析了GPIO电路中保护二极管和驱动电路的设计原理。保护电路通过电阻分压将电压钳制在-0.7V-4V范围。输入驱动部分采用上下拉电阻确定电平状态,施密特触发器将模拟信号转换为数字信号。输出驱动采用CMOS电路,推挽输出提供强驱动能力,开漏输出需配合上拉电阻使用(如I2C通信)。文章特别指出电路图未标注但实际存在的上下拉电阻问题,并比较了不同输出模式的特性。此外还提及GPIO的扩展功能如外部中断
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的通用功能已经介绍完全,此外还有的功能是外部中断,复用,功能重映射和锁定的功能。但由于其大部分的内容都是在其他外设上,所以暂时按下不表。
更多推荐



所有评论(0)