16234|29

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

已经调试通过的stm32I2C中断方式程序 [复制链接]

已经调试通过的stm32 I2C 中断方式程序,
感兴趣的可以研究参考一下,顺便帮挑挑毛病. IAR_STM32_I2C.rar (304.14 KB)

写0 - 128到AT24C01B全部空间,再读出来,比较通过,
亮PB14,PB15管脚LED灯。
此帖出自stm32/stm8论坛

最新回复

非常不错,谢谢分享!!!  详情 回复 发表于 2012-4-14 09:40
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 I2C接口除非是每次数据量小,偶尔有一次通讯,用中断方式最合适。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 不知道对不对,但鼓励共享精神,赏裤子一条,
此帖出自stm32/stm8论坛
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 你好楼主 我用你调试通过的例子 用STM32f103ze  读写 24lc02  怎么不好用啊
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 能帮我分析一下吗 谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 你的具体情况是啥样子?
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
看看器件地址以及硬件写保护管脚是否对,
别再小问题上栽跟头
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 很不错的例子,多谢楼主共享
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 没有问题啊  我用的是安富莱的开发板 芯片是 STM32103ze   pb6 和 pb7 接到了 24l02 上了 没有错啊  直接用你的例程  发现进入死循环了
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
你的程序 我没有改 就是直接用的  进入中断后


   case I2C_EVENT_MASTER_BYTE_RECEIVED:   //EV7
     i2cRevBuf[i2cRevCount++] = I2C_ReceiveData (I2C1);
     if(i2cRevCount == (i2cRevLen - 1))
     {
       I2C_AcknowledgeConfig(I2C1, DISABLE);
       I2C_GenerateSTOP(I2C1, ENABLE);
     }
     else if(i2cRevCount == i2cRevLen)//如果接收完毕
     {
       rdTaskState = 3;//   置位 接受完毕标志
     }


总是不执行       else if(i2cRevCount == i2cRevLen这条语句
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
if(i2cRevCount == (i2cRevLen - 1))
     {
       I2C_AcknowledgeConfig(I2C1, DISABLE);
       I2C_GenerateSTOP(I2C1, ENABLE);
     }

能执行到吗?
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

12
 
不行的话,
把                #define ClockSpeed              2000
改为             #define ClockSpeed              20000

把时钟改为20K试试。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 啊 好的我试试
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
时钟我改了  我看了一下
if(i2cRevCount == (i2cRevLen - 1))
     {
       I2C_AcknowledgeConfig(I2C1, DISABLE);
       I2C_GenerateSTOP(I2C1, ENABLE);
     }
执行不到这个语句
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

15
 
前面的
i2cRevBuf[i2cRevCount++] = I2C_ReceiveData (I2C1);
这条语句能执行到吗?
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
也执行不到 好像是 写好使3 读就不行 了

对了楼主  我编译你的程序是 有警告 应该没事吧
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
if(i2cSendCount < i2cSendLen)这条语句的警告

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement F:\STM32\IAR ARM Prj\IIC\stm32f10x_it.c 534

     if(i2cRevCount == (i2cRevLen - 1))这条语句的警告
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement F:\STM32\IAR ARM Prj\IIC\stm32f10x_it.c 571

   else if(i2cRevCount == i2cRevLen)这条语句的警告

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement F:\STM32\IAR ARM Prj\IIC\stm32f10x_it.c 576
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

18
 
/* Master Receiver -------------------------------------------------------*/
    case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:/* EV6 */

这个语句就是始终不执行 。


我看数据手册上写

根据送出从地址的最低位,主设备决定进入发送器模式还是进入接收器模式。
● 在7位地址模式时,
─ 要进入发送器模式,主设备发送从地址时置最低位为’0’。
─ 要进入接收器模式,主设备发送从地址时置最低位为’1’。


是这个的事吗  那也不对啊 你都调试成功了 没有理由啊 我什么也没改啊 楼主
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

19
 
警告不会读写问题。
接收的时候已经自动改为1了,也不是这个问题。

你把接收之前的等待时间再延长一点试试。

过几天我买个24lc02试试,按说不应该会有问题
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

20
 
你可以看看i2cEventGroup这个全局变量里面存储的I2C消息序列最终到哪一步,
判断哪一步除了问题
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
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
快速回复 返回顶部 返回列表