STM32F030的I2C发送数据的问题

2019-07-14 16:32发布

最近在调试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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
leilijiao
1楼-- · 2019-07-16 10:53
TOPCB 发表于 2018-10-29 20:48
这里的I2C_SoftEnd_Mode 是在地址数据发送以后产生一个restart信号,以表示用来读取E2的数据。而在写模式下,不用产生这个restart信号。
开始我理解的是发送一个NOACK,用来控制I2C总线停止工作做。通过手册,这里控制的是restart信号,可以参考下图中restart产生的信号位置。
...

楼主,你好,可否指导下跨页写?谢谢!
leilijiao
2楼-- · 2019-07-16 14:51
 精彩回答 2  元偷偷看……
TOPCB
3楼-- · 2019-07-16 16:07
leilijiao 发表于 2018-10-29 21:35
版主,可否指导下跨页写?谢谢

您好,用的哪款芯片。一般是硬件地址上面+2。
wang21cj
4楼-- · 2019-07-16 18:09
有机会来看看!
leilijiao
5楼-- · 2019-07-16 19:23
TOPCB 发表于 2018-10-29 21:55
您好,用的哪款芯片。一般是硬件地址上面+2。

我用的就是stm32f030的,已经按照库里面的代码修改的可以跨页读写数据了,谢谢你了。
TOPCB
6楼-- · 2019-07-17 00:53
leilijiao 发表于 2018-10-29 22:24
我用的就是stm32f030的,已经按照库里面的代码修改的可以跨页读写数据了,谢谢你了。

不客气,要看I2C器件的硬件手册,上面有写。

一周热门 更多>