今晚对STM32的GPIO相关知识做了个了解,遇到了一个问题,自己的理解和文档里面叙述的刚好相反,绕不出来,特来此地求赐教。
先贴出下面两段文字:(图片分别是GPIO配置为通用输入模式和输出模式的结构图,也是STM32参考手册的P107和P108)
当IO配置为输入模式时:1、输出缓存器被禁止;2、斯密特触发器输入被激活;3、根据输入配置位,选择上拉还是下拉(都是弱的);4、出现在
IO脚上的数据在每个APB2时钟采样到输入数据寄存器中;5、对输入数据寄存器的读访问可以得到
IO的状态;当IO配置为输出模式: 1、输出缓存器被激活;1.1
、开漏模式:输出0 N-MOS激活,输出1将端口置高阻态(P-MOS从未激活过);1.2
、推挽模式:输出0 N-MOS激活,输出1 P-MOS激活;2、斯密特触发输入被激活;3、弱上下拉被禁止;4、出现在
IO端口上的数据在每个APB2时钟采样到输入数据寄存器;5、在开漏模式下,对输入数据寄存器的访问可以得到
IO口的状态;6、在推挽模式下,对输出数据寄存器的读访问可以得到最后一次写的值;
不解之处:就是输出模式下的第5和第6点,上面的文字是STM32手册上的原话,
我理解正好和这个相反。在开漏模式下,输出寄存器输出“1”会将端口高阻(前提是端口没有上下拉电阻)
,然后在此模式下每个APB2时钟下被采样到输入数据寄存器就会出现不定值(1或者0),因为端口有可能是高阻态,
所以我觉得输出开漏模式下去读取输入数据寄存器是不可取的。相反在推挽式的输出模式,端口上的电平是确定的,
因此采样进输入数据寄存器的数据就是可靠的。既然这样文档中的5和6点不是反了么,权威的文档是不容置疑的,不知道我哪里理解错了
还望大虾指点,独孤学STM32有点小痛苦,期待热心人士指点
[
本帖最后由 yurl09mail 于 2012-11-5 00:08 编辑 ]
此帖出自
小平头技术问答
ALIENTEK STM32交流高群17
最后一封信(975553987) 0:10:51
我感觉没有问题啊!正式因为开漏模式,输出高阻态,所以IO口状态由相连接的外部设备决定,读取输入寄存器,就是IO口状态的
Ψ=Σ2πω<rongliang.yu@foxmail.com> 0:17:19
嗯 你这么说也对
Ψ=Σ2πω<rongliang.yu@foxmail.com> 0:17:52
但是 若果接的外设 是输入,一般芯片的输入不都是高阻态的么?
一周热门 更多>