你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030的I2C发送数据疑惑 求解答 谢谢

[复制链接]
三创电子(Tcreate) 提问时间:2014-2-13 21:55 /
最近在调试STM32F030单片机的I2C总线,现在虽然参考官方实例调试成功了 但是有一些地方还不是很明白,暂时也未看懂,希望知道的大神可以赐教 小弟先谢过了!

void I2C_uWriteData(INT8U SlaveAddr,INT16U WriteAddr,INT8U WriteLen,INT8U *WriteBuf)
{
 INT8U i;

 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
 I2C_TransferHandling(I2C1,SlaveAddr,2,I2C_Reload_Mode,I2C_Generate_Start_Write);   // I2C_SoftEnd_Mode
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS) == RESET);
 I2C_SendData(I2C1,WriteAddr >> 8);
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS) == RESET);
 I2C_SendData(I2C1,WriteAddr % 256);
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TCR) == RESET);
 I2C_TransferHandling(I2C1,SlaveAddr,WriteLen,I2C_AutoEnd_Mode,I2C_No_StartStop);   // I2C_Generate_Start_Write
 for(i=0;i
收藏 2 评论21 发布时间:2014-2-13 21:55

举报

21个回答
回答时间:2014-2-15 17:34:02

回复:STM32F030的I2C发送数据疑惑 求解答 谢谢

这里的I2C_SoftEnd_Mode 是在地址数据发送以后产生一个restart信号,以表示用来读取E2的数据。而在写模式下,不用产生这个restart信号。
开始我理解的是发送一个NOACK,用来控制I2C总线停止工作做。通过手册,这里控制的是restart信号,可以参考下图中restart产生的信号位置。
1.jpg
三创电子(Tcreate) 回答时间:2014-2-13 22:04:18

RE:STM32F030的I2C发送数据疑惑 求解答 谢谢

自己先顶一个 期待高人指教呀
回答时间:2014-2-14 09:55:27

RE:STM32F030的I2C发送数据疑惑 求解答 谢谢

这个过程就是要看I2C协议了。I2C协议规定,首先要先通过设备地址访问设备,然后告诉设备是读还是写状态,然后再进行读写,读写完毕后发送一个结束命令。如果你上述红色字体修改,第一个命令就是结束了。
三创电子(Tcreate) 回答时间:2014-2-14 10:24:50

回复:STM32F030的I2C发送数据疑惑 求解答 谢谢

回复第 3 楼 于2014-02-14 09:55:27发表:
这个过程就是要看I2C协议了。I2C协议规定,首先要先通过设备地址访问设备,然后告诉设备是读还是写状态,然后再进行读写,读写完毕后发送一个结束命令。如果你上述红色字体修改,第一个命令就是结束了。 

红色标注的是可以实现操作的,蓝色标注的无法成功
这是可以实现读数据的代码 相比之下,写操作的配置我就看不明白了

void I2C_uReadData(INT8U SlaveAddr,INT16U ReadAddr,INT8U ReadLen,INT8U *ReadBuf)
{
 INT8U i;
 
 // 等待总线空闲
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
 I2C_TransferHandling(I2C1,SlaveAddr,2,I2C_SoftEnd_Mode,I2C_Generate_Start_Write);
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS) == RESET);
 I2C_SendData(I2C1,ReadAddr >> 8);
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS) == RESET);
 I2C_SendData(I2C1,ReadAddr % 256);
 while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TC) == RESET);
 I2C_TransferHandling(I2C1,SlaveAddr,ReadLen,I2C_AutoEnd_Mode,I2C_Generate_Start_Read);
 for(i=0;i
回答时间:2014-2-14 11:01:01

RE:STM32F030的I2C发送数据疑惑 求解答 谢谢

我说的意思就是换成蓝色的,就是停止了。对于I2C操作不理解,建议看一下I2C协议,里面详细描述了I2C如何读写。
三创电子(Tcreate) 回答时间:2014-2-14 14:21:39

回复:STM32F030的I2C发送数据疑惑 求解答 谢谢

我就是不理解蓝色的配置怎么会导致停止呢
三创电子(Tcreate) 回答时间:2014-2-14 14:22:37

回复:STM32F030的I2C发送数据疑惑 求解答 谢谢

回复第 5 楼 于2014-02-14 11:01:01发表:
我说的意思就是换成蓝色的,就是停止了。对于I2C操作不理解,建议看一下I2C协议,里面详细描述了I2C如何读写。 

我就是不怎么理解蓝色的配置怎么会导致I2C停止了
回答时间:2014-2-14 14:50:48

RE:STM32F030的I2C发送数据疑惑 求解答 谢谢

I2C_SoftEnd_Mode,这个就是进入结束模式。如果需要从设备继续工作,就要重新连接,你I2C基础不好。建议还是看看协议吧。
三创电子(Tcreate) 回答时间:2014-2-14 16:10:41

回复:STM32F030的I2C发送数据疑惑 求解答 谢谢

回复第 8 楼 于2014-02-14 14:50:48发表:
I2C_SoftEnd_Mode,这个就是进入结束模式。如果需要从设备继续工作,就要重新连接,你I2C基础不好。建议还是看看协议吧。 

那读数据的配置也是I2C_SoftEnd_Mode呀,而且个人理解I2C_SoftEnd_Mode配置的意思是 有软件具体操作来发送停止位吧(又自动发送停止位)
回答时间:2014-2-15 08:54:04

RE:STM32F030的I2C发送数据疑惑 求解答 谢谢

I2C_SoftEnd_Mode,说明要发送停止位了。这个只是一个定义,为了方便大家理解这个标志位用来做什么。
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版