STM32F103带一个 4x20 LCD,需要两个 PWM 开关,以及一个 Si5351A 的 I2C 接口和几个外部中断。测试 LCD 的接口;没问题,测试两个 PWM;同样没问题,
但 I2C 接口[backcolor=var(--darkreader-background-ffffff, #141617)]无法[backcolor=var(--darkreader-background-ffffff, #141617)]工作。[backcolor=var(--darkreader-background-ffffff, #141617)]SDA 和 SCL 在示波器上没有显示波形
[backcolor=var(--darkreader-background-ffffff, #141617)]对 HAL_I2C_Master_Transmit() 的调用只返回一个HAL_BUSY。
[backcolor=var(--darkreader-background-ffffff, #141617)]查看生成的代码,发现 MX_GPIO_Init() 例程没有 I2C io口的任何配置;
[backcolor=var(--darkreader-background-ffffff, #141617)]程序如下
[backcolor=var(--darkreader-background-ffffff, #141617)]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 */ }
|