野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13551|回复: 10

求教:利用I2C对一个外设设备进行读写设置疑问

[复制链接]
发表于 2016-1-23 13:09:46 | 显示全部楼层 |阅读模式
本帖最后由 探索者丸丸号 于 2016-1-23 13:40 编辑

利用I2C对一个外设设备进行读写时,对PB7—SDA线设置为复用开漏输出模式,我想应该是对应着往外设设备写入;但还有对应的从外设设备读入数据呢,为什么没有将PB7相应的设置成输入模式?

只设置输出,那输入怎么办

只设置输出,那输入怎么办
回复

使用道具 举报

发表于 2016-1-23 13:44:07 | 显示全部楼层
设置成开漏就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 17:16:42 | 显示全部楼层
flyleaf 发表于 2016-1-23 13:44
设置成开漏就可以了

用MMA7455时, 在开发板上可以用,但程序移植到另外一块最小系统板上,老是退不出ev6事件监测。都是zet6型号,把MMA7455地址改为0x3a或0x1d也不行,不知道怎么回事????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 17:18:34 | 显示全部楼层
探索者丸丸号 发表于 2016-1-23 17:16
用MMA7455时, 在开发板上可以用,但程序移植到另外一块最小系统板上,老是退不出ev6事件监测。都是zet6 ...

也没有用到重央射,都是原来管脚
回复 支持 反对

使用道具 举报

发表于 2016-1-23 17:22:50 | 显示全部楼层
探索者丸丸号 发表于 2016-1-23 17:18
也没有用到重央射,都是原来管脚

硬件I2C部分引脚会受其它设备影响,不行就用软件I2C
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 17:47:45 | 显示全部楼层
终于解决了:自己焊了一个上拉电阻模块,然后拼接到最小系统板里面。原来是最小系统板的pb6与pb7都没接上拉电阻(是不是最小系统板这些引脚的上拉电阻是否有接,不同生产商是不同的???):
想问一下我这样总结可以吗?::
::(1)因为MMA7455需要i2C能够写入与读出数据,所以需要双向IO,而在gpio的初始化时,只对io模式初始化一次,(避免输入初始化一次,读出初始化一次)而复用开漏输出模式可以满足双向IO的要求,所以模式设置为开漏。
      (2)而因为是开漏模式,所以它的高电平输出为高阻态,为使输出为正常高电平,必须在引脚加入上拉电阻,以提供高电平输出;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 17:48:33 | 显示全部楼层
flyleaf 发表于 2016-1-23 17:22
硬件I2C部分引脚会受其它设备影响,不行就用软件I2C

大神可以看下我下面的总结是否是正确吗?
回复 支持 反对

使用道具 举报

发表于 2016-1-23 18:42:52 | 显示全部楼层
探索者丸丸号 发表于 2016-1-23 17:47
终于解决了:自己焊了一个上拉电阻模块,然后拼接到最小系统板里面。原来是最小系统板的pb6与pb7都没接上拉 ...

1-有一个你要知道的是:GPIO在输出的时候,我们都可以通过读取输入数据寄存器IDR来获取GPIO输出的状态,当I2C读外部数据的时候,SDA总线上的电平是由MMA7455这样的从设备控制的,所以STM32可以通过读取IDR寄存器的值来获取SDA线上的状态,并不需要再设置成输入。

2- I2C的时候,引脚必须设置成开漏模式,接上拉电阻并不是你说的为了方便输出高电平,而是开漏模式根本输出不了高电平,需要由外部电源接个上拉电阻来决定
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 19:11:20 | 显示全部楼层
fire 发表于 2016-1-23 18:42
1-有一个你要知道的是:GPIO在输出的时候,我们都可以通过读取输入数据寄存器IDR来获取GPIO输出的状态, ...

谢谢fire哥大神,又学到东西。刚才查了参考手册,里面确实有这句话  
    ”当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。“     
我从库函数入门,确实寄存器的参考手册,只是有时候查查,知识掌握的不踏实。谢谢fire哥大神
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-23 22:43:19 | 显示全部楼层
本帖最后由 探索者丸丸号 于 2016-1-24 18:52 编辑
fire 发表于 2016-1-23 18:42
1-有一个你要知道的是:GPIO在输出的时候,我们都可以通过读取输入数据寄存器IDR来获取GPIO输出的状态, ...

大神,           我又遇到新问题,查了好多资料都没头绪。就是我用串口调试助手(PC)向USart1发送数据程序可以进入中断,但假如用蓝牙代替调试助手发送数据(PA10,PA9),就怎么也无法进入中断,这是怎么回事?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-25 17:51:05 | 显示全部楼层
探索者丸丸号 发表于 2016-1-23 22:43
大神,           我又遇到新问题,查了好多资料都没头绪。就是我用串口调试助手(PC)向USart1发送数据程 ...

发现两蓝牙模块间匹配时,其各自供电电平要尽量一致,不然蓝牙间的信息传输成功率会受影响
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 13:07 , Processed in 0.052805 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表