OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3058|回复: 2

I2C通讯中的复合模式

[复制链接]

2

主题

8

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-11-4
在线时间
3 小时
发表于 2018-11-12 20:49:06 | 显示全部楼层 |阅读模式
1金钱
这个代码是*火stm32的例程
I2C通讯中的复合模式要求发两个起始信号,第一个起始信号发送完发从机地址然后可以再发寄存器地址,第二个起始信号发完以后才能再发数据
而它的代码中发完存储器地址后就直接发数据,是不是错误的?
大神忙下

19 * @brief 写一个字节到I2C EEPROM 中
20 * @param pBuffer:缓冲区指针
21 * @param WriteAddr:写地址
22 * @retval 正常返回1,异常返回0
23 */
24 uint32_t I2C_EE_ByteWrite(u8* pBuffer, u8 WriteAddr)
25 {
26 /* 产生I2C 起始信号 */
27 I2C_GenerateSTART(EEPROM_I2C, ENABLE);
28
29 /*设置超时等待时间*/
30 I2CTimeout = I2CT_FLAG_TIMEOUT;
31 /* 检测 EV5 事件并清除标志*/
32 while (!I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_MODE_SELECT))
33 {
34 if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(0);
35 }
36
37 /* 发送EEPROM 设备地址 */
38 I2C_Send7bitAddress(EEPROM_I2C, EEPROM_ADDRESS,
39 I2C_Direction_Transmitter);
40
41 I2CTimeout = I2CT_FLAG_TIMEOUT;
42 /* 检测 EV6 事件并清除标志*/
43 while (!I2C_CheckEvent(EEPROM_I2C,
44 I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
45 {
46 if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(1);
47 }
48
49 /* 发送要写入的EEPROM 内部地址(即EEPROM 内部存储器的地址) */
50 I2C_SendData(EEPROM_I2C, WriteAddr);
51
52 I2CTimeout = I2CT_FLAG_TIMEOUT;
53 /* 检测 EV8 事件并清除标志*/
54 while (!I2C_CheckEvent(EEPROM_I2C,
55 I2C_EVENT_MASTER_BYTE_TRANSMITTED))
56 {
57 if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(2);
58 }
59 /* 发送一字节要写入的数据 */
60 I2C_SendData(EEPROM_I2C, *pBuffer);
61
62 I2CTimeout = I2CT_FLAG_TIMEOUT;
63 /* 检测 EV8 事件并清除标志*/
64 while (!I2C_CheckEvent(EEPROM_I2C,
65 I2C_EVENT_MASTER_BYTE_TRANSMITTED))
66 {
67 if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(3);
68 }
69
70 /* 发送停止信号 */
71 I2C_GenerateSTOP(EEPROM_I2C, ENABLE);
72
73 return 1;
74 }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-11-4
在线时间
3 小时
 楼主| 发表于 2018-11-12 21:31:12 | 显示全部楼层
还有一个问题:

41 /*通过重新设置PE 位清除EV6 事件 */
42 I2C_Cmd(EEPROM_I2C, ENABLE);


为什么重新设置就可以了?本来I2C就使能了,这个怎么理解。查看数据手册后发现数据手册上也没有写相关的
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-11-4
在线时间
3 小时
 楼主| 发表于 2018-11-12 21:37:04 | 显示全部楼层
老哥们救救孩子吧
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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