[stm32f103]DMA

发布时间:2023年12月29日

? ? ? ?简介?

? DMA Direct Memory Access )直接存储器存取
? DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须 CPU 干预,节省了 CPU 的资源
? 12 个独立可配置的通道: DMA1 7 个通道), DMA2 5 个通道)
? 每个通道都支持软件触发和特定的硬件触发
?
? STM32F103C8T6 DMA 资源: DMA1 7 个通道)
软件触发: 如把FLASH里面的数据, 转运到SRAM里面中, DMA会最快速度全部数据转运完成.
硬件触发: 如果是外设到存储器中转运. 就需要考虑一些时机, 如转运ADC数据, 就需要每个通道转换完成之后, 进行一次硬件触发DMA, 之后DMA会开始转运. 触发一次转运一次, 这样不会干预其他外设的工作.
存储器到存储器的转运, 使用软件触发, 外设到存储器的转运, 使用硬件触发.

?

存储器

ROM掉电不丢失, RAM掉电丢失数据.

DMA逻辑框图

起始地址: 数据从哪里来? 从外设, 还是存储器. 到哪里去? 数据转运到哪个地址?
数据宽度: 指定一次转运, 要按多大的数据宽度来进行. (字节Byte/ 半字HalfWord/ 字Word).
地址是否自增: 数据转运完之后, 要不要将地址移动到下一个位置中去.
传输计数器: 我要传几次?自减计数器. 减到0之后, DMA就不会转运数据了, 1就是1次.
自动重装器: 传输计数器减到零, 立即重装到原来的数值, 达到循环模式.
M2M: Memory to Memory, 选择触发模式.
硬件触发: 一般用于外设, 需要找好Timing, 然后调用函数来触发. 只能用于指定的外设通道.
软件触发: 不用调用函数触发, 用最快的速度, 连续转运, 直到结束(计数器清零). 和自动重装器只能用一个. 用于存储器到存储器的转运, 因为不需要Timing. 最快完成就行. 可以用于所有的地址.
开关控制: 开启DMA. 写传输计数器时必须关闭DMA才能写入.

DMA转运条件

1. 开启开关控制
2. 转运计数器>0
3. 必须有触发源(M2M)
代码上如果使用const修饰全局变量, 会将该变量存放在Flash里面, 如果没有const修饰, 会放到SRAM里面, 如果一些不需要改变的变量, 并且常用的, 可以放到Flash里面, 节省SRAM的空间. const修饰局部变量还是放到SRAM中.

?

文章来源:https://blog.csdn.net/qq_46129738/article/details/135287778
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。