| 
 
| 本帖最后由 我的牙白 于 2025-7-29 22:49 编辑 
 STM32F103带一个 4x20 LCD,需要两个 PWM 开关,以及一个 Si5351A 的 I2C 接口和几个外部中断。测试 LCD 的接口;没问题,测试两个 PWM;同样没问题,
 但 I2C 接口无法工作。SDA 和 SCL 在示波器上没有显示波形
 对 HAL_I2C_Master_Transmit() 的调用只返回一个HAL_BUSY。
 查看生成的代码,发现 MX_GPIO_Init() 例程没有 I2C  io口的任何配置;
 程序如下
 static void MX_GPIO_Init(void){  GPIO_InitTypeDef GPIO_InitStruct = {0};   /* GPIO Ports Clock Enable */  __HAL_RCC_GPIOC_CLK_ENABLE();  __HAL_RCC_GPIOD_CLK_ENABLE();  __HAL_RCC_GPIOA_CLK_ENABLE();  __HAL_RCC_GPIOB_CLK_ENABLE();   /*Configure GPIO pin Output Level */  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);   /*Configure GPIO pin Output Level */  HAL_GPIO_WritePin(GPIOB, D2_Pin|D3_Pin|E_Pin|RS_Pin                           |D0_Pin|D1_Pin, GPIO_PIN_RESET);   /*Configure GPIO pin : LD2_Pin */  GPIO_InitStruct.Pin = LD2_Pin;  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull = GPIO_NOPULL;  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);   /*Configure GPIO pins : D2_Pin D3_Pin E_Pin RS_Pin                            D0_Pin D1_Pin */  GPIO_InitStruct.Pin = D2_Pin|D3_Pin|E_Pin|RS_Pin                           |D0_Pin|D1_Pin;  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull = GPIO_NOPULL;  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }static void MX_I2C1_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 */  hi2c1.Instance = I2C1;  hi2c1.Init.ClockSpeed = 100000;  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;  hi2c1.Init.OwnAddress1 = 0;  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;  hi2c1.Init.OwnAddress2 = 0;  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;  if (HAL_I2C_Init(&hi2c1) != HAL_OK)  {    Error_Handler();  }   /* USER CODE BEGIN I2C1_Init 2 */   /* USER CODE END I2C1_Init 2 */ }
 
 
 | 
 |