10 STM32标准库函数 之 DMA控制器(DMA)所有函数的介绍及使用

发布时间:2024年01月18日

函数描述格式:

函数名外设函数的名称
函数原形原形声明
功能描述简要解释函数是如何执行的
输入参数{x}输入参数描述
输出参数{x}输出参数描述
返回值函数的返回值
先决条件调用函数前应满足的要求
被调用函数其他被该函数调用的库函数

缩写定义

缩写外设/单元
ADC模数转换器
BKP备份寄存器
CAN控制器局域网模块
DMA直接内存存取控制器
EXTI外部中断事件控制器
FLASH闪存存储器
GPIO通用输入输出
I2C内部集成电路
IWDG独立看门狗
NVIC嵌套中断向量列表控制器
PWR电源/功耗控制
RCC复位与时钟控制器
RTC实时时钟
SPI串行外设接口
SysTick系统嘀嗒定时器
TIM通用定时器
TIM1高级控制定时器
USART通用同步异步接收发射端
WWDG窗口看门狗

1 DMA库函数预览

函数名描述
DMA_DeInit将 DMA 的通道 x 寄存器重设为缺省值
DMA_Init根据 DMA_InitStruct 中指定的参数初始化 DMA 的通道 x 寄存器
DMA_StructInit把 DMA_InitStruct 中的每一个参数按缺省值填入
DMA_Cmd使能或者失能指定的通道 x
DMA_ITConfig使能或者失能指定的通道 x 中断
DMA_GetCurrDataCount返回当前 DMA 通道 x 剩余的待传输数据数目
DMA_GetFlagStatus检查指定的 DMA 通道 x 标志位设置与否
DMA_ClearFlag清除 DMA 通道 x 待处理标志位
DMA_GetITStatus检查指定的 DMA 通道 x 中断发生与否
DMA_ClearITPendingBit清除 DMA 通道 x 中断待处理标志位

1.1 函数 DMA_DeInit

函数名DMA_DeInit
函数原形void DMA_DeInit(DMA_Channel_TypeDef* DMA_Channelx)
功能描述将 DMA 的通道 x 寄存器重设为缺省值
输入参数DMA Channelx:x 可以是 1,2…,或者 7 来选择DMA 通道 x
输出参数
返回值
先决条件
被调用函数RCC_APBPeriphResetCmd()

例:
/* Deinitialize the DMA Channel2 */ DMA_DeInit(DMA_Channel2);

2.2 函数DMA_Init

函数名DMA_Init
函数原形void DMA_Init(DMA_Channel_TypeDef* DMA_Channelx, DMA_InitTypeDef* DMA_InitStruct)
功能描述根据 DMA_InitStruct 中指定的参数初始化 DMA 的通道 x 寄存器
输入参数 1DMA Channelx:x 可以是 1,2…,或者 7 来选择DMA 通道 x
输入参数 2DMA_InitStruct:指向结构 DMA_InitTypeDef 的指针,包含了 DMA 通道 x 的配置信息
输出参数
返回值
先决条件
被调用函数

DMA_InitTypeDef structure
typedef struct
{
u32 DMA_PeripheralBaseAddr; u32 DMA_MemoryBaseAddr;
u32 DMA_DIR;
u32 DMA_BufferSize; u32 DMA_PeripheralInc; u32 DMA_MemoryInc;
u32 DMA_PeripheralDataSize; u32 DMA_MemoryDataSize;
u32 DMA_Mode;
u32 DMA_Priority; u32 DMA_M2M;
} DMA_InitTypeDef;

DMA_PeripheralBaseAddr
该参数用以定义 DMA 外设基地址
DMA_MemoryBaseAddr
该参数用以定义 DMA 内存基地址
DMA_DIR
DMA_DIR 规定了外设是作为数据传输的目的地还是来源

DMA_DIR描述
DMA_DIR_PeripheralDST外设作为数据传输的目的地
DMA_DIR_PeripheralSRC外设作为数据传输的来源

DMA_BufferSize
DMA_BufferSize 用以定义指定 DMA 通道的 DMA 缓存的大小,单位为数据单位。根据传输方向,数据单位等于结构中参数 DMA_PeripheralDataSize 或者参数 DMA_MemoryDataSize 的值。DMA_PeripheralInc
DMA_PeripheralInc 用来设定外设地址寄存器递增与否。

DMA_PeripheralInc 值

DMA_PeripheralInc描述
DMA_PeripheralInc_Enable外设地址寄存器递增
DMA_PeripheralInc_Disable外设地址寄存器不变
DMA_MemoryInc描述
DMA_MemoryInc_Enable内存地址寄存器递增
DMA_MemoryInc_Disable内存地址寄存器不变
DMA_PeripheralDataSize描述
DMA_PeripheralDataSize_Byte数据宽度为 8 位
DMA_PeripheralDataSize_HalfWord数据宽度为 16 位
DMA_PeripheralDataSize_Word数据宽度为 32 位
DMA_MemoryDataSize描述
DMA_MemoryDataSize_Byte数据宽度为 8 位
DMA_MemoryDataSize_HalfWord数据宽度为 16 位
DMA_MemoryDataSize_Word数据宽度为 32 位
DMA_Mode描述
DMA_Mode_Circular工作在循环缓存模式
DMA_Mode_Normal工作在正常缓存模式
DMA_Mode描述
DMA_Priority_VeryHighDMA 通道 x 拥有非常高优先级
DMA_Priority_HighDMA 通道 x 拥有高优先级
DMA_Priority_MediumDMA 通道 x 拥有中优先级
DMA_Priority_LowDMA 通道 x 拥有低优先级
DMA_M2M描述
DMA_M2M_EnableDMA 通道 x 设置为内存到内存传输
DMA_M2M_DisableDMA 通道 x 没有设置为内存到内存传输

