搜索
bottom↓
回复: 13

调试STM32的I2C,总是进了while 循环出不来,可有谁调通过,给点意见咯,谢拉

[复制链接]

出0入0汤圆

发表于 2010-8-18 16:20:25 | 显示全部楼层 |阅读模式
我弄这个I2C已经快两天了,总是进了while 循环出不来(一般都是停在EV6这个状态的检测),我都快要崩溃了。

已经调试通过的大虾们,给点建议吧,谢谢拉

问题:
1.用AT24C16,将EEPROM_ADDRESS和I2C1_SLAVE_ADDRESS7均设为0xA0, 应该是没有问题噻,或者有什么要注意的吗?
2.是否存在某些新手容易被忽视的地方?

出0入0汤圆

发表于 2010-8-18 16:46:20 | 显示全部楼层
我现在用模拟的I2C

出0入0汤圆

发表于 2010-8-18 20:13:54 | 显示全部楼层
我也调了一天 那个官方例程 I2C 实在用得让人难受。
老是漏掉一个返回标志, 造成在那里死等标志位的情况。如果不死等,也是出错。
后面中断的,也只能接收一次,第二次接收不到,要么出错,有点难弄,没弄了 太浪费时间了。
我也改用模拟的了,一下子调试成功。读二个字节 在2MS左右的速度 还勉强能接受。

出0入0汤圆

 楼主| 发表于 2010-8-19 11:20:49 | 显示全部楼层
我还在调试。
发现这个I2C不稳定,有时候它能写,有时候又不行,同样的程序,不同的时间用,就有不同结果,我狂晕。
不过读一直都不行,总是停在EV7检测的地方,我很无奈。
调过的,在调的,大家讨论一下呀。成功的给点意见,指点迷津。

模拟的I2C,能否共享点资源,让大家参考以下咯。谢谢咯

出0入0汤圆

发表于 2010-8-19 12:01:47 | 显示全部楼层
STM32的硬件IIC是个鸡肋,早点不用早点爽.自己模拟一个很简单的.

出1070入962汤圆

发表于 2010-8-19 12:04:14 | 显示全部楼层
2.是否存在某些新手容易被忽视的地方?
-------------------------------------显然你忽略了在stm32的版面搜索一下相关话题和相关代码。

出0入0汤圆

 楼主| 发表于 2010-8-20 14:41:37 | 显示全部楼层
用库2.0,调试通过了。可是换成v3.3.0的,就不行了,只是库的不同,怎么就不行呢?

谁能帮忙解释一下呀,找出原因,谢谢拉

出0入0汤圆

 楼主| 发表于 2010-9-15 17:24:50 | 显示全部楼层
整理一下:

关于I2C,几周前已经调试完成,现在用的也是硬件的I2C,起初用的还可以(但是总有些不安,因为当初调试的时候,没改什么(只是将时钟在初始化时钟是就打开,以前是在初始化I2C时,才打开相关时钟),莫名其妙就好了),空闲时多方测试发现,通信过程中不被中断或者干扰的话,通信还是正常的,一旦有任何中断或者干扰什么的,I2C铁定会挂掉,就连复位都无法恢复,只能通过断电,再上电才能恢复,硬件还是有明显的缺陷呀。又或者,在开时钟这方面有什么要注意的吗? 有高手知道的,还请指教呀。

先用吧。

出0入0汤圆

发表于 2010-11-24 20:35:15 | 显示全部楼层
我用101c8好,换101cb停在EV5。。。。

出0入0汤圆

发表于 2010-11-26 09:25:07 | 显示全部楼层
只要开FSMC时钟,i2c的sda脚就被占用了。

简单的使用还是可以,如果要跟fsmc同用,硬件i2c就要重新映射到pb8、pb9脚才可用。

出0入0汤圆

发表于 2011-6-22 15:50:13 | 显示全部楼层
日ST官方,I2C,到现在也不好用,ST公司一直在装死中!!!
I2C_Init(u32 OutputClockFrequencyHz, u16 OwnAddress, I2C_DutyCycle_TypeDef DutyCycle, I2C_Ack_TypeDef Ack, I2C_AddMode_TypeDef AddMode, u8 InputClockFrequencyMHz )
OwnAddress到底该是什么???????????????????????????????????????????????????????????????

出0入0汤圆

发表于 2011-6-23 12:41:26 | 显示全部楼层
回复【10楼】sdh125  
-----------------------------------------------------------------------

除非你用两个MCU进行I2C交互通信,否则的话,STM32都是作为Master存在的,其他设备都是Slave Device,这个OwnAddress其实根本用不到,
就算你做双机I2C通信,STM32可能成为Slave而要设置OwnAddress的话,应该也可以是任意值,只要避免和其他设备重复即可,同时I2C1和I2C2也不要重复地址。

论坛里这个帖子中的代码是OK的,我试了还挺稳定的,但是Ack必须是Disable的,否则也会不稳定,表现基本就是写第一个字节正常,第二个字节就会停在wait master transmitter mode select那里了,也就是等待ADDR Bit Set一直不成功。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3636005&bbs_page_no=1&search_mode=4&search_text=leavic&bbs_id=9999

出0入0汤圆

发表于 2011-10-10 13:50:38 | 显示全部楼层
地址或传输方向对吗?有没有设应答?

出0入10汤圆

发表于 2015-5-27 16:48:00 | 显示全部楼层
mingshu0618 发表于 2010-11-26 09:25
只要开FSMC时钟,i2c的sda脚就被占用了。

简单的使用还是可以,如果要跟fsmc同用,硬件i2c就要重新映射到p ...

这个可能是对的,但是fsmc这个脚没启用,也会有这个问题吗,看来我也得软件模拟i2c
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 03:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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