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

基于stm32f1硬件I2C busy问题

[复制链接]
攻城狮Melo 发布时间:2023-5-23 17:16
硬件I2C一直停留在busy
9 n2 ]1 ~0 s' e# w, K8 y; h我尝试配置f1的硬件I2C,写好程序后读取一下mpu6050的I2C地址,只读取一个byte,调试代码时发现I2C写操作没问题,但是读取操作加入之后I2C一直停留在busy。: c" G5 k* v0 J6 G9 ~
  1. //停在这里4 A# _1 F' w3 e3 p$ q, F. {
  2. while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));/ b% i% G0 w" ~( f; q4 G0 B, x
复制代码

- K7 C* U6 A4 b( \看了几篇博文,开关I2C->CR1的最高位SWRST并且重新初始化也不行,误打误撞遇到了博主lalalaxy的文章,文中提到需要在接收数据前把SDA拉高,还提到要注意数据手册中的清零细节。
5 [+ {, n& f4 m3 \8 h5 p
* Z7 l0 g+ @; j! V. D' T+ {+ S/ M5 X重新查看手册发现我之前漏掉EV6_1的细节:
# p/ l, H) X9 }" d' F. t* m' F
/ Y) o+ e$ a) I  F/ M2 u! ]. F
9d959a5bce9d4bcdbb77e0fbf4150e8f.png 8 o* |$ z/ E- d# Q) ?
8 X4 }6 t6 ?4 D' U/ m  M" y
图中提到EV6_1这个事件对应只读取一个byte时的操作,并且在标准库中没有相应的flag操作。所以这里的操作需要手动完成,即在事件6之后加:4 H" @3 P* Q6 N( k
, M: e3 v! y! l/ K8 G
  1. //事件6+ N# B+ U" [4 a& n0 L. Y( ?
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
    % I( |1 Q, l$ I* R
复制代码
  1. //事件6% [+ H; I& [% C# U6 |, u
  2. while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));( Y' `) q  N* X5 u+ L- g3 |
复制代码
6 G& F, L: n; c: D; n+ i* w
我没有在读数据前将SDA拉高,I2C通讯也可以正常读取,目前尚不知原因。
- U/ M" l/ K5 ?& F8 E9 t( d, {6 X5 A* K! O0 ~- F
67f078b7e07640b5bf3bb83fcf5945fa.png - g8 M# m$ p9 b  n; l
) E2 G8 Y! t" o! \6 f7 w
GPIO口初始化错了也有可能造成busy的情况。  E) G0 a, \+ O, ^: F- H
————————————————  t8 G# K* n! Q3 Z& g
版权声明:外星人请走开
* w' T7 W" u* b: F5 t, c+ @3 z3 |如有侵权请联系删除
1 t. i9 `. d3 x: U; L' U$ Q0 K% b% O1 R1 m5 M
' g) _. Z- h7 S) E1 l- }9 Y, [" r

" F' M5 s% B7 X) r/ R8 q; c% F, f
收藏 评论0 发布时间:2023-5-23 17:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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