当前位置:首页 >> 信息与通信 >>

stm32 DMA设置


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_MemoryDataS

ize; u32 DMA_Mode; u32 DMA_Priority; u32 DMA_M2M; } DMA_InitTypeDef; DMA_InitTypeDef 定义于文件“stm32f10x_dma.h”

DMA_PeripheralBaseAddr 该参数用以定义 DMA 外设基地址

DMA_MemoryBaseAddr 该参数用以定义 DMA 内存基地址

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_Enable DMA_PeripheralInc_Disable 外设地址寄存器递增 外设地址寄存器不变

DMA_MemoryInc DMA_MemoryInc 用来设定内存地址寄存器递增与否。 DMA_PeripheralInc_Enable DMA_PeripheralInc_Disable 内存地址寄存器递增 内存地址寄存器不变

DMA_PeripheralDataSize DMA_PeripheralDataSize 设定了外设数据宽度。 DMA_PeripheralDataSize_Byte DMA_PeripheralDataSize_HalfWord DMA_PeripheralDataSize_Word 数据宽度为 8 位 数据宽度为 16 位 数据宽度为 32 位

DMA_MemoryDataSize DMA_MemoryDataSize 设定了外设数据宽度。 DMA_MemoryDataSize_Byte DMA_MemoryDataSize_HalfWord DMA_MemoryDataSize_Word 数据宽度为 8 位 数据宽度为 16 位 数据宽度为 32 位

DMA_Mode DMA_Mode 设置了 CAN 的工作模式 DMA_Mode_Circular DMA_Mode_Normal 工作在循环缓存模式 工作在正常缓存模式

DMA_Priority DMA_Priority 设定 DMA 通道 x 的软件优先级。 DMA_Priority_VeryHigh DMA_Priority_High DMA_Priority_Medium DMA_Priority_Low DMA 通道 x 拥有非常高优先级 DMA 通道 x 拥有高优先级 DMA 通道 x 拥有中优先级 DMA 通道 x 拥有低优先级

DMA_M2M DMA_M2M 使能 DMA 通道的内存到内存传输。 DMA_M2M_Enable DMA_M2M_Disable DMA 通道 x 设置为内存到内存传输 DMA 通道 x 没有设置为内存到内存传输

void DMA_DeInit(DMA_Channel_TypeDef* DMA_Channelx); 将 DMA 的通道 x 寄存器重设为缺省值

void DMA_Init(DMA_Channel_TypeDef* DMA_Channelx, DMA_InitTypeDef* DMA_InitStruct); 根据 DMA_InitStruct 中指定的参数初始化 DMA 的通道 x 寄存器

void DMA_Cmd(DMA_Channel_TypeDef* DMA_Channelx, FunctionalState NewState); 使能或者失能指定的通道 x

例子: ADC 使能 DMA ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); 使能或者失能指定的 ADC 的 DMA 请求 DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40012C34;

DMA_InitStructure.DMA_MemoryBaseAddr = 0x4001244C; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = 1; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel5, &DMA_InitStructure); DMA_Cmd(DMA1_Channel5, ENABLE); ADC_DMACmd(ADC1,ENABLE); Flash 使能 DMA void DMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx, u32 DMA_IT,FunctionalState NewState); 使能或者失能指定的通道 x 中断 u16 DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx); 返回当前 DMA 通道 x 剩余的待传输数据数目 #define BufferSize 32 const uint32_t SRC_Const_Buffer[BufferSize]= { 0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10, 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20, 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30, 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40, 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50, 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60, 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70, 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80}; uint32_t DST_Buffer[BufferSize]; DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel6); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DST_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize = BufferSize; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA1_Channel6, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE); DMA_Cmd(DMA1_Channel6, ENABLE);

I2C 使能 DMA FlagStatus DMA_GetFlagStatus(u32 DMA_FLAG); 检查指定的 DMA 通道 x 标志位设置与否 返回值 DMA_FLAG DMA_FLAG_GL1 DMA_FLAG_TC1 DMA_FLAG_HT1 DMA_FLAG_TE1 DMA_FLAG_GL2 DMA_FLAG_TC2 DMA_FLAG_HT2 DMA_FLAG_TE2 DMA_FLAG_GL3 DMA_FLAG_TC3 DMA_FLAG_HT3 DMA_FLAG_TE3 DMA_FLAG_GL4 DMA_FLAG_TC4 DMA_FLAG_HT4 DMA_FLAG_TE4 DMA_FLAG_GL5 DMA_FLAG_TC5 DMA_FLAG 的新状态(SET 或者 RESET ) 描述 通道 1 全局标志位 通道 1 传输完成标志位 通道 1 传输过半标志位 通道 1 传输错误标志位 通道 2 全局标志位 通道 2 传输完成标志位 通道 2 传输过半标志位 通道 2 传输错误标志位 通道 3 全局标志位 通道 3 传输完成标志位 通道 3 传输过半标志位 通道 3 传输错误标志位 通道 4 全局标志位 通道 4 传输完成标志位 通道 4 传输过半标志位 通道 4 传输错误标志位 通道 5 全局标志位 通道 5 传输完成标志位

