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

【经验分享】STM32硬件IIC之DMA传输数据

[复制链接]
STMCU小助手 发布时间:2021-12-29 23:47
  1. <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码
& b) b3 {" ]" [7 a
这里咱们说3个点6 ]$ U/ ~8 t, Z3 \6 e9 Q0 G) d8 ^
1.检查IIC总线上是否有指定地址的器件) L2 @/ }6 ]- O. t; f- q. {
2.IIC读取数据
* ]( t, W8 o3 ^  p* c4 e3.IIC写数据
; }; v9 G& B8 V0 u3 U- }# [下面来一个一个详细说明
2 p! g0 H& S9 X. U# e  j
( x5 g0 ^/ t. t4 Q; j$ d1.检查IIC总线上是否有指定地址的器件
7 q8 L( i! d/ s+ y5 F- T
. U6 N$ `0 j5 U# V- b& z
  1. 1.判断是否总线忙,如果忙则等待/ l* M$ s% ?: C: Q0 R- n, x  T
  2. 2.产生起始位
    6 b- y& Y9 B# _; [8 [; ]5 e& l
  3. 3.等待起始位产生完成
    8 B: O, t: T4 t0 t" V' U4 }
  4. 4.发送器件地址(这里选择读写都是可以的)
    1 H  }4 ]$ `0 ^6 X6 u$ ]$ l
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位% p8 y1 t5 J) q0 }7 u+ V1 F
  6. 6.清楚ADDR标志位
    0 r" d# Z5 N6 m0 Z& _) S
  7. 7.产生停止位1 P" A, g9 V2 p
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码

+ [7 \, k6 A3 O& s1 V2 T2.IIC读取数据
, K% w) o6 G: ^1 J( z/ p( m
. o+ V+ i7 x+ @' I, z6 H
  1. 1.判断是否总线忙,如果忙则等待
    # a/ Q/ ~) G$ d5 v# i3 u
  2. 2.产生起始位
    ; y. J- \4 X1 E* x" b1 p7 @
  3. 3.等待起始位产生完成
    ; M3 r0 S% q( }0 p" a, O
  4. 4.发送器件地址,这里方向上选择写数据
    ) [- T' g# U& k' o
  5. 5.等待发送完成,通过判断ADDR标志位是否置位' n9 R9 A# ~! @- R: [: k5 o
  6. 6.清除ADDR标志位# j- v9 z3 Y* y* c: T' ^) s
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位4 ]( x; h) K  {/ c: J& T
  8. 8.发送要读取内存的地址
    : p( g/ s, g% ?! E& K" }
  9. 9.等待TXE位置位, N9 k9 G7 G- ^5 X" D! P- K: _6 Q
  10. 10.再次发送起始位
      i8 d* a& P4 K+ k
  11. 11.等待起始位产生完成* v7 w4 ^* S* k3 I7 q6 Z7 j
  12. 12.发送器件地址,这里方向上选择读数据5 @0 H% A! R! g2 N
  13. 13.等待发送完成,通过判断ADDR标志位是否置位
    ' k5 B& B7 L5 R$ K" q( j! }
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    # ?9 p% x: J# B& f. B
  15. 14.开始用DMA传输下面的数据
复制代码

0 a. ^9 h9 H9 z: I) h3.IIC写数据
, X" |: T& N. K# \) w! ?$ N" R  }' {1 n' e
  1. 1.判断是否总线忙,如果忙则等待
    1 T+ Y! h- t. ^$ f5 B5 v. a
  2. 2.产生起始位8 z. K; z$ Q; y' ?
  3. 3.等待起始位产生完成
    ' k' y& q8 H" e/ V2 l/ w
  4. 4.发送器件地址,这里方向上选择写数据* n# O% C- w- V5 j* t4 K3 j* I
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    2 x- E8 d( {" i, |6 C
  6. 6.清除ADDR标志位% |2 ~& j* l; Z
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    / o4 G- ]5 i. C" h
  8. 8.发送要读取内存的地址
    2 P& l0 A) I5 g+ Q& V
  9. 9.等待TXE位置位
    2 @; }* V/ `4 s; ?+ o3 C6 E, }
  10. 10.开始用DMA传输下面的数据
    2 O. ]+ H5 J# _3 {+ V6 Q
  11. 11.在DMA传输完成中断中产生停止位
复制代码

5 v$ w* @' z0 m3 M  b7 b# ]7 d+ K! a" }

: ~7 T2 _$ g. P" [8 `
赞 收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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