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

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

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

9 r! X) b' t+ m; F2 Y* w1 a这里咱们说3个点
4 @8 w" p- l2 C1.检查IIC总线上是否有指定地址的器件/ \, E! n9 X  n7 y# e+ x
2.IIC读取数据0 J2 l) [8 @* g- o! T& Y4 O
3.IIC写数据2 U2 g6 u5 P% b7 i/ Y
下面来一个一个详细说明
( d6 x2 k0 @- Y" b  ?1 }0 N* x, r+ Y2 K
1.检查IIC总线上是否有指定地址的器件& I; l: w0 N- }0 W4 h0 n
. T" O3 l6 I; W4 s8 N' X
  1. 1.判断是否总线忙,如果忙则等待1 E; \2 O& B# Q( h
  2. 2.产生起始位& d9 W. }4 X7 ]! j) H2 E
  3. 3.等待起始位产生完成
    & `' M9 ^+ `  g1 l2 d8 ?( o
  4. 4.发送器件地址(这里选择读写都是可以的)3 A( |( w3 ^# ?3 z. [/ \
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位
    / b# O1 l* d6 j
  6. 6.清楚ADDR标志位
    5 T3 m+ }# T+ `) u5 Q: L) c1 {7 O
  7. 7.产生停止位0 X% y) P$ B, R3 y) S% J
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码

$ b. K/ M- }7 X3 z8 V1 K; Y2.IIC读取数据
- Z. g; x% W$ ~0 \5 K3 x, P# N" z$ @* m) M5 i
  1. 1.判断是否总线忙,如果忙则等待- C6 s2 K" P) X
  2. 2.产生起始位
    * L0 y1 p. f( B3 ~' v+ U7 H
  3. 3.等待起始位产生完成
    # @" f7 \3 {* E: `' q
  4. 4.发送器件地址,这里方向上选择写数据4 P4 K3 X9 _: ?, `1 K
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    # `5 ^0 A' a! Y0 x; G1 Y
  6. 6.清除ADDR标志位# J, m9 \1 h' j, Q
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位- d# o, A* z: ]
  8. 8.发送要读取内存的地址
    9 m; q; P, j! n5 \5 z) q# ^
  9. 9.等待TXE位置位0 T. w& i3 v( n; u
  10. 10.再次发送起始位
    / V! u# X" W7 Q; j0 I: g4 v; K
  11. 11.等待起始位产生完成/ x7 s, A; X! Z
  12. 12.发送器件地址,这里方向上选择读数据
    8 _7 q; J0 U/ {- m
  13. 13.等待发送完成,通过判断ADDR标志位是否置位6 p6 }3 z+ E4 p4 r2 |; ~
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    & w0 L" o/ l" s
  15. 14.开始用DMA传输下面的数据
复制代码
# [# k1 ~, ]& V6 o9 X8 t* v5 X
3.IIC写数据+ ], r/ \0 ?5 L; {* e! j7 u- d

  |9 q7 S( E( T( X6 |
  1. 1.判断是否总线忙,如果忙则等待( l5 v4 v; f) {  D
  2. 2.产生起始位
    3 u, c/ Q. W/ v$ y3 [; ]
  3. 3.等待起始位产生完成
    ( r3 u+ D6 Y$ A) L
  4. 4.发送器件地址,这里方向上选择写数据4 a9 Z. e: W3 a8 l
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    9 N) L! a+ a; b7 U3 w. k
  6. 6.清除ADDR标志位
    # G! t( I5 r& h8 M. M+ [9 [
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    , j( ?' y3 n. ^3 X, C
  8. 8.发送要读取内存的地址
      J* R8 i0 R8 t2 j
  9. 9.等待TXE位置位
    + m9 ]: l1 H6 ^- z- M5 V
  10. 10.开始用DMA传输下面的数据, s; z2 t0 C* t! B' y, y
  11. 11.在DMA传输完成中断中产生停止位
复制代码
# V: T# l$ _2 ?- T

: w2 S! K0 y" F1 G# e6 j1 Q" C7 {. a$ g7 {! _( u% c; v8 ~
收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版