HAL库I2C问题咨询
最近在做一个项目,用的是STM32F105系列,用了官方的Hal库,大致是这样的,用I2C来控制一个TI的电源芯片,电源芯片有一个EN脚需要软件来控制,关机后,把EN脚拉低,这时候就进入Standby模式,在该模式下电源芯片是不响应I2C命令的。1. 先写了00数据给电源芯片让它关闭DCDC的电源。2.写Disable脚
两步连续操作有就会导致最后一个字节00写进去后,电源芯片没有应答。在I2C写完的地方打个断点,就有应答,于是在1和2之间加了一个延时,就会有应答。于是猜测,1步没有执行完,就跳出了,导致执行了2,使得电源芯片进入了Standby模式。每次都是最后一个字节,Stop之前没有应答。
可能是Hal库的问题,在生成停止条件之前,没有判断数据是否发完
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
在生成停止条件之前加了一句等待BTF标志的话,这样应答是有了,但是EN脚在Stop的时候就已经被拉成Disable了。
/* Wait until BTF flag is set */
if(I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout) != HAL_OK)
{
if(hi2c->ErrorCode == HAL_I2C_ERROR_AF)
{
/* Generate Stop */
SET_BIT(hi2c->Instance->CR1,I2C_CR1_STOP);
return HAL_ERROR;
}
else
{
return HAL_TIMEOUT;
}
}
/* Generate Stop */
SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP);
在生成STOP条件之前没法判断STOP是否完成,不知道ST后面有没有更新F1的Hal库,是不是更新到1.4就不更新了,感觉这里面坑还是比较多的。
你应该也是硬件IIC吧,我和你一样的芯片,一样的问题,搞得我现在不得不改为模拟方式,真是 楼主用的是具体哪一款TI电源芯片?
我也想买来试试这个硬件IIC的问题 奏奏奏 发表于 2017-2-25 08:41
楼主用的是具体哪一款TI电源芯片?
我也想买来试试这个硬件IIC的问题
TPS 43331,
页:
[1]