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

基于stm32f1硬件I2C busy问题

[复制链接]
攻城狮Melo 发布时间:2023-5-23 17:16
硬件I2C一直停留在busy
8 _& y# Z, Z% {) f我尝试配置f1的硬件I2C,写好程序后读取一下mpu6050的I2C地址,只读取一个byte,调试代码时发现I2C写操作没问题,但是读取操作加入之后I2C一直停留在busy。. F  ]$ g% i2 w& ]- b/ M- ~
  1. //停在这里
    0 H" e* ]4 _) s1 s  |8 i
  2. while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));1 }$ K4 r7 m* w/ g! I( ~: a) `
复制代码

) Q/ m4 M; l6 w看了几篇博文,开关I2C->CR1的最高位SWRST并且重新初始化也不行,误打误撞遇到了博主lalalaxy的文章,文中提到需要在接收数据前把SDA拉高,还提到要注意数据手册中的清零细节。
, P( D) S" w  _7 v2 e0 d2 i2 v: ]/ o6 D0 \+ t& _5 Z/ `  V7 U% [
重新查看手册发现我之前漏掉EV6_1的细节:' N  D% a/ z; r' w9 [! t

. `/ B+ P7 r/ J; ?$ W0 y. \
9d959a5bce9d4bcdbb77e0fbf4150e8f.png
9 l3 u9 G# l) F- S
3 ?- e& X$ ]' w$ y( }  L图中提到EV6_1这个事件对应只读取一个byte时的操作,并且在标准库中没有相应的flag操作。所以这里的操作需要手动完成,即在事件6之后加:$ O  q* q4 o" i+ }4 v) W6 ^
0 }' P& Z$ v- J% c: s3 Q
  1. //事件6  ]4 v; I5 t* A% q0 b
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    ; X0 `- Z, Y% a$ X% B5 A2 N
复制代码
  1. //事件66 T- L8 p) E9 r+ X; l$ B
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    1 G, c9 G9 {+ c0 x4 {  n
复制代码
* f! C7 V, t5 W- O
我没有在读数据前将SDA拉高,I2C通讯也可以正常读取,目前尚不知原因。
* j- j7 x4 _0 a2 Y
( g) ?5 ~8 g- j# G) j
67f078b7e07640b5bf3bb83fcf5945fa.png
% @6 i5 i# h" x
# o) H" T5 X6 Q' `5 ?2 K1 ZGPIO口初始化错了也有可能造成busy的情况。
) t7 {9 U8 a8 H/ z————————————————+ l+ a' S' @* R) B4 g
版权声明:外星人请走开
6 F1 j% Q: b# H$ X" \) _2 z( I5 }如有侵权请联系删除+ z- m; Q+ q' N. T- o9 o

9 m0 K4 ~) z3 n
2 j: R' B1 ?1 z% f  _; J: R
- ^3 Q& i* z2 z9 G5 n$ ~, s6 }
收藏 评论0 发布时间:2023-5-23 17:16

举报

0个回答

所属标签

相似分享

官网相关资源

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