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

STM32F407硬件I2C重新配置失效

[复制链接]
沉鱼之才 提问时间: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

查看全部评分

沉鱼之才 回答时间: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寄存器没有值,大多是因为时钟未开启导致的。
沉鱼之才 回答时间: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寄存器的功能。
沉鱼之才 回答时间: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。仿真一下是否重新执行了开启时钟。
沉鱼之才 回答时间:2017-11-13 09:11:59
安 发表于 2017-11-11 08:34
一般重新初始化,直接初始化I2C就可以了。不用HAL_I2C_DeInit。仿真一下是否重新执行了开启时钟。 ...

好的,谢谢~

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版