STM32硬件IIC卡死问题和DMA发送数据异常问题

STM32硬件IIC卡死问题和DMA发送数据异常问题

问题1描述:
一直听说STM32的硬件IIC有问题,我平时做项目一直没有遇到过,这次做项目发现硬件IIC居然会自己卡死,现象就是IIC发不出数据,用逻辑分析仪捕捉不到任何电平,必须要重启单片机才能正常,接下来说一下我的硬件环境:STM32作为主机,IIC总线上挂载这AT24C02和一个流量传感器,但是这个流量传感器有问题,他在不上电的时候IIC总线一直输出1.8V(IIC信号线反向给流量传感器供电导致的),这就导致STM32初始话完IIC后就处于卡死状态(STM32检测到IIC线异常后就直接卡死了,不管你程序怎么发送信号电平),所以最终解决办法是要等到流量传感器完全上电之后,复位一下硬件IIC。

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了,直接用阻塞方式发送算了)

#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!!!");
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值