DMA_FLAG_HT5 DMA_FLAG_TE5 DMA_FLAG_GL6 DMA_FLAG_TC6 DMA_FLAG_HT6 DMA_FLAG_TE6 DMA_FLAG_GL7 DMA_FLAG_TC7 DMA_FLAG_HT7 DMA_FLAG_TE7 #define I2C1_DR_Address #define I2C2_DR_Address

通道 5 传输过半标志位 通道 5 传输错误标志位 通道 6 全局标志位 通道 6 传输完成标志位 通道 6 传输过半标志位 通道 6 传输错误标志位 通道 7 全局标志位 通道 7 传输完成标志位 通道 7 传输过半标志位 通道 7 传输错误标志位 0x40005410 0x40005810

DMA_InitTypeDef DMA_InitStructure; uint8_t I2C1_Buffer_Tx[BufferSize] = {1, 2, 3, 4, 5, 6, 7, 8}; uint8_t I2C2_Buffer_Rx[BufferSize]; DMA_DeInit(DMA1_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)I2C2_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)I2C2_Buffer_Rx; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = BufferSize; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel5, &DMA_InitStructure); DMA_DeInit(DMA1_Channel6); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)I2C1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)I2C1_Buffer_Tx; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_Init(DMA1_Channel6, &DMA_InitStructure);

I2C_DMACmd(I2C2, ENABLE); I2C_DMACmd(I2C1, ENABLE); DMA_Cmd(DMA1_Channel5, ENABLE); DMA_Cmd(DMA1_Channel6, ENABLE); while(!DMA_GetFlagStatus(DMA1_FLAG_TC5)); while(!DMA_GetFlagStatus(DMA1_FLAG_TC6));


相关文章:
stm32 DMA控制器的介绍
stm32 DMA控制器的介绍_电子/电路_工程科技_专业资料。DMA 简介(1) DMA,全称...这时, 要提供数据传输所用的源地址和目标地址, 其中 DMA_CPARx 寄存器中设置...
STM32DMA每个通道所对应的外设
STM32DMA每个通道所对应的外设_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 STM32DMA每个通道所对应的外设_电子/电路_工程科技_专业资料。...
STM32中DMA实现方式
STM32DMA实现方式_计算机软件及应用_IT/计算机_专业资料。STM32DMA实现方式STM32 DMA 首先,初始化,要了解触发源,也可通过软件编程设置具体的时间,具体 条件来...
STM32 ADC DMA 使用心得
STM32 ADC DMA 使用心得_电子/电路_工程科技_专业资料。误区就是:从实验的...(3<<14); //分频因子清零 //SYSCLK/DIV2=12M ADC 时钟设置为 12M,ADC ...
STM32学习之DMA
STM32学习之DMA_计算机硬件及网络_IT/计算机_专业资料。介绍stm32DMASTM...在 DMA_CPARx 寄存器中设置外设寄存器的地址。发生外设数 据传输请求时,这个...
STM32 DMA通俗讲解
STM32 DMA通俗讲解_信息与通信_工程科技_专业资料。这里需要补充一个知识点 DMA,DMA 就相当与 CPU 的一个秘书,他的作用就是 帮 CPU 减轻负担的。说的再具体点...
超详细的STM32讲解——AD单通道与多通道转换(DMA)
超详细的STM32讲解——AD单通道与多通道转换(DMA)_计算机软件及应用_IT/计算机_专业资料。STM32 ,AD 第三章 AD 转换本章的内容分两部分,第一是 AD 的单...
STM32之DMA详解
进行 DMA 配置前,不要忘了在 RCC 设置中使能 DMA 时钟。STM32DMA 控制器挂在 AHB 总 线上。 DMA 总共有 7 个通道,各个通道的 DMA 映射关系如下:...
STM32实现USART DMA接收未知长度的数据和发送
前言: 开始学 USART DMA 的时候看到帖子 《STM32 UART DMA 实现未知数据长度接收》 , 觉得方法妙极了。此下出自此帖子——(整体的思路是这样的,一开始设置好 ...
STM32学习笔记(12)-DMA初步
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; 这些设置将会对 CCRx 寄存器进行操作,如下图所示: 以下是 stm32f10x_dma.c 中有关 DMA 的初始化设置代码 tm...
更多相关标签: