你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F302C8T6硬件I2C出现SDA有波形输出SCL一直为高

[复制链接]
tanganrong-1584 提问时间:2016-10-26 16:04 /
本人在一个项目中使用了STM32F302C8T6这个芯片,碰到硬件I2C奇怪的问题,过程如下:
1、通过STM32CubeMX生成初始代码;
1.png

2、初始代码如下;
  1. void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
  2. {

  3.   GPIO_InitTypeDef GPIO_InitStruct;
  4.   if(hi2c->Instance==I2C2)
  5.   {
  6.   /* USER CODE BEGIN I2C2_MspInit 0 */

  7.   /* USER CODE END I2C2_MspInit 0 */
  8.   
  9.     /**I2C2 GPIO Configuration   
  10.     PA9     ------> I2C2_SCL
  11.     PA10     ------> I2C2_SDA
  12.     */
  13.     GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
  14.     GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  15.     GPIO_InitStruct.Pull = GPIO_PULLUP;
  16.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  17.     GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
  18.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  19.     /* Peripheral clock enable */
  20.     __HAL_RCC_I2C2_CLK_ENABLE();
  21.   /* USER CODE BEGIN I2C2_MspInit 1 */

  22.   /* USER CODE END I2C2_MspInit 1 */
  23.   }

  24. }


  25. /* I2C2 init function */
  26. static void MX_I2C2_Init(void)
  27. {

  28.   hi2c2.Instance = I2C2;
  29.   hi2c2.Init.Timing = 0x0000020B;
  30.   hi2c2.Init.OwnAddress1 = 0;
  31.   hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  32.   hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  33.   hi2c2.Init.OwnAddress2 = 0;
  34.   hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  35.   hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  36.   hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  37.   if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  38.   {
  39.     Error_Handler();
  40.   }

  41.     /**Configure Analogue filter
  42.     */
  43.   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  44.   {
  45.     Error_Handler();
  46.   }

  47. }
复制代码


3、循环发送数据;

  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */
  4.     uint8_t data[2] = {0x75, 0x04};
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration----------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();

  9.   /* Configure the system clock */
  10.   SystemClock_Config();

  11.   /* Initialize all configured peripherals */
  12.   MX_GPIO_Init();
  13.   MX_I2C2_Init();

  14.   /* USER CODE BEGIN 2 */
  15.     if(HAL_OK != HAL_I2C_IsDeviceReady(&hi2c2, (uint16_t)0xD0, 3, 1000))
  16.     {
  17.         hi2c2.Instance->CR1 |= I2C_CR1_SWRST;
  18.         hi2c2.Instance->CR1 &= ~I2C_CR1_SWRST;
  19.         HAL_Delay(2);
  20.     }

  21.   /* USER CODE END 2 */

  22.   /* Infinite loop */
  23.   /* USER CODE BEGIN WHILE */
  24.     while(1)
  25.     {
  26.   /* USER CODE END WHILE */

  27.   /* USER CODE BEGIN 3 */
  28.         HAL_Delay(20);
  29.         HAL_I2C_Master_Transmit(&hi2c2, (uint16_t)0xD0, data, sizeof(data), 5);
  30.     }

  31.   /* USER CODE END 3 */

  32. }
复制代码


4、用逻辑分析仪测量SCL和SDA,发现只有SDA有波形数据,而SCL一直为高,换I2C1和I2C3情况相同;
5.png

放大后

放大后


目前小弟水深火热中,请各位大神出手搭救
收藏 2 评论3 发布时间:2016-10-26 16:04

举报

3个回答
tanganrong-1584 最优答案 回答时间:2016-10-28 21:07:24
问题已解决,是STM32F302芯片IO损坏,更换后正常。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

高二毛 回答时间:2016-10-26 17:36:36
你可以尝试先用模拟I2C的方式调试一下,如果OK,再调试I2C的。这样可以先保证硬件连接没有问题。如果没有问题,剩下就是你配置的问题了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

tanganrong-1584 回答时间:2016-10-26 18:39:58
硬件连接没问题,同一个板子使用STM32F103C8T6使用硬件I2C驱动没问题,替换为STM32F302才出现这个问题,目前应急方案是先用IO模拟I2C方法,但希望有人能解决这个问题,让其他人以后可以少走弯路。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版