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

STM32F407 硬 件I2C速度达不到400K

[复制链接]
chenbanx 提问时间:2018-9-25 15:55 /
  我在使用STM32F407的硬件I2C,工程是用CUBE生成,速度设定为400KHz,但实际测试只有297KHz,求大神们指点下,用CUBE生成的硬件I2C,能改动的参数不多,附上初始化,求大神们指点下!谢谢!
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 400000;
  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();
  }
收藏 评论7 发布时间:2018-9-25 15:55

举报

7个回答
butterflyspring 回答时间:2018-9-25 16:27:16
你是用什么时钟?如果是外部时钟,你的外部时钟(和你实际的外部晶体)和PLL在cubeMx的配置是正确的吗?

评分

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

查看全部评分

xiaolingoei 回答时间:2018-9-25 19:09:06
据说是STM32本身的问题,即使你用了hal库也一样。
我提供一种解决方法给LZ参考:
我是用两个GPIO口模拟的IIC通信,来读取EEPROM,没有任何问题。因为GPIO的通信速率有100M,模拟IIC的通信达到400K很容易。
这个地方新手容易把应答信号写错,其他的就没什么了,祝LZ早日解决问题

评分

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

查看全部评分

desertsailor 回答时间:2018-9-25 19:10:13
肯定是时钟设置不对,要么是系统时钟,要么是I2C的时钟

评分

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

查看全部评分

七哥 回答时间:2018-9-26 09:21:23
像这种情况,一般是时钟设置不对。
STM32CubeMX设置的时钟也不一定对,不排除会有BUG。自己调试,看一下各时钟都是多少,尤其是观察下系统时钟。

评分

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

查看全部评分

chenbanx 回答时间:2018-9-26 10:05:08
这是我配置的时钟,各位大神有好建议不?我看不出时钟跟I2C速度慢的关系。
sys_clk.jpg
chenbanx 回答时间:2018-9-26 10:07:01
@ xiaolingoei ,不想用软件,项目所限。
涛哥2035 回答时间:2018-9-26 10:11:19
换用LL库试试

评分

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

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版