例:
/* Initialize the DMA Channel1 according to the DMA_InitStructure members */
DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40005400; DMA_InitStructure.DMA_MemoryBaseAddr = 0x20000100; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 256; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA_Channel1, &DMA_InitStructure);

1.3 函数 DMA_StructInit

函数名DMA_StructInit
函数原形void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct)
功能描述把 DMA_InitStruct 中的每一个参数按缺省值填入
输入参数DMA_InitStruct:指向结构 DMA_InitTypeDef 的指针,待初始化
输出参数
返回值
先决条件
被调用函数

DMA_InitStruc

成员缺省值
DMA_PeripheralBaseAddr0
DMA_MemoryBaseAddr0
DMA_DIRDMA_DIR_PeripheralSRC
DMA_BufferSize0
DMA_PeripheralIncDMA_PeripheralInc_Disable
DMA_MemoryIncDMA_MemoryInc_Disable
DMA_PeripheralDataSizeDMA_PeripheralDataSize_Byte
DMA_MemoryDataSizeDMA_MemoryDataSize_Byte
DMA_ModeDMA_Mode_Normal
DMA_PriorityDMA_Priority_Low
DMA_M2MDMA_M2M_Disable

例:
/* Initialize a DMA_InitTypeDef structure */ DMA_InitTypeDef DMA_InitStructure; DMA_StructInit(&DMA_InitStructure);

1.4 函数DMA_Cmd

函数名DMA_Cmd
函数原形void DMA_Cmd(DMA_Channel_TypeDef* DMA_Channelx, FunctionalState NewState)
功能描述使能或者失能指定的通道 x
输入参数 1DMA Channelx:x 可以是 1,2…,或者 7 来选择DMA 通道 x
输入参数 2NewState:DMA 通道 x 的新状态
这个参数可以取:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

例:
/* Enable DMA Channel7 */ DMA_Cmd(DMA_Channel7, ENABLE);

1.5 函数DMA_ITConfig

函数名DMA_ITConfig
函数原形void DMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx, u32 DMA_IT, FunctionalState NewState)
功能描述使能或者失能指定的通道 x 中断
输入参数 1DMA Channelx:x 可以是 1,2…,或者 7 来选择DMA 通道 x
输入参数 2DMA_IT:待使能或者失能的 DMA 中断源,使用操作符“
参阅 SectionDMA_IT 查阅更多该参数允许取值范围
输入参数 3NewState:DMA 通道 x 中断的新状态
这个参数可以取:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

输入参数 DMA_IT 使能或者失能 DMA 通道 x 的中断。

DMA_IT描述
DMA_IT_TC传输完成中断屏蔽
DMA_IT_HT传输过半中断屏蔽
DMA_IT_TE传输错误中断屏蔽

例:
/* Enable DMA Channel5 complete transfer interrupt */ DMA_ITConfig(DMA_Channel5, DMA_IT_TC, ENABLE);

1.6 函 数 DMA_GetCurrDataCounte

函数名DMA_GetCurrDataCounter
函数原形u16 DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx)
功能描述返回当前 DMA 通道 x 剩余的待传输数据数目
输入参数DMA Channelx:x 可以是 1,2…,或者 7 来选择DMA 通道 x
输出参数
返回值当前 DMA 通道 x 剩余的待传输数据数目
先决条件
被调用函数

例:
/* Get the number of remaining data units in the current DMA Channel2 transfer */
u16 CurrDataCount;
CurrDataCount = DMA_GetCurrDataCounter(DMA_Channel2);

1.7 函数DMA_GetFlagStatus

函数名DMA_GetFlagStatus
函数原形FlagStatus DMA_GetFlagStatus(u32 DMA_FLAG)
功能描述检查指定的 DMA 通道 x 标志位设置与否
输入参数DMA_FLAG:待检查的 DMA 标志位
参阅 SectionDMA_FLAG 查阅更多该参数允许取值范围
输出参数
返回值DMA_FLAG 的新状态(SET 或者 RESET)
先决条件
被调用函数

参数 DMA_FLAG 定义了待检察的标志位类型.

