打印

香版,一个datasheet上的问题

[复制链接]
4097|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ShakaLeo|  楼主 | 2010-3-5 15:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32的参考手册上,GPIO部分描述配置为输出的性能时,有这么一句:“A read access to the Output Data register gets the last written value in Push-Pull mode” 。这句话是否是说不管当前是开漏方式还是推挽方式,读 output data register寄存器得到的都是上次在配置为推挽方式时写入的值?
沙发
香水城| | 2010-3-5 16:10 | 只看该作者
不是上一次的,是最后一次的数值。

使用特权

评论回复
板凳
ShakaLeo|  楼主 | 2010-3-5 18:43 | 只看该作者
香版好像没仔细看哦,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之前的事。

使用特权

评论回复
地板
zwll| | 2010-3-5 19:21 | 只看该作者
没看明白……

使用特权

评论回复
5
yybj| | 2010-3-5 20:48 | 只看该作者
逻辑是有点不容易理清楚

使用特权

评论回复
6
香水城| | 2010-3-5 20:50 | 只看该作者
本帖最后由 香水城 于 2010-3-5 20:52 编辑

last = 最后
前一次 = previous


in Push-Pull mode 是修饰动词 get;不是修饰名词 value。

使用特权

评论回复
7
ShakaLeo|  楼主 | 2010-3-5 20:54 | 只看该作者
看来我确实没说明白,香版主已经开始给我讲解英语了。
A read access to the Output Data register gets the last written value in Push-Pull mode
如果配置为开漏输出,而不是推挽(Push-Pull mode),那么读出的Output Data register值是什么?

使用特权

评论回复
8
ShakaLeo|  楼主 | 2010-3-5 21:03 | 只看该作者
看到了6楼的修改。
可是手册上没写有关“A read access to the Output Data register gets ...... in Open-drain mode”的内容。

使用特权

评论回复
9
秋天落叶| | 2010-3-5 21:23 | 只看该作者
香主的英语语法也很强呀,解释的这么清楚

使用特权

评论回复
10
香水城| | 2010-3-5 21:31 | 只看该作者
看到了6楼的修改。
可是手册上没写有关“A read access to the Output Data register gets ...... in Open-drain mode”的内容。
ShakaLeo 发表于 2010-3-5 21:03


手册上是没有说这件事。

不知道楼主问这些的意图是什么?如果有实际意义,也许我能告诉你该怎么做。

使用特权

评论回复
11
ShakaLeo|  楼主 | 2010-3-5 22:55 | 只看该作者
意图就是不做实验,而知道“A read access to the Output Data register gets ...... in Open-drain mode”。

使用特权

评论回复
12
QuakeGod| | 2010-3-6 03:02 | 只看该作者
(A read access to the Output Data register (gets the last written value)) in Push-Pull mode

使用特权

评论回复
13
香水城| | 2010-3-6 10:51 | 只看该作者
意图就是不做实验,而知道“A read access to the Output Data register gets ...... in Open-drain mode”。
ShakaLeo 发表于 2010-3-5 22:55


我是问有什么实际意义,即为什么要读出这个寄存器?

使用特权

评论回复
14
ShakaLeo|  楼主 | 2010-3-6 12:25 | 只看该作者
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得到的是什么值,所以提问。

使用特权

评论回复
15
sinadz| | 2010-3-6 16:48 | 只看该作者
说的很清楚,香主有必要说一下方法

使用特权

评论回复
16
zdx818| | 2010-3-8 12:44 | 只看该作者
8.1.8 输出配置当I/O端口被配置为输出时:
● 输出缓冲器被激活
─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。
─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。


我认为中文版说的够清楚了

使用特权

评论回复
17
ShakaLeo|  楼主 | 2010-3-8 14:46 | 只看该作者
楼上认为中文版说的够清楚了,麻烦您告诉我一下,从中文手册中能看出“在开漏模式时,对输出数据寄存器的读访问”能够得到什么值吗?

使用特权

评论回复
18
IJK| | 2010-3-8 16:02 | 只看该作者
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态

这当然是对的。

另外,在推挽式模式时,对输入数据寄存器的读访问也可得到I/O状态;正常情况下,输入数据寄存器读到的I/O状态就是用户要输出的状态;非正常情况下,输入数据寄存器读到的I/O状态可能不是用户要输出的状态-比如用户想输出高电平,但线上发生异常,其它设备对该线输出低电平,多数情况下拉比上拉强,线上的电平一般会被拉成低电平。

使用特权

评论回复
19
IJK| | 2010-3-8 16:04 | 只看该作者
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。

是的。在在开漏模式时,当然也一样:对输出数据寄存器的读访问得到最后一次写的值。

其实,多数单片机或DSP都是这么做的。

使用特权

评论回复
20
xsgy123| | 2010-3-8 21:18 | 只看该作者
开漏模式和推挽模式在硬件实现上的区别在哪里

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

608

帖子

3

粉丝