最近在用st hal iic 发现 MX_I2C1_Init(); 后 iic 就处于BUSY状态
代码跟踪后发现 具体到 HAL_I2C_MspInit 中 __HAL_RCC_I2C1_CLK_ENABLE(); 后 IIC模块就处到busy状态。
具体问题找到 ,修改如下,轻松解决问题!!
原来代码:
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(i2cHandle->Instance == I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Peripheral clock enable */
__HAL_RCC_I2C1_CLK_ENABLE();
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}
}
修改后代码:
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(i2cHandle->Instance == I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/
/* Peripheral clock enable */
__HAL_RCC_I2C1_CLK_ENABLE();
/* USER CODE BEGIN I2C1_MspInit 1 */
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE END I2C1_MspInit 1 */
}
}
上一篇:stm32的HAL库uart的注意点
下一篇:STM32 AD7792驱动调试总结
推荐阅读最新更新时间:2024-11-02 02:38
设计资源 培训 开发板 精华推荐
- FSL518AFLYGEVB:FSL518AFLYGEVB:具有高压启动和 SenseFET 评估板的高性能 800 V 离线开关
- TCR4S12DWBG、200mA、1.2V输出电压CMOS低压降稳压器的典型应用
- SP6203 低噪声、300mA 和 500mA CMOS LDO 稳压器的典型应用电路
- LT6654BHLS8-2.5 升压输出电流电压基准的典型应用
- ADR421 精密升压输出稳压器的典型应用
- LT3477EFE 降压-升压模式 LED 驱动器的典型应用电路
- LT8570EDD-1 1.2MHz 升压转换器的典型应用从 9V-16V 输入产生 48V
- LTC1067 轨至轨、极低噪声通用双路滤波器构建模块的典型应用
- MIC2015-1.2Y 1.2A固定可调限流配电开关典型应用
- LTC2191IUKG、16 位、40Msps 低功耗双通道 ADC 的典型应用