DMA_FLAG描述
DMA_FLAG_GL1通道 1 全局标志位
DMA_FLAG_TC1通道 1 传输完成标志位
DMA_FLAG_HT1通道 1 传输过半标志位
DMA_FLAG_TE1通道 1 传输错误标志位
DMA_FLAG_GL2通道 2 全局标志位
DMA_FLAG_TC2通道 2 传输完成标志位
DMA_FLAG_HT2通道 2 传输过半标志位
DMA_FLAG_TE2通道 2 传输错误标志位
DMA_FLAG_GL3通道 3 全局标志位
DMA_FLAG_TC3通道 3 传输完成标志位
DMA_FLAG_HT3通道 3 传输过半标志位
DMA_FLAG_TE3通道 3 传输错误标志位
DMA_FLAG_GL4通道 4 全局标志位
DMA_FLAG_TC4通道 4 传输完成标志位
DMA_FLAG_HT4通道 4 传输过半标志位
DMA_FLAG_TE4通道 4 传输错误标志位
DMA_FLAG_GL5通道 5 全局标志位
DMA_FLAG_TC5通道 5 传输完成标志位
DMA_FLAG_HT5通道 5 传输过半标志位
DMA_FLAG_TE5通道 5 传输错误标志位
DMA_FLAG_GL6通道 6 全局标志位
DMA_FLAG_TC6通道 6 传输完成标志位
DMA_FLAG_HT6通道 6 传输过半标志位
DMA_FLAG_TE6通道 6 传输错误标志位
DMA_FLAG_GL7通道 7 全局标志位
DMA_FLAG_TC7通道 7 传输完成标志位
DMA_FLAG_HT7通道 7 传输过半标志位
DMA_FLAG_TE7通道 7 传输错误标志位

FlagStatus Status;
Status = DMA_GetFlagStatus(DMA_FLAG_HT6);

1.8 7.2.8函数DMA_ClearFlag

函数名DMA_ClearFlag
函数原形void DMA_ClearFlag(u32 DMA_FLAG)
功能描述清除 DMA 通道 x 待处理标志位
输入参数DMA_FLAG:待清除的 DMA 标志位,使用操作符“
参阅 SectionDMA_FLAG 查阅更多该参数允许取值范围,用户可以使用或操作选中多个标志位
输出参数
返回值
先决条件
被调用函数

例:
/* Clear the DMA Channel3 transfer error interrupt pending bit */ DMA_ClearFlag(DMA_FLAG_TE3);

1.9 函数DMA_GetITStatus

函数名DMA_GetITStatus
函数原形ITStatus DMA_GetITStatus(u32 DMA_IT)
功能描述检查指定的 DMA 通道 x 中断发生与否
输入参数DMA_IT:待检查的 DMA 中断源
参阅 SectionDMA_IT 查阅更多该参数允许取值范围
输出参数
返回值DMA_IT 的新状态(SET 或者 RESET)
先决条件
被调用函数
DMA_IT描述
DMA_IT_GL1通道 1 全局中断
DMA_IT_TC1通道 1 传输完成中断
DMA_IT_HT1通道 1 传输过半中断
DMA_IT_TE1通道 1 传输错误中断
DMA_IT_GL2通道 2 全局中断
DMA_IT_TC2通道 2 传输完成中断
DMA_IT_HT2通道 2 传输过半中断
DMA_IT_TE2通道 2 传输错误中断
DMA_IT_GL3通道 3 全局中断
DMA_IT_TC3通道 3 传输完成中断
DMA_IT_HT3通道 3 传输过半中断
DMA_IT_TE3通道 3 传输错误中断
DMA_IT_GL4通道 4 全局中断
DMA_IT_TC4通道 4 传输完成中断
DMA_IT_HT4通道 4 传输过半中断
DMA_IT_TE4通道 4 传输错误中断
DMA_IT_GL5通道 5 全局中断
DMA_IT_TC5通道 5 传输完成中断
DMA_IT_HT5通道 5 传输过半中断
DMA_IT_TE5通道 5 传输错误中断
DMA_IT_GL6通道 6 全局中断
DMA_IT_TC6通道 6 传输完成中断
DMA_IT_HT6通道 6 传输过半中断
DMA_IT_TE6通道 6 传输错误中断
DMA_IT_GL7通道 7 全局中断
DMA_IT_TC7通道 7 传输完成中断
DMA_IT_HT7通道 7 传输过半中断
DMA_IT_TE7通道 7 传输错误中断

7 transfer complete interrupt has occurred or not */
ITStatus Status;
Status = DMA_GetITStatus(DMA_IT_TC7);

1.10 函 数 DMA_ClearITPendingBit

函数名DMA_ClearITPendingBit
函数原形void DMA_ClearITPendingBit(u32 DMA_IT)
功能描述清除 DMA 通道 x 中断待处理标志位
输入参数DMA_IT:待清除的 DMA 中断待处理标志位
参阅 SectionDMA_IT 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

例:
/* Clear the DMA Channel5 global interrupt pending bit */ DMA_ClearITPendingBit(DMA_IT_GL5);

该文档修改记录:

修改时间修改说明
2024年1月14日第一次发布,介绍了10 STM32标准库函数 之 DMA控制器(DMA)所有函数的介绍及使用

总结

以上就是10 STM32标准库函数 之 DMA控制器(DMA)所有函数的介绍及使用的内容,本文介绍了10 STM32标准库函数 之 DMA控制器(DMA)所有函数的介绍及使用。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

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