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

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

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

; i# r, s# i3 N1 e# Y这里咱们说3个点
7 o; F. P2 V2 C- Y* R1 g1.检查IIC总线上是否有指定地址的器件4 q0 g$ y$ U' q
2.IIC读取数据/ w: m5 v; G5 V/ O+ t9 F0 }5 j# m% H
3.IIC写数据% Z6 G6 l7 U1 b: L- k
下面来一个一个详细说明7 b/ I, m; _  g% v

6 Q. d' ^- I6 s1.检查IIC总线上是否有指定地址的器件
  ]0 b, b7 w7 F/ f+ C/ h& T+ U9 J+ \, V2 ?# j! C
  1. 1.判断是否总线忙,如果忙则等待$ z) U/ K/ ]7 y& K3 q( H. X
  2. 2.产生起始位
    4 [% I$ |; e3 }
  3. 3.等待起始位产生完成8 S5 ~! a/ ?/ J( B$ ^: f, N9 G" {4 a
  4. 4.发送器件地址(这里选择读写都是可以的)
    ) f+ q! l" N4 T3 m5 k
  5. 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位, W3 @. a2 ~) L2 X: e; g) L) @
  6. 6.清楚ADDR标志位
    . q( _% s4 t) [
  7. 7.产生停止位& d; x9 v; P% f. w: ]$ ~1 F
  8. 8.通过判断是否有ACK,就可以判断是否有指定地址的器件
复制代码
! a6 o& H" e! L7 J8 g
2.IIC读取数据
2 V) W% M8 W% I
5 F& ^, M+ `1 [) F; J# u) }% [
  1. 1.判断是否总线忙,如果忙则等待
    , s' Z( e$ ^: |( d8 I
  2. 2.产生起始位% p$ u' i- J/ [$ b; a
  3. 3.等待起始位产生完成3 W# I0 K* K  d1 I7 E
  4. 4.发送器件地址,这里方向上选择写数据0 W. }! F; B9 v' X
  5. 5.等待发送完成,通过判断ADDR标志位是否置位0 o! l" ]/ I" v+ m3 I; x
  6. 6.清除ADDR标志位
    # ]+ c5 H' V' L9 {4 X8 s
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位$ n4 u7 D  M, _3 B  z
  8. 8.发送要读取内存的地址+ c. ^+ ^4 n6 z6 m/ f8 A: e# S) j$ ]
  9. 9.等待TXE位置位
    ! v0 Z, L. Q; r5 o
  10. 10.再次发送起始位5 l/ D% t7 m& y- k/ z& |0 ]( ?
  11. 11.等待起始位产生完成
    4 D' P" ]" ]2 c3 M8 N, g
  12. 12.发送器件地址,这里方向上选择读数据
    " c0 Q  q  G2 s2 s3 J0 S! J) n
  13. 13.等待发送完成,通过判断ADDR标志位是否置位, F& Q: `2 L2 }' O' J" L. l
  14. 14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK
    ; p( H7 `& \8 y
  15. 14.开始用DMA传输下面的数据
复制代码
* E. l" l: ?7 M2 Z8 ?* {4 v
3.IIC写数据
: f8 P0 L- q$ L% I+ O$ I  z+ P0 I" P/ i  \' s" Q
  1. 1.判断是否总线忙,如果忙则等待
    5 [- A( @, _6 H$ g- w5 t
  2. 2.产生起始位
    # u% B/ [# f% x+ [9 \9 ]
  3. 3.等待起始位产生完成
    : ^( F3 \& m+ J! u+ V( O) q
  4. 4.发送器件地址,这里方向上选择写数据
    2 g- ~: @# d9 o' C
  5. 5.等待发送完成,通过判断ADDR标志位是否置位2 ^5 o1 Z; H  |( Z# S
  6. 6.清除ADDR标志位
    ' _" Q: u; r2 `
  7. 7.同时判断TXE位,这个在发送数据完成之后,也会被置位! K0 V2 {6 l3 H" o# x* v
  8. 8.发送要读取内存的地址
    : D9 H9 I' ^0 f
  9. 9.等待TXE位置位
    9 }! C! t" M3 `3 q3 c+ T
  10. 10.开始用DMA传输下面的数据
    & U  X6 h/ @* T. J  U3 R
  11. 11.在DMA传输完成中断中产生停止位
复制代码
' @: s3 s# C0 e5 Y4 p) T
% l* Z9 O7 D' k; q6 i

( y; I) y& f( h' D9 v. ?
赞 收藏 评论0 发布时间:2021-12-29 23:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版