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

简单了解一下STM32H7的BDMA

[复制链接]
flyingstar 发布时间:2025-3-26 10:08
DMA,大家非常熟悉了,Direct Memory Access,是在嵌入式系统中对数据搬运起到非常大的辅助作用。在STM32H7系列MCU中,ST公司在片上又实现了一个叫BDMA的功能外设。下面让我们简单了一下它的作用。5 x! x7 ^- u6 ^" i7 }6 X9 F

; o3 c0 g% r/ W) GBDMA(Basic direct memory access controller,基本直接存储器访问控制器),相比通用的DMA1和DMA2,BDMA功能稍弱,支持一些基本的DMA功能。BDMA基础知识BDMA的几个关键知识点:% n0 I. F  l1 ~+ ?/ @$ D# P

0 O) G; d5 e8 ^: F4 X  Y1. 1. 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工,但是注意一点,如果他们同时访问的同一个外设,会有一点性能影响的。- y2 P1 u/ r) i! h; T6 g
2. 2. BDMA支持存储器到外设,外设到存储器,存储器到存储器和外设到外设的传输,其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。
: S; T, ]* y0 g4 O3. 3. BDMA只有一个AHB总线主控,而DMA1和DMA2是有两个的,可以分别用于源地址和目的地址的传输。0 P$ g$ o& J7 t1 J
4. 4. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。% p  W, o& h1 b; S
5. 5. BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。
7 m3 w% O1 x: s& K( o6. 6. BDMA的通道请求(Channel0 – Channel7)的优先级可编程,分为四级Very high priority,High priority,Medium priority和Low priority。通道的优先级配置相同的情况下,如果同时产生请求,会优先响应编号低的,即Channel0优先响应。
0 x2 R: [4 `7 a$ R& k* a' \; L7 q# I0 J1 g  d2 ?/ E# {: e' E
**BDMA传输**" K! ?& O1 O; W5 R) Z1 n8 Q
( {& v% K& D* H
BDMA支持如下几种传输模式:$ [1 ~0 X- j& m6 N& @' T8 g

% ~# g- i; Z- W  u* Y* 1. 存储器到外设。
1 W; M; }# y  P2 g6 r* 2. 外设到存储器。
5 o' D  v0 Y/ p  e2 s% o# r* 3. 存储器到存储器。" R- \2 O! d+ ^0 _1 b/ d# U
* 4. 外设到外设的传输。
, @5 F8 Q" l# h+ b& H
) q( c$ w' M. w其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。  {8 c& Y' U0 B7 M3 ?5 i, M
7 M- a% ^* e  ]: O% D& Z  g% M* T3 N
关于这几种传输方式要注意以下两个问题:) ?: F7 u4 c& k4 ?
! z* c6 Z' o! h8 @/ m2 B
* 1. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。
" h* T/ U' V, _3 d" n+ P- v5 T2 x5 [* 2. BDMA不可以操作TCM区,其它的SRAM区均可操作3 k( v; G" ?! I3 U4 C

4 K+ S+ C# ~0 U3 k; I! L**BDMA的循环模式和正常模式**
+ |. E- O" |3 t5 I6 s3 H0 n$ c7 n% z6 g0 Z: D) k" L
BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。这两种模式各有用途。3 W: @6 I1 M+ c$ f+ N: u
, T9 v; s5 e9 H
* 1. Normal正常模式,适合用于单次传输,比如存储器到存储器的数据复制粘贴,又比如串口的数据单次发送,下次还需要发送的时候,使能下即可。6 C  _. o4 C, u) m
* 2. Circular循环模式,适合用于需要连续传输的场合,比如定时器触发BDMA实现任意IO的PWM输出。
9 s' U4 {& j: W( w4 X) k( c& S7 ~- `& K9 t3 a3 E
BDMA双缓冲BDMA也是支持双缓冲模式的,双缓冲的含义是源地址或者目的地址可以设置两个缓冲区,这种方式的好处是一个缓冲区在接收或者发送数据的时候,另一个缓冲区可以动态更新数据或者处理已经接收到的数据。当用户开启了BDMA传输完成中断后,通过寄存器CCRx的CT位判断当前使用的是哪个缓冲区4 j2 A- {+ F  p6 E2 A2 d1 I* @3 b
: ?& W: ^: T. Z: p9 s' D# f7 m
* 1. 如果CT = 1表示当前正在使用缓冲区1,即寄存器BDMA_CM1ARx记录的地址。
) q0 M0 y( ]( l3 q5 e, `* 2. 如果CT = 0表示当前正在使用缓冲区0,即寄存器BDMA_CM0ARx记录的地址。0 B: L( Z& D1 k
: ~1 Q6 T( k7 w+ [2 d3 o
另外注意,存储器到存储器的BDMA传输不支持双缓冲模式,仅可以用于存储器到外设或者外设到存储器。( g2 U2 |7 z( ?2 P+ i' m! D! @
赞 收藏 评论0 发布时间:2025-3-26 10:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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