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

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

[复制链接]
STMCU小助手 发布时间:2021-12-29 23:47
  1. <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码
& q: B8 }" J7 M5 C
这里咱们说3个点! Y! z+ O- O5 ^8 _6 C# q4 h4 r
1.检查IIC总线上是否有指定地址的器件# Q6 C" m5 ?, t
2.IIC读取数据$ e8 x1 Z# U  P  U; |" J
3.IIC写数据% V4 k" ]1 }$ j; L: d/ P  n: N
下面来一个一个详细说明8 J0 q9 g0 g9 T

4 j9 N/ v0 [' n9 A+ g" L  z$ D3 ~* V1.检查IIC总线上是否有指定地址的器件
! h9 j5 m9 o3 g$ B& c- Q0 B" ]6 z: C& L1 w
  1. 1.判断是否总线忙,如果忙则等待% J  n+ S4 Z; C$ ^' o2 _1 L* P
  2. 2.产生起始位4 |# y. q  B3 \0 u- h
  3. 3.等待起始位产生完成
    & P; _7 R' T0 E, W
  4. 4.发送器件地址(这里选择读写都是可以的)6 [2 }0 j4 C! K. w3 T7 F
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位. A. V3 ?0 M! f# @) r# Z0 o
  6. 6.清楚ADDR标志位
    4 z! u7 |- |% J  j/ @9 h' S
  7. 7.产生停止位
      Z# X9 W: Z9 a9 w# K) e
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码
9 P. w, m5 F: h
2.IIC读取数据6 d* _2 z% q0 D; X0 s6 v& H
' \* N- S6 h6 e. U
  1. 1.判断是否总线忙,如果忙则等待2 S' D- d; n" @" o& M5 V
  2. 2.产生起始位. y9 g. f4 S! a. }
  3. 3.等待起始位产生完成
    ' W- E. c- k$ J0 k' E
  4. 4.发送器件地址,这里方向上选择写数据
    # ]/ {9 O( U+ R6 c) z" e2 V8 V. \
  5. 5.等待发送完成,通过判断ADDR标志位是否置位3 x* R' ^. W+ C9 s
  6. 6.清除ADDR标志位2 m8 ^* j! q! L0 X6 r1 g
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位) H: X" G' h- }" p- u# C
  8. 8.发送要读取内存的地址
    % W$ J) H% M, Y$ W- N
  9. 9.等待TXE位置位1 B" n' [' W& W$ K4 l+ N
  10. 10.再次发送起始位
    * k! Y4 g) b" r: T3 v
  11. 11.等待起始位产生完成
    ; l+ |) i6 C# l! q9 y
  12. 12.发送器件地址,这里方向上选择读数据
    3 P8 f! C, u' v/ Z2 ?
  13. 13.等待发送完成,通过判断ADDR标志位是否置位
    # h3 D$ D, ~6 Q: T6 `1 k
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    ; M) n1 r6 l! w4 z) j, D- x9 ?
  15. 14.开始用DMA传输下面的数据
复制代码
. Z3 m; P: H9 t! O2 f  |
3.IIC写数据- ~8 q% b! H0 S/ e+ g9 w
) l& K. N, U6 p
  1. 1.判断是否总线忙,如果忙则等待
    ! F) d2 @- z0 @7 |" C  j
  2. 2.产生起始位8 M' O' H, h) G5 A; ^
  3. 3.等待起始位产生完成' B7 x, h+ L& n/ o
  4. 4.发送器件地址,这里方向上选择写数据
    1 i% @, A$ v3 a$ y& o/ o# m
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    4 F& v8 I$ ?6 ~' f
  6. 6.清除ADDR标志位
    3 V3 a* e/ n: t1 C7 y. Z$ h
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位9 E- c, _" c9 u: U
  8. 8.发送要读取内存的地址
    5 {  f) q) o/ ]% G" g& `
  9. 9.等待TXE位置位
    3 j, U& p' k* B2 n  j( b- w2 c& C
  10. 10.开始用DMA传输下面的数据
    7 d6 T, I( I2 k
  11. 11.在DMA传输完成中断中产生停止位
复制代码

+ }( C2 L( f/ V9 p0 q  [2 N, \2 M4 ^7 G$ I/ C4 L
. |) L$ P" P5 N1 f" H4 ^
收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似分享

官网相关资源

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