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

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

[复制链接]
STMCU小助手 发布时间:2021-12-29 23:47
  1. <p>这里给出一个实现用DMA传输IIC数据的实现过程</p>
复制代码
: X$ p6 ]) u, T) k6 H% L9 S4 M
这里咱们说3个点+ x# S  w9 m" c9 V# ~. T
1.检查IIC总线上是否有指定地址的器件- P- E, K: Z/ Y* u
2.IIC读取数据
* D# `) O0 A$ J# s, X+ _3.IIC写数据
) Z' [3 H7 g3 q4 v% d. ?2 G' I下面来一个一个详细说明
' {( ?/ V4 ~, J0 w5 `, t+ Y
& x' m9 }" O, y, ?# Q1.检查IIC总线上是否有指定地址的器件1 B0 `& \5 ~: b
( p2 V% T! x! K6 k; h! M0 W/ \$ \
  1. 1.判断是否总线忙,如果忙则等待
    + j5 h1 t8 X$ f
  2. 2.产生起始位
    3 z2 ~' |& ^9 ]0 w8 l4 c
  3. 3.等待起始位产生完成& P+ C  C. i+ l
  4. 4.发送器件地址(这里选择读写都是可以的)
    % |6 }* Q" \7 L7 }2 z3 ?* o# ~- `
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位
    - h) b6 S5 \+ q* R" I* m
  6. 6.清楚ADDR标志位
    - e) Q9 P& N6 h5 O6 o
  7. 7.产生停止位- j' U( }. R( n3 V$ H! I( V
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码
" l5 o, M& n3 c* B8 q; Y4 o' t' t( [2 i
2.IIC读取数据
* u; B9 O1 ~4 C# N# T' x8 S
  m4 G- k' p8 ]4 P* L8 {% c
  1. 1.判断是否总线忙,如果忙则等待
    7 _! w) H' L6 P. T1 i
  2. 2.产生起始位
    , J( W1 O+ r: u  Q
  3. 3.等待起始位产生完成
    ! [% ?9 r7 x) {( k  A! }
  4. 4.发送器件地址,这里方向上选择写数据
    0 n0 Q# K4 v+ {9 b
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    " A' k8 x8 N7 B- b/ c1 Q
  6. 6.清除ADDR标志位" C; W" W2 L5 |) @1 g( F6 ]% X$ S
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    " [. M; x6 [0 Y* [7 O* ~
  8. 8.发送要读取内存的地址
    % ^+ z: x1 G2 k$ M) V; [$ h
  9. 9.等待TXE位置位  Q( b3 i  j) [
  10. 10.再次发送起始位) R# w" Z' [8 |+ p0 _% q
  11. 11.等待起始位产生完成) T9 [2 g% K0 \
  12. 12.发送器件地址,这里方向上选择读数据4 C' E. g+ _! X
  13. 13.等待发送完成,通过判断ADDR标志位是否置位2 s4 W: j4 x$ Z% L" ?/ G1 Q
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    - W4 q  _+ J, W$ O
  15. 14.开始用DMA传输下面的数据
复制代码

7 ~8 V' P0 m0 |* \5 L, v. x4 p! ^3.IIC写数据
9 j) V7 c4 D3 ]. O& I  F9 D& m4 ~- }
; s3 p" H4 I# S$ U
  1. 1.判断是否总线忙,如果忙则等待
    # [4 _, ^1 `6 K6 v3 [3 V: ^8 R3 b' t
  2. 2.产生起始位1 \# p  p: w$ z- j$ P$ K
  3. 3.等待起始位产生完成
    1 ]/ t5 P- d5 J( l8 t
  4. 4.发送器件地址,这里方向上选择写数据
    ! D, P) i* q1 t4 K
  5. 5.等待发送完成,通过判断ADDR标志位是否置位
    . L, ?; o) [: `' `# L( {
  6. 6.清除ADDR标志位) |1 `2 }& |9 T0 r1 M+ z! ~
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位
    / Y# w. y  J. e, M' x/ ^/ a' Q
  8. 8.发送要读取内存的地址
    $ Y9 q4 A3 G. w; z  a  G6 Z3 K
  9. 9.等待TXE位置位
    & n' R4 O0 d! F& o, `$ c) ^8 W
  10. 10.开始用DMA传输下面的数据
    : [7 U$ Q  a# t
  11. 11.在DMA传输完成中断中产生停止位
复制代码
# }0 T" _! v2 B4 G  ^  e$ R
) E" }# Y+ @$ d, Q( D  R# `' K2 G

/ s/ S2 i  x6 |( x4 l9 M
收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似分享

官网相关资源

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