关于CH32X033的I2C软件复位的用法

我在使用X033的I2C做主设备, 跟从设备通讯时, 经常出现卡死在 

while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));

经过初步诊断, 时钟配置和I2C配置顺序没有问题, 测量发现I2C的SDA不知为何被拉低了,

我看数据手册中的说明, 通过置位I2C外设的SWRST位, 可以复位I2C模块:

I2C_SoftwareResetCmd(I2C_TypeDef *I2Cx, FunctionalState NewState);

这个软件复位的函数应该何时调用呢? 调用这个函数可以解决SDA被拉低的问题么?

大致情况我觉得跟这篇文章中应该是一样的:

I2C通讯过程中SDA被一直拉低

每次彻底断电, 第一次调试时, I2C通讯没问题, 通过Link复位MCU或者重新烧写MCU程序进行调试时, 大概率会遇到这种问题.


您好,使用IIC时,硬件上注意要接上拉,软件上外设时钟使能先开启GPIO时钟再开启IIC时钟。下帖是关于硬件IIC卡死在各事件的解决方法,可以参考一下。后续可通过邮箱(lzs@wch.cn)和我沟通。

https://www.cnblogs.com/liaigu/p/17616466.html

 


只有登录才能回复,可以选择微信账号登录