打印

HAL库源文件stm32h7xx_hal_dma.c学习笔记(2018-07-31 V1.0)

[复制链接]
273|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
稻花香1号|  楼主 | 2018-8-10 16:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
说明:
1、H7系列的DMA与F1,F4系列的不同,H7系列DMA前面多了一级DMAMUX,可以方便选择各种通道,没有之前F1,F1系列限制只能使用给定的通道。
     详情看此贴:F1系列,F4系列和H7系列的DMA框图对比,一目了然
     http://www.armbbs.cn/forum.php?mod=viewthread&tid=86257

2、此文件主要用于配置DMA1,DMA2和BDMA。而MDMA是另外的一个源文件。



==============================================================================
                                                                  ##### 如何使用此驱动  #####
==============================================================================  


1、使能和配置外设连接DMA Stream需要看参考手册进行学习(除了内部Flash和SRAM:无需初始化,这个有待考证)

2、对于一个给定的Stream,用户使用函数HAL_DMA_Init配置各项参数。

3、DMA查询方式
(1)配置了源地址,目的地址和数据长度后,调用函数HAL_DMA_Start()启动传输
(2)使用函数HAL_DMA_PollForTransfer()查询当前传输结束,用户还可以给此函数配置超时等待时间

4、中断方式
(1)使用函数HAL_NVIC_SetPriority配置NVIC优先级
(2)使用函数HAL_NVIC_EnableIRQ使能NVIC中断
(3)配置了源地址,目的地址和数据长度后,调用函数HAL_DMA_Start_IT()可以启动传输(注,此函数会使能DMA中断)
(4)将函数HAL_DMA_IRQHandler()填到中断服务程序HAL_DMA_IRQHandler()里面
(5)传输结束后会调用函数HAL_DMA_IRQHandler(),此函数里面会执行回调函数,即用户需要为XferCpltCallback和XferErrorCallback指向的函数。


5、使用函数 HAL_DMA_GetState()可以获得DMA状态,函数HAL_DMA_GetError()获取哪方面错误

6、使用函数HAL_DMA_Abort()可以终止DMA传输
(1)存储器到存储器方式,不支持循环模式
(2)DMA FIFO的作用是降低对总线的需求和原地址,目的地址不同数据宽度的传输。
(3)当FIFO禁止后,不允许配置源数据和目的数据宽度不同,此时将统一使用外设数据宽度。

7、下面是几个常用的DMA宏定义
(+) __HAL_DMA_ENABLE:  使能指定的DMA Stream
(+) __HAL_DMA_DISABLE: 禁止指定的DMA Stream
(+) __HAL_DMA_GET_FS:  返回当前DMA Stream FIFO填充情况
(+) __HAL_DMA_ENABLE_IT: 使能指定的DMA Stream中断
(+) __HAL_DMA_DISABLE_IT: 禁止指定的DMA Stream中断
(+) __HAL_DMA_GET_IT_SOURCE: 检查指定的指定的DMA Stream中断是否发送



1、初始化函数HAL_DMA_Init







2018-08-01_144224.jpg (455.87 KB, 下载次数: 3)

下载附件



2018-8-1 14:43 上传

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

381

主题

382

帖子

1

粉丝