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

基于STM32定时器触发DMA数据传输失败的典型案例

[复制链接]
yumeii 发布时间:2020-1-7 14:05
有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存器进行发送,发现DMA根本就不动作。6 h% P3 l1 b2 v  ]7 W# P

8 q: y" z9 K  s' Y
' Q5 Y8 a9 _- X9 o/ Z+ w
比方以基于STM32F411的芯片为例,通过TIM3更新事件触发DMA请求,DMA从内存将数据送到SPI1的数据寄存器,从而完成数据发送。$ e1 r8 p- m+ ]( A4 q
  u3 y% c8 _: P3 U4 n  \7 O* D, L
4 j. B' Q. F5 v" @! [
他采用CubeMx进行配置。基本配置如下:[文中图片可以放大观看]8 f, B6 ~8 t8 i6 T9 E1 z0 J: u
: ^  Z* v; I- P

3 d5 ?8 a& B. M1 b 1.png
! M1 L! \, R( I$ ]
0 Q) Q# p6 }7 L" V
3 w& ~0 S; |  h% Q- }
2.png - `: \4 W! Z: p( H
! ~  j- u, g9 @4 a) Q: z
! t+ H2 L# [( P1 k( B3 V4 N
相关用户实现代码如下:
# @+ @9 r; \7 e% I3 F7 ^2 t
) X0 s, q8 u& x1 _1 u

( ~1 Y" n5 N. s( I# D: l/ b; w0 Z% r 3.png + N$ h% W! `  X! ^% F% o6 \

! P+ x/ k- W, c2 I2 ]0 r. K# X

5 e- a5 z' x4 r+ N3 O* c/ `) L从配置过程和代码实现来看,似乎都没有问题。那DMA怎么就是不动作呢?, V- H+ q2 H1 K$ n7 C

) r6 \* M6 r6 e

4 A: t: S  U# I7 q+ B) P问题出在我们使用上面的函数做DMA传输所关联源端和目标端时,出现了想当然的情况。
! k$ G7 `9 p2 s% A% f+ B, t) J7 `/ ]. B5 C! m1 f
3 W+ U" U7 N" k
我们利用TIMER事件来作为DMA请求源时,而作为数据传输的源端或目的端,都是我们用户指定的。这时就一定要注意源端和目标端是当前DMA流所支持的。否则就会出现乱点鸳鸯谱,DMA根本可能就跑不起来。就像你叫了某快递公司,它的服务范围是相对固定的,并非你想去哪里她就能服务到哪里。, k; D" z0 J7 i3 P6 G
) J5 w* ]! O- T" e9 N. S

5 Y/ D# I2 ]6 Y2 `: ?* i 比方上面的例子,如果改成SPI2就没问题。为什么刚才SPI1不行呢,因为DMA1根本访问不到SPI1,我们不妨看看基于STM32F411芯片的内部功能及总线框图就很清晰了。
) P( Z+ D. \2 E+ ]+ b3 p) V  k3 W
+ t+ h9 n  Q5 z4 w! C! g( V) i
% j/ |5 x; [' D+ I) o
4.png
$ h: A# w5 J( c) `9 f2 n  Z* q7 w) v( _) I

6 \8 {0 s; U, g! [从上图不难看出DMA1是访问不到SPI1或SPI4这些外设的,或者说DMA1就没法访问挂在APB2总线上的外设,只能访问APB1总线上的外设。
2 k; O  x- s  V( g) c# z# [9 `$ I4 W- i- n' i, x. V
1 H4 j# o$ R. _$ e% G& U. K
小结:一般来讲,基于某触发事件,对应的DMA数据流就可以确定下来了,那该DMA数据流的传输范围往往也随之确定。我们在为该DMA数据流指定源端和目标端时一定要符合其传输范围,否则会出现传输无法完成的情形。换言之,我们在做DMA传输时,为了实现DMA的有效传输,往往需要结合源端和目的端来调整或选择合适的DMA数据流。
9 d9 j& {; R7 h" K6 [5 Y# f2 h; m$ T2 d/ A5 o" v
赞 收藏 评论0 发布时间:2020-1-7 14:05

举报

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