完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在做一个项目,用的是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就不更新了,感觉这里面坑还是比较多的。 |
|
相关推荐
1个回答
|
|
根据您提供的信息,您在使用STM32F105系列的HAL库通过I2C控制一个TI电源芯片。您遇到了一个问题,即在执行两个连续的I2C操作时,最后一个字节没有得到应答。您怀疑这是因为第一个操作没有执行完就跳出了,导致电源芯片进入了Standby模式。
为了解决这个问题,您可以尝试以下步骤: 1. 确保I2C通信初始化正确:检查I2C时钟、速率和地址设置是否正确。 2. 使用HAL库的I2C通信函数:确保您使用了HAL库提供的I2C通信函数,如HAL_I2C_Master_Transmit()和HAL_I2C_Master_Receive()。 3. 检查I2C中断:如果您的项目中使用了I2C中断,请确保正确配置了中断优先级和中断服务例程。 4. 在两个操作之间添加延时:您已经尝试过在两个操作之间添加延时,这可能是一个有效的解决方案。您可以尝试使用HAL_Delay()函数来添加延时。 5. 使用I2C总线空闲检查:在执行第二个操作之前,您可以检查I2C总线是否空闲。这可以通过HAL_I2C_IsDeviceReady()函数实现。 6. 使用I2C通信完成回调:HAL库提供了一个I2C通信完成回调函数,您可以在该回调函数中添加延时,以确保第一个操作已经完成。 7. 检查电源芯片的数据手册:确保您遵循了电源芯片的数据手册中的操作步骤和时序要求。 8. 使用调试工具:使用调试工具(如ST-LINK)来跟踪I2C通信过程,以便更好地了解问题所在。 9. 考虑使用DMA:如果可能,您可以考虑使用DMA(直接内存访问)来提高I2C通信的效率。 10. 更新HAL库:确保您使用的是最新版本的HAL库,因为新版本可能包含了一些错误修复和性能改进。 通过尝试以上步骤,您应该能够找到问题的原因并解决它。如果问题仍然存在,请提供更多详细信息,以便进一步分析。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:59 , Processed in 0.800107 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号