|
最近在调试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 |
微信公众号
手机版
回复:STM32F030的I2C发送数据疑惑 求解答 谢谢
开始我理解的是发送一个NOACK,用来控制I2C总线停止工作做。通过手册,这里控制的是restart信号,可以参考下图中restart产生的信号位置。
RE:STM32F030的I2C发送数据疑惑 求解答 谢谢
RE:STM32F030的I2C发送数据疑惑 求解答 谢谢
回复:STM32F030的I2C发送数据疑惑 求解答 谢谢
这个过程就是要看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
RE:STM32F030的I2C发送数据疑惑 求解答 谢谢
回复:STM32F030的I2C发送数据疑惑 求解答 谢谢
回复:STM32F030的I2C发送数据疑惑 求解答 谢谢
我说的意思就是换成蓝色的,就是停止了。对于I2C操作不理解,建议看一下I2C协议,里面详细描述了I2C如何读写。
我就是不怎么理解蓝色的配置怎么会导致I2C停止了
RE:STM32F030的I2C发送数据疑惑 求解答 谢谢
回复:STM32F030的I2C发送数据疑惑 求解答 谢谢
I2C_SoftEnd_Mode,这个就是进入结束模式。如果需要从设备继续工作,就要重新连接,你I2C基础不好。建议还是看看协议吧。
那读数据的配置也是I2C_SoftEnd_Mode呀,而且个人理解I2C_SoftEnd_Mode配置的意思是 有软件具体操作来发送停止位吧(又自动发送停止位)
RE:STM32F030的I2C发送数据疑惑 求解答 谢谢