我正在使用
STM32F407 控制器并将 I2C1 配置为 SMBus。
但是在IDE中配置后,I2C1生成的初始化代码如下:
- void MX_I2C1_SMBUS_Init(void)
- {
- /* USER CODE BEGIN I2C1_Init 0 */
- /* USER CODE END I2C1_Init 0 */
- /* USER CODE BEGIN I2C1_Init 1 */
- /* USER CODE END I2C1_Init 1 */
- hsmbus1.Instance = I2C1;
- hsmbus1.Init.OwnAddress1 = 0;
- hsmbus1.Init.AddressingMode = SMBUS_ADDRESSINGMODE_7BIT;
- hsmbus1.Init.DualAddressMode = SMBUS_DUALADDRESS_DISABLE;
- hsmbus1.Init.OwnAddress2 = 0;
- hsmbus1.Init.GeneralCallMode = SMBUS_GENERALCALL_DISABLE;
- hsmbus1.Init.NoStretchMode = SMBUS_NOSTRETCH_DISABLE;
- hsmbus1.Init.PacketErrorCheckMode = SMBUS_PEC_DISABLE;
- hsmbus1.Init.PeripheralMode = SMBUS_PERIPHERAL_MODE_SMBUS_HOST;
- if (HAL_SMBUS_Init(&hsmbus1) != HAL_OK)
- {
- Error_Handler();
- }
- /** configuration Alert Mode
- */
- if (HAL_SMBUS_EnableAlert_IT(&hsmbus1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN I2C1_Init 2 */
- /* USER CODE END I2C1_Init 2 */
- }
在调试模式下运行代码时,以下断言失败:
- assert_param(IS_SMBUS_CLOCK_SPEED(hsmbus->Init.ClockSpeed));
仔细检查后,“ClockSpeed”为零。
在上面的函数“MX_I2C1_SMBUS_Init”中,时钟速度没有设置,我相信它应该由 IDE 完成。
我必须手动设置时钟速度才能使其正常工作,这并不明显。
但是,它不能,因为它在配置外设时没有收到用户的输入。
如果我在这里做错了什么或错过了一步,请纠正我。
否则,请解决此问题。这是令人难以置信的混乱。