完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL_I2C_MspInit()
{ __HAL_RCC_I2C1_CLK_ENABLE(); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } 這個方法你先試試看 先開啟I2C Clock 在設定IO |
|
|
|
请问一下为什么要先call __HAL_RCC_I2C1_CLK_ENABLE(), 接着再去call HAL_GPIO_Init(GPIOB, &GPIO_InitStruct)? 这和原来Cube自动产生的顺序相反,这个影响到什么? |
|
|
|
我一開始也是會遇到I2C init完之後就遇到busy了,所以我才對調的
|
|
|
|
I2C init完之后就遇到busy了 ==>是指还没要去读取I2C就busy? 或是尝试去读取之后, timeout, 之后就一直busy? 请问一下你有遇过, 有时候, 是非100%每次(发生在开机之后)第1次去读取I2C就失败, 之后再retry, 不过retry几次后, busy bit就被设起来, 之后就busy bit一直为1 Thanks |
|
|
|
I2C busy可能发生在读取完成以后,楼主用的是硬件I2C模块,还是模拟的I2C。注意每次使用完后,一定要释放掉I2C总线。
|
|
|
|
我是用STM的HAL lib, HAL_I2C_Mem_Read()去对I2C做读取的, 如果HAL_I2C_Mem_Read() return 值不是HAL_OK, 我就要去retry, call HAL_I2C_Mem_Read() 注意每次使用完后,一定要释放掉I2C总线。 ==>我要怎么做释放? 用HAL lib or 其他方式? 或着有其他的建议? |
|
|
|
库应该不用去释放,出现这种情况是在操作前,还是操作完毕后。示波器抓一下波形
|
|
|
|
STM32的IIC就是这样,只能在屏蔽良好的理想环境下使用,在强干扰环境下随时都会硬件出错停止响应IIC操作,官方有个针对其IIC极易出各种硬件错误的文档说明,也只是推荐了几种重新初始化IIC模块的操作建议,亲自充分测试过,没有绝对可行的解决办法,原因就在其主从自适应的灵活性和错误检测不能自动退出的低级容错性,导致其普通的主模式操作极易因信号干扰宕机,有人说新生产的批次解决了这个问题,可在淘宝上买的最常用的STM32F103新品实测并没有改善这个问题,最佳方法就是硬件上做好信号干扰屏蔽,同时避免多芯片之间IIC信号输入输出冲突,最后建议尽量不要在关键控制区域使用STM32 的IIC接口模块。
|
|
|
|
iic不建议用库函数,官方给的都很负责。在网上找个写好的基本不用改就能用,还不会出现问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2027 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1209 浏览 0 评论
2786 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2557 浏览 3 评论
5240 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 07:04 , Processed in 0.501180 second(s), Total 54, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号