打印
[STM32F1]

STM32F103 的 I2C 问题

[复制链接]
36|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我的牙白|  楼主 | 2025-5-25 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 */ }


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

16

帖子

0

粉丝