stm32 DMA初始化选项研究
来源:互联网 发布:ubuntu怎么输入中文 编辑:程序博客网 时间:2024/05/21 21:34
stm32 DMA初始化选项研究
DMA比较好用,也比较简单,今天在做多通道ADC“连续”“扫描”采样时,对DMA有了更深一点的认识,今天给大家分享下:
#define ADC1_DR_Address ((uint32_t)0x4001244C)unsigned short Buff[3]; ...... DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Buff; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 3; 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_Circular;*** DMA_InitStructure.DMA_Priority = DMA_Priority_High; **DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;** DMA_Init(DMA1_Channel1, &DMA_InitStructure); DMA_Cmd(DMA1_Channel1, ENABLE);
初始化时,要先用DMA_DeInit将DMA的通道初始化成缺省值。
外设地址设置,内存基地址设置,设置外设的传输属性(输入/输出),这些都容易理解;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; #define DMA_DIR_PeripheralDST ((uint32_t)0x00000010)
#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000)
这里是设置谁为数据传输源;
DMA_InitStructure.DMA_BufferSize = 3;
如果是获取一组数值,像ADC,USART,我们可以用一个缓冲区,如果不用,像ADC数据更新快的,马上就被刷新了。我这里的DMA_Buffersize 是 Buff的大小;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; #define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) #define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) #define DMA_MemoryInc_Enable ((uint32_t)0x00000080) #define DMA_MemoryInc_Disable ((uint32_t)0x00000000)
这个根据需要进行设置;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; #define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) #define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) #define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) #define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) #define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) #define DMA_MemoryDataSize_Word ((uint32_t)0x00000800)
这个设置获取数据的大小;
*DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;* #define DMA_Mode_Circular ((uint32_t)0x00000020) #define DMA_Mode_Normal ((uint32_t)0x00000000)
这个要强调下,像我这里,要不断更新Buff[0],Buff[1],Buff[2],我上面设置的缓冲区正好也是3,我们可以用Circular属性来设置!他就不停的刷新这段地址!
他还有一种属性是Normal,这种属性一般用在Point 2 Point时使用;
DMA_InitStructure.DMA_Priority = DMA_Priority_High; #define DMA_Priority_VeryHigh ((uint32_t)0x00003000) #define DMA_Priority_High ((uint32_t)0x00002000) #define DMA_Priority_Medium ((uint32_t)0x00001000) #define DMA_Priority_Low ((uint32_t)0x00000000)
因为DMA有多路,所以我们要规定先传哪路数据,所以我们就要规定一个优先级;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; #define DMA_M2M_Enable ((uint32_t)0x00004000) #define DMA_M2M_Disable ((uint32_t)0x00000000)
这个是设置是不是Memary to Memary的!
阅读全文
0 0
- stm32 DMA初始化选项研究
- stm32 DMA初始化选项研究
- stm32之DMA彻底研究
- stm32之DMA彻底研究
- stm32之DMA彻底研究
- stm32之DMA彻底研究
- stm32之DMA彻底研究
- STM32时钟初始化研究
- 转载的:stm32之DMA彻底研究
- stm32之DMA彻底研究(2)
- Stm32 DMA
- stm32 DMA
- STM32 DMA
- STM32->DMA
- stm32 DMA
- STM32之DMA
- STM32 DMA学习
- STM32 DMA USART ADC
- java以及IT中容器的概念
- 7-ReverseInteger
- Java reflect proxy 源码
- Java NIO系列教程(3) :Buffer
- [EMWIN] 多国语言实现方法---csv文件实现
- stm32 DMA初始化选项研究
- Tcl+Python学习笔记(一)
- haffmantree
- K:Serializable或Externalizable对象的序列化
- 汉字统计
- java第九天/10.22
- SQL server 上机实验
- spark学习之spark基本架构和运行模式(初初级)
- servlet应该重点掌握的知识点