5789|12

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

问:STM32的I2C操作 [复制链接]


用STM32的硬件I2C读写24C02,用的是万利的板。

运到的问题是:

我每调用一次读24C02的函数后,以后再发读或写I2C的库函数都会造成死机。
即再调用:
  I2C_GenerateSTART(I2C1, ENABLE);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //这出不来了。

我自己分析是我的读操作函数没能正确的结束I2C时序。我的读24C02函数最后部分代码是:
     for(i=0;i<no-1;i++)
        {   
           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
           *s = I2C_ReceiveData(I2C1);      //接收数据
            s++;                            //接收数据地址调整
        }  

        I2C_AcknowledgeConfig(I2C1,DISABLE); //读最后一个字节后产生NAK信号
        
       while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     *s = I2C_ReceiveData(I2C1);         //接收数据
        
        I2C_GenerateSTOP(I2C1,ENABLE);     //结束总线
        
        I2C_AcknowledgeConfig(I2C1,ENABLE); //为下次读写准备ACK
         
        return(1);

请大家看看
此帖出自stm32/stm8论坛

最新回复

                                 楼主可以 NXP ARM 关于 I2C 的中文说明部分。是很有帮助的。   详情 回复 发表于 2008-7-14 16:51
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

补充一下:


我是参考STM32的I2C例子Example 5来写的。

Example 5例子中对24C02写了一次,再读了一次就结束了。

我写的代码写一次,读一次程序也运行正常。

但调用读之后,再写、或再读就死机了。。
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

同病相怜!

                                 我也遇到过,请高手及香主给回答一下,不要打击我对STM32的兴趣和我的自信心呀
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 

3楼:我晕~~~~~~~~~~~~~

不要“ 同病相怜”哦~~~~~~~~~~~~~~~~

有啥也别有病哦~~~~~~~~~~~~~~~

(*^__^*) 嘻嘻……


我的分析:

我自己觉得是没有能正确的结束I2C时序。

第一次读的数据结果正确,可能是在读取最后一个字节时候,STM32没有能发送正确的NAK信号,使24C02那边没有释放SDA、SCL。

我调整
        I2C_AcknowledgeConfig(I2C1, DISABLE);
的位置,搞来搞去,问题依旧。


大侠出来指点一下塞~~~~~~~~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 

ls用的是搜狗拼音

                                 鉴定完毕
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 

朋友们支持下~~~~~~~


搞好了的出来支援一下啊~~~~~~~~~~~~`

此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 

这个说明,是不是有错?


此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

8
 

没有错

                                 为什么你认为有错呢?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 

同样的提问要问你了

为什么你认为没有错呢?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

果然没错!! 还是香~~NB!!

那是你们的Example有错,所以说质量不咋的嘛!



此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 

最后这里总结一下,方便后来的兄弟伙:



        I2C_AcknowledgeConfig(I2C1,DISABLE); //读最后一个字节后产生NAK信号
               I2C_GenerateSTOP(I2C1,ENABLE); //结束总线要放在这里!!!!!!!!! 
       while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
     *s = I2C_ReceiveData(I2C1);         //接收数据
        

        
        I2C_AcknowledgeConfig(I2C1,ENABLE); //为下次读写准备ACK
         
        return(1);
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 

ST公布的LIB最新版本是2.0.1

                                 更新下吧。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 

我已经更新了

用2.0.1的例子在EK-STM32F上跑了下,准备访问24C02,但是无论读写都死机,发现死在
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
一直在查询忙状态,我怀疑是不是上次启动总线之后状态位没有清掉?
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

13
 

哈哈, 有意思。

楼主可以 NXP ARM 关于 I2C 的中文说明部分。
是很有帮助的。

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表