历史上的今天
今天是:2025年01月30日(星期四)
2019年01月30日 | STM32 GPIO模式总结
2019-01-30 来源:eefocus
GPIO的8种工作方式
4种输入模式
浮空输入
上拉输入
下拉输入
模拟输入
4种输出模式
开漏输出
复用开漏输出
推挽输出
复用推挽输出
3种最大输出速度
2MHz
10MHz
50MHz
浮空输入模式
1) 外部通过IO口输入电平,外部电平通过上下拉部分(浮空模式下都关闭,既无
上拉也无下拉电阻)
2) 传输到施密特触发器(此时施密特触发器为打开状态)
施密特触发器作用:
1. 波形变换 可将三角波、正弦波等变成矩形波。
2. 脉冲波的整形 数字系统中,矩形脉冲在传输中经常发生波形畸变,出现上升沿和下降沿不理想的情况,可用施密特触发器整形后,获得较理想的矩形脉冲。
3. 脉冲鉴幅 幅度不同、不规则的脉冲信号施加到施密特触发器的输入端时,能选择幅度大于欲设值的脉冲信号进行输出。
3) 继续传输到输入数据寄存器IDR
4) CPU通过读输入数据寄存器IDR实现读取外部输入电平值
5) 在输入浮空模式下可以读取外部输入电平
6) 由于浮空输入一般多用于外部按键输入,有的理解为,浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。
上拉输入模式
在没有信号输入的时候,上拉电阻能使读取input值保持为高,而下拉电阻正是相反。有些传感器等元气件,他们的信号输出有效时候会输出一个高电平(或者低电平),无效时候不输出,为开路。此时我们就必须用上拉电阻(或下拉电阻)。I2S时下拉输入,其它都是上拉输入。
和输入浮空模式相比较,不同之处在于内部有一个上拉电阻连接到VDD(输入上拉模式下,上拉电阻开关接通,阻值约30-50K)。
外部输入通过上拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取。
输入下拉模式
和输入浮空模式相比较,不同之处在于内部有一个下拉电阻连接到VSS(输入下拉模式下,下拉电阻开关接通,阻值约30-50K)
外部输入通过下拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取
输入模拟模式
1.上拉和下拉部分均为关闭状态(AD转换-模拟量转换为数字量)
2.施密特触发器为截止状态
3.通过模拟输入通道输入到CPU
4.IO口外部电压为模拟量(电压形式非电平形式),作为模拟输入范围一般为0~3.3V
开漏输出模式
1,CPU写入 位设置/清除寄存器BSRR,映射到输出数据寄存器ODR
2,连通到输出控制电路(也就是ODR的电平)
3,ODR电平通过输出控制电路进入N-MOS管
-ODR输出1:
N-MOS截止,IO端口电平不会由ODR输出决定,而由外部上拉/下拉决定
在输出状态下,输出的电平可以被读取,数据存入输入数据寄存器,由CPU读取,实现CPU读取输出电平。
所以,当N-MOS截止时,如果读取到输出电平为1,不一定是我们输出的1,有可能是外部上拉产生的1。
-ODR输出0:
N-MOS开启,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平
此时输出的低电平同样可以被CPU读取到。
开漏复用输出模式
与开漏输出模式唯一的区别在于输出控制电路之前电平的来源
开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的
开漏推挽输出模式的输出电平是由复用功能外设输出决定的
其他与开漏输出模式相似:
控制电路输出为1:N-MOS截止,IO口电平由外部上拉/下拉决定
控制电路输出为0:N-MOS开启,IO口输出低电平
推挽输出模式
与开漏输出相比较:
输出控制寄存器部分相同
输出驱动器部分加入了P-MOS管部分
当输出控制电路输出1时:
P-MOS管导通N-MOS管截止,被上拉到高电平,IO口输出为高电平1
当输出控制电路输出0时:
P-MOS管截止N-MOS管导通,被下拉到低电平,IO口输出为低电平0
同时IO口输出的电平可以通过输入电路读取
复用推挽输出模式
与推挽输出模式唯一的区别在于输出控制电路之前电平的来源
开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的
开漏推挽输出模式的输出电平是由复用功能外设输出决定的
推挽输出:
可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
详细理解:
推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
推挽输出和开漏输出的区别:
推挽输出:可以输出强高/强低电平,可以连接数字器件
开漏输出:只能输出强低电平(高电平需要依靠外部上拉电子拉高),适合做电流型驱动,吸收电流能力较强(20ma之内)在STM32中选用IO模式设置推挽模式,只能是输出模式,而输出高低电平的驱动电流都很大。即可作为输出,也可作为输入。作输出时,要输出高电平,需要外加上拉电阻。作输入时,要求处理高电平状态,才能读外部引脚。
GPIO配置情况
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2) 带上拉输入_IPU——IO内部上拉电阻输入
(3) 带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5) 开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
上一篇:STM32F429之GPIO使用
下一篇:stm32-点亮led,流水灯
史海拾趣
|
第1讲:电容的特性(隔直通交) 电容器是一种能储存电荷的容器.它是由两片靠得较近的金属片,中间再隔以绝缘物质而组成的.按绝缘材料不同,可制成各种各样的电容器.如:云母.瓷介.纸介,电解电容器等.在构造上,又分 ...… 查看全部问答> |
|
在实际工程中,选用何种传输方式需要结合工程的具体情况和工程预算来综合考虑。对于传输距离超过2Km的监控网络,应该考虑选用光纤和光端机。如果传输距离达到数公里或者几十公里,就只有使用光纤了。另外,在一些干扰很强的场合,比如受到工业干扰 ...… 查看全部问答> |
|
CE printf不能用咋办啊??CE 提示建议使用StringCchVPrintfA函数?? 最近移植个库,库以前是在PC上编译的,都是用多字节的printf,在CE下报错, 情况如下: error C2065: \'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA\' : undeclared identifier 然后我就按它的提示使用StringCchPrintfA; 定义了 ...… 查看全部问答> |
|
高分征解:初学者学FPGA应该遵循什么样的路线,注意些什么? 在这方面是个文盲,买了块Altera Cyclone II 的开发板,想由简单的开始学习一些模块,但我对开发SOC很感兴趣,未来也有这种需求。需要的模块至少有:简单的CPU,中断控制器(2个中断就行了),定时器/计数器,PWM输出,简单的URAT,简 ...… 查看全部问答> |
|
我使用2440+wince5.0的平台,显示器的分辨率为800*480,我在对话框中使用一个800*480的256色的bmp文件作为对话框的背景图片,在OnPaint函数中将背景图片贴上,代码如下: void CMainMenuDlg::OnPaint() { & ...… 查看全部问答> |
|
按开机电源启动不了,要再按重启或者再按几次电源键才能启动 机子去年十一配的,原来也有类似问题,后来换了一个电源就没这种情况了,现在又出现这种情况,难道又是电源问题?哪位达人帮解决一下~… 查看全部问答> |
|
这个问题非常基础但是有几个地方不是很明白: 在画原理图时,大部分需要自己画芯片,一些主要的芯片,库里面总是没有 在画芯片时,关于芯片引脚习惯上都是定义成什么? 我看芯片引脚有:3 state、Bidirectional 、 Input 、Open Collector &nbs ...… 查看全部问答> |
|
如题 用1w月薪聘请Linux内核专家的公司多不多? 成为Linux内核具备的条件是什么? 1、精通内核移植、裁剪和优化 2、精通一个领域的ARM驱动开发(比如说VOIP) 符合这两个条件够不够?要不要懂编译器的编写等知识?… 查看全部问答> |
|
在FPGA中遇到的一个奇怪的问题!我在Stratix II GX 中要实现这样一个功能:用20M时钟采集120路数据,然后将这些数据组成每字节10bit,每11字节一帧的数据,其中包括一个帧头。这帧数据每字节速率是260M(因为加了10位的帧头),通过一个GXB将这帧数据 ...… 查看全部问答> |
|
如果我给串口调试助手发送一个字符串“zhangkai”,如果勾上16进制显示,是不是就是串口调试助手把字符串转换为7A 68 61 6E 67 6B 61 69这个了? 在串口调试助手给单片机发数据时,如果选上16进制发送和不选16进制发送有啥区别?发送区填 ...… 查看全部问答> |




