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

STM32 I2C超时

[复制链接]
呆到深处自然萌 提问时间:2017-11-23 15:58 /
I2C 初始化代码
  1. void MX_I2C1_Init(void)
  2. {

  3.   hi2c1.Instance = I2C1;
  4.   hi2c1.Init.ClockSpeed = 100000;
  5.   hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  6.   hi2c1.Init.OwnAddress1 = 0;
  7.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  8.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  9.   hi2c1.Init.OwnAddress2 = 0;
  10.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  11.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  12.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  13.   {
  14.     _Error_Handler(__FILE__, __LINE__);
  15.   }

  16. }

  17. void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
  18. {

  19.   GPIO_InitTypeDef GPIO_InitStruct;
  20.         //GPIO_InitTypeDef GPIO_InitStruct;
  21.   if(i2cHandle->Instance==I2C1)
  22.   {
  23.   /* USER CODE BEGIN I2C1_MspInit 0 */
  24.                 __HAL_RCC_I2C1_CLK_ENABLE();
  25.                
  26.                
  27.                 GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;      //????
  28.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;   //GPIO?????
  29.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;         //???
  30.                 HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

  31.     HAL_GPIO_WritePin(GPIOB, 6, GPIO_PIN_SET);       //??SCL
  32.     HAL_GPIO_WritePin(GPIOB, 7, GPIO_PIN_SET);       //??SDA


  33.                
  34.                 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
  35.                
  36.                 i2cHandle->Instance->CR1= I2C_CR1_SWRST;          //??I2C???
  37.                 i2cHandle->Instance->CR1= 0;              //????(??????)
  38.   /* USER CODE END I2C1_MspInit 0 */
  39.   
  40.     /**I2C1 GPIO Configuration   
  41.     PB6     ------> I2C1_SCL
  42.     PB7     ------> I2C1_SDA
  43.     */
  44.     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  45.     GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  46.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  47.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  48.     /* I2C1 clock enable */
  49.    //__HAL_RCC_I2C1_CLK_ENABLE();
  50.   /* USER CODE BEGIN I2C1_MspInit 1 */

  51.   /* USER CODE END I2C1_MspInit 1 */
  52.   }
  53. }
复制代码
测试发现返回为超时错误。逻辑分析仪抓出数据还没有发送从地址
收藏 1 评论2 发布时间:2017-11-23 15:58

举报

2个回答
springvirus 回答时间:2018-3-8 09:10:40
传说中的STM32硬件I2C? 不妨试试软件模拟I2C吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jjbboox 回答时间:2018-3-8 10:18:52
楼主用的HAL库,传说中的所谓硬件I2C问题应该不存在。
楼主设的是低速模式,换成高速模式看一下。

在CubeMx中将I2C的改为高速。
HAL_I2C_Read和write的timeout参数设大一点,或者干脆设为最大值,看看通讯是否成功。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版