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

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

[复制链接]
STMCU小助手 发布时间:2021-12-29 23:47
  1. <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码

+ a1 o. ~: q% Q* g这里咱们说3个点
2 F# N2 E7 e! E; y! F/ q$ d+ D0 }: [1.检查IIC总线上是否有指定地址的器件
0 ~' e( \& ?( k7 \2.IIC读取数据, F0 {+ P% v  C3 b( O/ E' X* d7 C
3.IIC写数据4 }  V4 T% d8 f3 P2 a# C
下面来一个一个详细说明
! T" W2 ^( u3 O6 T/ m  K) g5 _, f- N% M& L
1.检查IIC总线上是否有指定地址的器件* z( ^0 d+ J( Q( N
7 e: ~7 q. |9 z8 W2 s# o
  1. 1.判断是否总线忙,如果忙则等待
    , @3 H: z. W( l  t  D
  2. 2.产生起始位
    3 Y! _8 ]( T5 K- A
  3. 3.等待起始位产生完成
    5 C: S! I$ Q. h
  4. 4.发送器件地址(这里选择读写都是可以的): H5 W# V  G5 b' R1 ^/ I9 \/ X
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位/ o0 Q! ]5 u2 {' u. s" u1 J
  6. 6.清楚ADDR标志位
    0 m& n+ Z5 [! [
  7. 7.产生停止位3 H2 g# C* H% e5 K& ^( f. `4 s% t! c
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码
/ H' D0 {; P, s) c! ~- }  J
2.IIC读取数据: q* J8 o) [" P- m' s1 M
  c' J$ |& S# T1 S1 x' t$ ]# C
  1. 1.判断是否总线忙,如果忙则等待4 B) q. t; g, Y+ x6 T7 F8 P
  2. 2.产生起始位: f3 W. }1 b) y5 j1 A
  3. 3.等待起始位产生完成
    * _2 E5 A' X& c6 T3 P  ^
  4. 4.发送器件地址,这里方向上选择写数据) v) @1 z+ L' d0 J, v
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    3 b" a6 Z8 c" L5 M
  6. 6.清除ADDR标志位8 H7 X8 d  `/ D0 d
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    * D5 b7 f' s& {
  8. 8.发送要读取内存的地址
    ( I, @5 R9 I6 p9 c1 u
  9. 9.等待TXE位置位
    2 `' F" u2 |3 @& ^* x1 v5 Y2 l, A" o
  10. 10.再次发送起始位: \. u' w2 |( h* N  q. Q! c
  11. 11.等待起始位产生完成) f9 C3 r5 M# n. a4 F3 x' o, A
  12. 12.发送器件地址,这里方向上选择读数据
    $ n" G& ~6 Z; h& Q
  13. 13.等待发送完成,通过判断ADDR标志位是否置位
    ) ~6 v! E+ ~5 W5 B# Q  n2 v
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK0 U+ ^% c" J; \! r1 n# C( O
  15. 14.开始用DMA传输下面的数据
复制代码

; S% r+ R( E+ @+ p9 ^) u3.IIC写数据7 }# O, @8 k3 `/ r% j" S4 \7 p
* U. R/ p( [6 ^# }. t2 O/ g4 r
  1. 1.判断是否总线忙,如果忙则等待
    ( a* K0 A, S- H
  2. 2.产生起始位
    ! q4 @/ u1 l% V" n/ ^8 i1 h* L
  3. 3.等待起始位产生完成) b1 v' Y; }" S; B$ m; Z  A
  4. 4.发送器件地址,这里方向上选择写数据
    ; q9 t$ Q6 P2 H
  5. 5.等待发送完成,通过判断ADDR标志位是否置位7 @# ?7 j- M$ b
  6. 6.清除ADDR标志位
    ! u7 [" S) \  y9 f0 w: c
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位6 N: E1 ~& o1 \1 v& ^1 W/ e
  8. 8.发送要读取内存的地址* C  y) S, q0 D
  9. 9.等待TXE位置位
    ' x- Q. H& {- {: Z$ j/ r
  10. 10.开始用DMA传输下面的数据5 y4 T5 ^4 V) v" b$ r. q
  11. 11.在DMA传输完成中断中产生停止位
复制代码

8 @3 i$ U" t  S/ {. N4 y
/ _" p) P% z8 R, J! b; J5 q6 x# g; K
收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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