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

STM32F407硬件I2C重新配置失效

[复制链接]
tiger86 提问时间:2017-11-8 23:34 /
Hi all:
  使用硬件I2C一直使用都挺好的,最近驱动某个芯片,出现不稳定的情况。
  因此在上位机增加了调命令:重新配置I2C;
  操作如下:
  HAL_I2C_DeInit(&hi2c2);
  MX_I2C2_Init();
  发现重新配置后,I2C失效,通过stlink查看,发现里面寄存器都变成了0;
  感觉是HAL_I2C_DeInit(&hi2c2)后,MX_I2C2_Init()不生效。

补充背景:
  1,操作时,i2c还能正常工作;只是想测试一下;
  2,使用HAL库。

请多赐教。
收藏 评论8 发布时间:2017-11-8 23:34

举报

8个回答
废鱼 回答时间:2017-11-9 08:20:42
直接初始化就行了。HAL_I2C_DeInit(&hi2c2);以后,会把I2C时钟关掉,重新打开一下就可以了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

tiger86 回答时间:2017-11-9 09:27:07
安 发表于 2017-11-9 08:20
直接初始化就行了。HAL_I2C_DeInit(&hi2c2);以后,会把I2C时钟关掉,重新打开一下就可以了。 ...

谢谢答复,追源码是这样的。HAL_I2C_DeInit把时钟关掉,然后sda,sck的IO配置也释放掉。
再次初始化,又会把时钟使能,io配置为i2c。
疑惑是:为啥HAL_I2C_DeInit后,就初始化失效呢?
废鱼 回答时间:2017-11-9 15:15:32
楼主,看一下对应的寄存器,时钟寄存器、IO配置寄存器,如果I2C寄存器没有值,大多是因为时钟未开启导致的。
tiger86 回答时间:2017-11-9 16:26:52
安 发表于 2017-11-9 15:15
楼主,看一下对应的寄存器,时钟寄存器、IO配置寄存器,如果I2C寄存器没有值,大多是因为时钟未开启导致的 ...

谢谢回复,确实我也是怀疑时钟没有起来,but如何确保时钟能够起来呢?函数是:__HAL_RCC_I2C2_CLK_ENABLE()
#define __HAL_RCC_I2C2_CLK_ENABLE()     do { \
                                        __IO uint32_t tmpreg = 0x00U; \
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
                                        /* Delay after an RCC peripheral clock enabling */ \
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
                                        UNUSED(tmpreg); \
                                          } while(0U)
这边有个 /* Delay after an RCC peripheral clock enabling */
是不是需要我们在这函数外,再判断一下?谢谢,对时钟那块不太了解。
废鱼 回答时间:2017-11-9 16:41:10
在线仿真,KEIL可以通过外设寄存器查看RCC寄存器的功能。
tiger86 回答时间:2017-11-10 15:38:57
安 发表于 2017-11-9 16:41
在线仿真,KEIL可以通过外设寄存器查看RCC寄存器的功能。

谢谢,仿真确实发现I2C2的时钟未使能。但是初始化的时候,有Enable了,请问为什么enable会失效呢?需要做哪些措施吗?
废鱼 回答时间:2017-11-11 08:34:05
一般重新初始化,直接初始化I2C就可以了。不用HAL_I2C_DeInit。仿真一下是否重新执行了开启时钟。
tiger86 回答时间:2017-11-13 09:11:59
安 发表于 2017-11-11 08:34
一般重新初始化,直接初始化I2C就可以了。不用HAL_I2C_DeInit。仿真一下是否重新执行了开启时钟。 ...

好的,谢谢~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版