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

简单了解一下STM32H7的BDMA

[复制链接]
flyingstar 发布时间:2025-3-26 10:08
DMA,大家非常熟悉了,Direct Memory Access,是在嵌入式系统中对数据搬运起到非常大的辅助作用。在STM32H7系列MCU中,ST公司在片上又实现了一个叫BDMA的功能外设。下面让我们简单了一下它的作用。
) |% X9 k& B( y: g( ~
7 J5 X. H' O! u& H! O# DBDMA(Basic direct memory access controller,基本直接存储器访问控制器),相比通用的DMA1和DMA2,BDMA功能稍弱,支持一些基本的DMA功能。BDMA基础知识BDMA的几个关键知识点:
  E$ ^  }" w6 ]; A
* K  @8 v6 V/ a5 A' n1. 1. 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工,但是注意一点,如果他们同时访问的同一个外设,会有一点性能影响的。
# Q8 q+ k. O7 A' H( u' _. f2. 2. BDMA支持存储器到外设,外设到存储器,存储器到存储器和外设到外设的传输,其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。
; t+ a/ Z- p* R. R- u3. 3. BDMA只有一个AHB总线主控,而DMA1和DMA2是有两个的,可以分别用于源地址和目的地址的传输。" H/ S1 m! n: r+ ^$ V2 a
4. 4. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。6 H, v. n) D: ^/ F# y& M9 s/ J& Z
5. 5. BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。! g2 @8 a' ]6 ^1 u- Z$ F; R
6. 6. BDMA的通道请求(Channel0 – Channel7)的优先级可编程,分为四级Very high priority,High priority,Medium priority和Low priority。通道的优先级配置相同的情况下,如果同时产生请求,会优先响应编号低的,即Channel0优先响应。9 Q6 f  K! ?1 ~% [- v# p( I* X1 }
2 }9 r) g  ]0 A9 R0 a6 J2 \
**BDMA传输**
% F8 ]0 G, w6 E4 B
7 L6 i% Z. t' r* ^' l' hBDMA支持如下几种传输模式:3 {6 p9 L( v4 e+ |

% q4 T- D5 |% [0 ~, `: [! D) a9 R$ @* 1. 存储器到外设。
" z8 j/ O5 K$ E9 E; b, G- v* 2. 外设到存储器。
7 t! m( B7 C0 `# D/ _# G9 S1 E; K% i6 m+ S* 3. 存储器到存储器。
2 U- s1 V0 A4 J; |# l* 4. 外设到外设的传输。( s1 G( R3 K! v: ~, g0 _& }0 F+ |

$ s' l. D0 |4 Z; r6 V其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。
' g1 m4 L% }* V+ K
+ V5 t: U9 d1 m$ ^- Q  z+ q5 Y关于这几种传输方式要注意以下两个问题:1 p: U6 h( B5 a8 p* F  a: y  y

5 i, _' P3 ?# M$ g- ?5 u% z4 F# F* 1. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。& F  x- g# g# e' h: L. w1 @
* 2. BDMA不可以操作TCM区,其它的SRAM区均可操作6 x  ~) ?, x- U/ E
& G8 ?& [1 D) g* B2 J
**BDMA的循环模式和正常模式**% }4 Y0 X' g( X* s5 h: y
) T( [/ m7 w( s- A( J1 {
BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。这两种模式各有用途。( j1 t2 @8 A2 v1 _, A# E+ j- M8 ~% b

# i* M& ^* P4 S( a5 b" l6 v2 x* 1. Normal正常模式,适合用于单次传输,比如存储器到存储器的数据复制粘贴,又比如串口的数据单次发送,下次还需要发送的时候,使能下即可。
1 {6 b9 ^, m0 f; k& o& Y6 B7 M* 2. Circular循环模式,适合用于需要连续传输的场合,比如定时器触发BDMA实现任意IO的PWM输出。
6 {+ Y9 \3 }9 P2 ^+ W9 N% U' k2 M  c9 ^
BDMA双缓冲BDMA也是支持双缓冲模式的,双缓冲的含义是源地址或者目的地址可以设置两个缓冲区,这种方式的好处是一个缓冲区在接收或者发送数据的时候,另一个缓冲区可以动态更新数据或者处理已经接收到的数据。当用户开启了BDMA传输完成中断后,通过寄存器CCRx的CT位判断当前使用的是哪个缓冲区: J0 ~2 j& t; ?$ ^

6 m5 w7 i4 N6 r) G" _9 F% `- z* 1. 如果CT = 1表示当前正在使用缓冲区1,即寄存器BDMA_CM1ARx记录的地址。
3 K- \: \* O4 I2 u8 G* 2. 如果CT = 0表示当前正在使用缓冲区0,即寄存器BDMA_CM0ARx记录的地址。
& |% t. q$ R1 `+ m6 @. N; ]2 |8 F' n' G8 f
另外注意,存储器到存储器的BDMA传输不支持双缓冲模式,仅可以用于存储器到外设或者外设到存储器。0 }9 ~" }2 q( s: h* Q0 h) `
收藏 评论0 发布时间:2025-3-26 10:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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