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条回答
60user135
1楼-- · 2019-07-14 20:36
自己先顶一个 期待高人指教呀
TOPCB
2楼-- · 2019-07-15 01:43
这个过程就是要看I2C协议了。I2C协议规定,首先要先通过设备地址访问设备,然后告诉设备是读还是写状态,然后再进行读写,读写完毕后发送一个结束命令。如果你上述红 {MOD}字体修改,第一个命令就是结束了。
60user135
3楼-- · 2019-07-15 01:56
回复第 3 楼 于2014-02-14 09:55:27发表:
这个过程就是要看I2C协议了。I2C协议规定,首先要先通过设备地址访问设备,然后告诉设备是读还是写状态,然后再进行读写,读写完毕后发送一个结束命令。如果你上述红 {MOD}字体修改,第一个命令就是结束了。 

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

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
TOPCB
4楼-- · 2019-07-15 05:01
 精彩回答 2  元偷偷看……
60user135
5楼-- · 2019-07-15 09:10
我就是不理解蓝 {MOD}的配置怎么会导致停止呢
60user135
6楼-- · 2019-07-15 10:11
回复第 5 楼 于2014-02-14 11:01:01发表:
我说的意思就是换成蓝 {MOD}的,就是停止了。对于I2C操作不理解,建议看一下I2C协议,里面详细描述了I2C如何读写。 

我就是不怎么理解蓝 {MOD}的配置怎么会导致I2C停止了

一周热门 更多>