STM32硬件IIC卡死问题和DMA发送数据异常问题
问题1描述:
一直听说STM32的硬件IIC有问题,我平时做项目一直没有遇到过,这次做项目发现硬件IIC居然会自己卡死,现象就是IIC发不出数据,用逻辑分析仪捕捉不到任何电平,必须要重启单片机才能正常,接下来说一下我的硬件环境:STM32作为主机,IIC总线上挂载这AT24C02和一个流量传感器,但是这个流量传感器有问题,他在不上电的时候IIC总线一直输出1.8V(IIC信号线反向给流量传感器供电导致的),这就导致STM32初始话完IIC后就处于卡死状态(STM32检测到IIC线异常后就直接卡死了,不管你程序怎么发送信号电平),所以最终解决办法是要等到流量传感器完全上电之后,复位一下硬件IIC。文章来源:https://www.toymoban.com/news/detail-770730.html
void devIICReset(void)
{
HAL_I2C_DeInit(&hi2c1);
HAL_Delay(1);
I2C1->CR1 |= I2C_CR1_SWRST;
HAL_Delay(1);
I2C1->CR1 &= ~I2C_CR1_SWRST;
HAL_Delay(1);
MX_I2C1_Init();
HAL_Delay(1);
}
问题2描述:
承接上面我的硬件环境,总线上挂着AT24C02和流量传感器,我需要实时获取流量传感器数据(10ms就读取一次花费时间0.3ms/次),当掉电不丢失数据改变时我需要写AT24C02(写一次花费时间1ms),这就让我觉得太占用资源了,需要用到DMA来干活了,发现如果两次读取时间间隔过短,比如小于1ms,用逻辑分析仪捕捉不到任何波形,也不清楚IIC是否是卡死了,还是不能这样操作,暂时没有找到有效解决办法,替代方案是:提高IIC通讯速度或者是每次DMA操作后延时1ms(还不如不用DMA了,直接用阻塞方式发送算了)文章来源地址https://www.toymoban.com/news/detail-770730.html
#define FLOW_ADDR 0x49
#define FLOW_ADDR_WRITE 0x92
#define FLOW_ADDR_READ 0x93
if(HAL_I2C_Master_Receive_DMA(&hi2c1,FLOW_ADDR_READ,data,len) != HAL_OK)
{
Debug_error("flowSensorRead fail!!!");
}
到了这里,关于STM32硬件IIC卡死问题和DMA发送数据异常问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!