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库。 请多赐教。 |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
评分
查看全部评分
谢谢答复,追源码是这样的。HAL_I2C_DeInit把时钟关掉,然后sda,sck的IO配置也释放掉。
再次初始化,又会把时钟使能,io配置为i2c。
疑惑是:为啥HAL_I2C_DeInit后,就初始化失效呢?
谢谢回复,确实我也是怀疑时钟没有起来,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 */
是不是需要我们在这函数外,再判断一下?谢谢,对时钟那块不太了解。
谢谢,仿真确实发现I2C2的时钟未使能。但是初始化的时候,有Enable了,请问为什么enable会失效呢?需要做哪些措施吗?
好的,谢谢~