发现使用STM32F103C8 i2c是可以工作了,要是cpu选STM32F103C6Tx发现生成代码i2c不工作,多次尝试和比较发现,STM32F103C6Tx生成的i2c的msp初始化gpio的时候少了一个速度的配置:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
加上这行就正常工作了。汗。如下,加到 USER CODE BEGIN 和 USER CODE END中间,这样再生成代码就不怕冲走了。
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(i2cHandle->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
/* USER CODE END I2C1_MspInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**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.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* I2C1 clock enable */
__HAL_RCC_I2C1_CLK_ENABLE();
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}
}