GPIO开漏输出模式读取输入数据寄存器是否可取
[复制链接]
今晚对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 编辑 ]
|