
DMA,大家非常熟悉了,Direct Memory Access,是在嵌入式系统中对数据搬运起到非常大的辅助作用。在STM32H7系列MCU中,ST公司在片上又实现了一个叫BDMA的功能外设。下面让我们简单了一下它的作用。8 t, [# C, n* ?6 L8 L3 ? BDMA(Basic direct memory access controller,基本直接存储器访问控制器),相比通用的DMA1和DMA2,BDMA功能稍弱,支持一些基本的DMA功能。BDMA基础知识BDMA的几个关键知识点:% R, @; J" G4 { Q; b9 E8 x( R 0 s7 Y! V' K' @ 1. 1. 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工,但是注意一点,如果他们同时访问的同一个外设,会有一点性能影响的。( P2 D& P# z2 t: B 2. 2. BDMA支持存储器到外设,外设到存储器,存储器到存储器和外设到外设的传输,其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。 3. 3. BDMA只有一个AHB总线主控,而DMA1和DMA2是有两个的,可以分别用于源地址和目的地址的传输。+ b& H: k( y, P 4. 4. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。 5. 5. BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。1 h5 }% _0 e, B. K 6. 6. BDMA的通道请求(Channel0 – Channel7)的优先级可编程,分为四级Very high priority,High priority,Medium priority和Low priority。通道的优先级配置相同的情况下,如果同时产生请求,会优先响应编号低的,即Channel0优先响应。& X( o- \7 j6 ~( n0 o* W ( ^' G4 U" C$ s) { **BDMA传输** BDMA支持如下几种传输模式:1 h7 I* k( u& p- P2 v, z * 1. 存储器到外设。 * 2. 外设到存储器。. r0 x: I4 u! H; T2 S; d, q& Z * 3. 存储器到存储器。 * 4. 外设到外设的传输。 3 X7 t9 x! m. ^& l: K 其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。 关于这几种传输方式要注意以下两个问题:' Q+ a" s. p3 |! L% ` * 1. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。 * 2. BDMA不可以操作TCM区,其它的SRAM区均可操作; j9 D9 Z- L i d Z, i" W7 A0 C% X s# m' P: X **BDMA的循环模式和正常模式** BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。这两种模式各有用途。 " c/ g9 l Z/ a0 q7 i+ e * 1. Normal正常模式,适合用于单次传输,比如存储器到存储器的数据复制粘贴,又比如串口的数据单次发送,下次还需要发送的时候,使能下即可。 * 2. Circular循环模式,适合用于需要连续传输的场合,比如定时器触发BDMA实现任意IO的PWM输出。/ z; E# Q( k1 k * E3 ~, Q1 `8 x, y/ w5 H" {- a BDMA双缓冲BDMA也是支持双缓冲模式的,双缓冲的含义是源地址或者目的地址可以设置两个缓冲区,这种方式的好处是一个缓冲区在接收或者发送数据的时候,另一个缓冲区可以动态更新数据或者处理已经接收到的数据。当用户开启了BDMA传输完成中断后,通过寄存器CCRx的CT位判断当前使用的是哪个缓冲区2 u z: C) p# {# g: D2 |7 j7 X$ k& y6 R 2 g+ g' A1 T9 R9 i; l * 1. 如果CT = 1表示当前正在使用缓冲区1,即寄存器BDMA_CM1ARx记录的地址。 * 2. 如果CT = 0表示当前正在使用缓冲区0,即寄存器BDMA_CM0ARx记录的地址。 另外注意,存储器到存储器的BDMA传输不支持双缓冲模式,仅可以用于存储器到外设或者外设到存储器。! \2 v$ w" y% ]. F, X |
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法