你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL库I2C问题咨询

[复制链接]
leiyijing 提问时间:2017-2-24 15:52 /
最近在做一个项目,用的是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就不更新了,感觉这里面坑还是比较多的。




收藏 2 评论3 发布时间:2017-2-24 15:52

举报

3个回答
我不怕 回答时间:2017-2-25 07:59:00
你应该也是硬件IIC吧,我和你一样的芯片,一样的问题,搞得我现在不得不改为模拟方式,真是
奏奏奏 回答时间:2017-2-25 08:41:57
楼主用的是具体哪一款TI电源芯片?
我也想买来试试这个硬件IIC的问题
leiyijing 回答时间:2017-2-25 09:45:16
奏奏奏 发表于 2017-2-25 08:41
楼主用的是具体哪一款TI电源芯片?
我也想买来试试这个硬件IIC的问题

TPS 43331,

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版