打印

STM32 I2C 封装库(查询方式)访问I2C出现错误

[复制链接]
2555|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaozhifang|  楼主 | 2009-11-3 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试目的:测试利用STM32F103CB的i2c2能否正确访问i2c外设。
测试方法:循环调用I2C_Comm_MasterRead()连续读13个寄存器,延迟100ms后显示。
结果如下:
0 !
10 !20 !1 !0 !20 !0 !20 !0 !20 !4 !0 !20 !0 !
上面这一行是正确的显示。每次系统复位后都会正确显示若干次,然后出现错误。如下
0 !
10 !20 !1 !0 !20 !0 !20 !0 !20 !7 !ff !ff !ff !
上面这一行后四位是错的。
0 !
10 !20 !1 !0 !20 !0 !20 !0 !20 !4 !0 !20 !0 !
有时,重新读会恢复。
多数情况完全不能恢复。如下:
0 !
10 !20 !1 !0 !20 !0 !20 !0 !20 !7f !ff !ff !ff !
3 !
0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !
2 !
0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !
改动一:
我在每次调用I2C_Comm_MasterRead()后,关闭(DISABLE)I2C,然后再打开(ENABLE),
再执行I2C_Comm_MasterRead(),读出乱码,但第一位始终是正确的。
0 !
10 !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !
0 !
10 !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !
0 !
偶尔会出现下面这样的错误。但都是可以恢复的。
4 !
0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !0 !
0 !
10 !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !
改动二:
我在每次调用I2C_Comm_MasterRead()后,关闭(DISABLE)I2C,然后再重新初始化I2C_Comm_Init(I2C2, 400000, 0xA0);,
这种情况,有大约10%左右的误码,如下第一行。虽然出现了误码,重新初始化可以恢复。
10 !20 !1 !0 !20 !f !ff !ff !ff !ff !ff !ff !ff !
0 !
10 !20 !1 !0 !20 !0 !20 !0 !20 !4 !0 !20 !0 !
改动三:
一次只读一个字节!
不再出现ff了,但也会有ADDR_MATCH_ERR或DATA_TIMEOUT错!这个问题不大。
改动四:
重新测试一次读13个字节的情况:
这回关了I2C后,同时关毕i2c时钟。RCC_APB1PeriphClockCmd (RCC_APB1Periph_I2C2 , DISABLE);
稍作延迟再打开,执行RCC_APB1PeriphClockCmd (RCC_APB1Periph_I2C2 , ENABLE);
然后再重新初始化I2C_Comm_Init(I2C2, 400000, 0xA0);结果出现了更多的类似下面几行的乱码。
0 !
10 !20 !3f !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !
0 !
10 !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !ff !

对于这个测试的结果,请大家帮助分析一下原因。
沙发
baishuiyang| | 2014-4-20 18:10 | 只看该作者

现在解决了吧

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