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

基于stm32f1硬件I2C busy问题

[复制链接]
攻城狮Melo 发布时间:2023-5-23 17:16
硬件I2C一直停留在busy
! [8 O  b0 \. d我尝试配置f1的硬件I2C,写好程序后读取一下mpu6050的I2C地址,只读取一个byte,调试代码时发现I2C写操作没问题,但是读取操作加入之后I2C一直停留在busy。
9 x) m) I7 P! u
  1. //停在这里  M2 s; ?* ^3 \+ X8 M
  2. while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
      p: N, R4 d: @8 K* ]( Q
复制代码
' \# d" p) _+ ]9 d1 \1 Q1 x
看了几篇博文,开关I2C->CR1的最高位SWRST并且重新初始化也不行,误打误撞遇到了博主lalalaxy的文章,文中提到需要在接收数据前把SDA拉高,还提到要注意数据手册中的清零细节。
" x& E9 {/ w5 @9 V# a' K& e, |' I# S4 k3 y
重新查看手册发现我之前漏掉EV6_1的细节:& X8 _7 q! n1 K: j9 S

  ?* J3 _) E, t3 c% c! p: _
9d959a5bce9d4bcdbb77e0fbf4150e8f.png
& p& A3 K. l2 C  J2 c
) e) h0 B3 h' ^* C7 _4 n/ P图中提到EV6_1这个事件对应只读取一个byte时的操作,并且在标准库中没有相应的flag操作。所以这里的操作需要手动完成,即在事件6之后加:3 }( b3 u7 \' b( o+ S

* \8 H8 d% w) o" q) Q& n
  1. //事件6
    " s2 f1 P" s1 B/ `
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    4 Q) G+ |* M/ v
复制代码
  1. //事件6; h# ?8 z* u( l( }1 F- _! C
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    9 m6 D0 I! O# B
复制代码
8 e) s: [- c, r1 O: x0 F
我没有在读数据前将SDA拉高,I2C通讯也可以正常读取,目前尚不知原因。
! h4 y$ M. k% u& H; l8 F2 M' U1 ?* E4 G6 r8 ~# H+ ^
67f078b7e07640b5bf3bb83fcf5945fa.png
% T* e( m5 ^5 ]  i& \) v
, v2 P9 t' j9 ^# \/ g7 c, A1 F- d9 HGPIO口初始化错了也有可能造成busy的情况。0 `7 w+ a: E) n7 ~, j, c
————————————————
9 P9 B# M7 p- Z! C2 |( L+ R版权声明:外星人请走开+ j9 H0 `5 |9 X, a2 K. N8 D
如有侵权请联系删除
+ O& I( [4 W' m2 P
  Q- Y9 I+ M: i, ^

0 h$ h7 M- c- H
, i. ~3 R' h5 ~4 r' a6 w
赞 收藏 评论0 发布时间:2023-5-23 17:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版