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

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

[复制链接]
STMCU小助手 发布时间:2021-12-29 23:47
  1. <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码
2 m9 c* e7 I' [( w/ f
这里咱们说3个点$ y; ?* j7 i8 A, o8 e
1.检查IIC总线上是否有指定地址的器件+ A+ I" m1 m$ {# Y! [% T5 n/ ]' p7 }
2.IIC读取数据
2 l6 l( q' h$ P% ?  u3.IIC写数据: y/ G; K" ~9 ^( {
下面来一个一个详细说明$ n  G6 F( ]9 a8 B5 Y3 k- W
% E& r$ v" b) R" T+ l7 e1 B; y+ ]
1.检查IIC总线上是否有指定地址的器件9 h1 c2 x. t( O5 X. j7 x) d& U

9 q8 p3 W0 N! S
  1. 1.判断是否总线忙,如果忙则等待# O8 V3 N1 C3 K2 u$ n
  2. 2.产生起始位
    - \! n4 ~$ R+ O, K# ~2 w+ _1 P
  3. 3.等待起始位产生完成" p% e* g6 u, J  x% z& j
  4. 4.发送器件地址(这里选择读写都是可以的)
    ' g9 K3 R" _& d' o0 G7 v
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位8 i& e( o  x* t5 p
  6. 6.清楚ADDR标志位
    , k( c8 F9 \' y. N0 O
  7. 7.产生停止位
    & I  p6 C. I0 u  D/ A
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码

$ i- L+ T+ o* {$ d! S* F2.IIC读取数据
( R) A& m* U/ q; p
- P' {( R; c, D- b# t
  1. 1.判断是否总线忙,如果忙则等待" w+ z5 G6 t& u" P
  2. 2.产生起始位
    + `) M# u6 M* H! x8 l: q! G8 [1 j
  3. 3.等待起始位产生完成1 E$ o- W8 P$ ^! E
  4. 4.发送器件地址,这里方向上选择写数据' ?; L+ Q+ n  y( K) }5 ^
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    9 L: V2 F! b/ B: U( ]1 @' f
  6. 6.清除ADDR标志位
    * V3 G* Q- r& {+ p
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位' I  G& g: K6 `$ o
  8. 8.发送要读取内存的地址
    " D- u% W: {, D" A% K, s1 h
  9. 9.等待TXE位置位
      F' F! m( S4 Q  o9 X4 h
  10. 10.再次发送起始位! k& M1 J8 y$ \. c0 b
  11. 11.等待起始位产生完成
    ! b7 U1 X/ ^, J+ }
  12. 12.发送器件地址,这里方向上选择读数据1 {, f/ Q& I5 r( M6 o
  13. 13.等待发送完成,通过判断ADDR标志位是否置位5 K" ?1 j& E' u0 e, L
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    : k0 B* u, z  l  Z' M* N
  15. 14.开始用DMA传输下面的数据
复制代码

, g) _/ N& p% o  w; C) X3.IIC写数据
- W2 \1 E+ w8 ?/ s" L: p8 M# A0 o' S5 B' O* I8 ~$ C% A
  1. 1.判断是否总线忙,如果忙则等待- r5 o2 a5 T5 C
  2. 2.产生起始位
    / D! q/ o2 u0 ~7 h* y; z
  3. 3.等待起始位产生完成
      ]2 H7 Y9 e* W3 [, F
  4. 4.发送器件地址,这里方向上选择写数据$ i5 r8 ]/ s4 a# J4 T3 L
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    + v9 N" X+ w3 R+ ]
  6. 6.清除ADDR标志位
    ( x2 s$ @: F0 G* c; x/ |9 n
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    7 b% L0 w( x- l, |, s3 f
  8. 8.发送要读取内存的地址2 U7 W3 v' X" \
  9. 9.等待TXE位置位
    4 U, G3 i% q- _/ Y  G+ _
  10. 10.开始用DMA传输下面的数据
      B! x5 S4 d) U8 L
  11. 11.在DMA传输完成中断中产生停止位
复制代码

$ W8 G: ]6 E+ o) e. Q; B4 ?+ B4 S1 K: G0 K$ P  Q" Y& Z* n2 b
) _7 Q4 A& b0 s8 C8 R6 E; H) n" A! u8 q
收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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