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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版