GPIO开漏输出模式读取输入数据寄存器是否可取

2019-03-23 16:45发布

今晚对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 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。