在STM32的参考手册上,GPIO部分描述配置为输出的性能时,有这么一句:“A read access to the Output Data register gets the last written value in Push-Pull mode” 。这句话是否是说不管当前是开漏方式还是推挽方式,读 output data register寄存器得到的都是上次在配置为推挽方式时写入的值?
香版好像没仔细看哦,A read access to the Output Data register gets the last written value in Push-Pull mode,如果我现在把某个IO先配置为推挽输出,然后向Output Data register的相应位写1,再配置为开漏输出,之后向Output Data register的相应位写0,那么此时读取Output Data register的这一位是0还是1?按照手册上的意思,貌似读取的数值应该是1,gets the last written value in Push-Pull mode,最后一次在推挽模式写入的是1啊,而这是发生在配置为开漏输出然后写0之前的事。
看来我确实没说明白,香版主已经开始给我讲解英语了。
A read access to the Output Data register gets the last written value in Push-Pull mode
如果配置为开漏输出,而不是推挽(Push-Pull mode),那么读出的Output Data register值是什么?
IO配置为开漏输出,在片外在加一个上拉电阻上拉到VDD,应该和51单片机的准双向IO差不多,做输出时写入Output Data register的相应位来置0或置1,做输入时先把Output Data register 的相应位置1,再读IDR的相应位来判断引脚的输入值,所以在读取IDR之前,知道上次写入ODR的是0还是1有一定意义吧?如果是0,就先置1,如果是1就不用改了。你也许会说,不一定非得知道上次写入ODR的值,每次读IDR之前都把ODR的相应位置1就行了,的确这样也行。这是两种不同的方法,效果相同。因为手册上没有明确写出在开漏模式读ODR得到的是什么值,所以提问。