STM32 DMA->内存到内存
2016-02-03 15:22
411 查看
基于STM32 F401 Discovery板:
DMA2在AHB1总线上
步骤一:使能DMA
其中:
DMA_PeripheralBaseAddr--》外设地址,可以选择USART,I2C,ADC等
DMA_Memory0BaseAddr-》memory地址,用于外设和内存的数据传输
DMA_DIR -》传送方向,分别有外设到内存,内存到外设,内存到内存
DMA_BufferSize -》传输的buffer size
DMA_PeripheralInc -》外设地址是否自加
DMA_MemoryInc -》内存地址是否自加
DMA_PeripheralDataSize -》外设每个data的size,分别有1byte,半字,全字
DMA_MemoryDataSize -》内存的每个data的size,如上
DMA_Mode -》DMA mode,分别是传输完了是否循环还是正常
步骤四:DMA使能中断:
步骤五:开始传输
DMA2在AHB1总线上
步骤一:使能DMA
#define DMA_STREAM_CLOCK RCC_AHB1Periph_DMA2 RCC_AHB1PeriphClockCmd(DMA_STREAM_CLOCK, ENABLE);步骤二:reset DMA Stream register:
/* Reset DMA Stream registers (for debug purpose) */ DMA_DeInit(DMA_STREAM);步骤三:
/* Check if the DMA Stream is disabled before enabling it. Note that this step is useful when the same Stream is used multiple times: enabled, then disabled then re-enabled... In this case, the DMA Stream disable will be effective only at the end of the ongoing data transfer and it will not be possible to re-configure it before making sure that the Enable bit has been cleared by hardware. If the Stream is used only once, this step might be bypassed. */ while (DMA_GetCmdStatus(DMA_STREAM) != DISABLE) { }步骤四:初始化DMA 结构体
/* Configure DMA Stream */ DMA_InitStructure.DMA_Channel = DMA_CHANNEL; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DST_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory; DMA_InitStructure.DMA_BufferSize = (uint32_t)BUFFER_SIZE; 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_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA_STREAM, &DMA_InitStructure);
其中:
DMA_PeripheralBaseAddr--》外设地址,可以选择USART,I2C,ADC等
DMA_Memory0BaseAddr-》memory地址,用于外设和内存的数据传输
DMA_DIR -》传送方向,分别有外设到内存,内存到外设,内存到内存
DMA_BufferSize -》传输的buffer size
DMA_PeripheralInc -》外设地址是否自加
DMA_MemoryInc -》内存地址是否自加
DMA_PeripheralDataSize -》外设每个data的size,分别有1byte,半字,全字
DMA_MemoryDataSize -》内存的每个data的size,如上
DMA_Mode -》DMA mode,分别是传输完了是否循环还是正常
步骤四:DMA使能中断:
DMA_ITConfig(DMA_STREAM, DMA_IT_TC, ENABLE);其中DMA有发送完成中断,完成一半中断,和错误中断等
步骤五:开始传输
/* DMA Stream enable */ DMA_Cmd(DMA_STREAM, ENABLE);
相关文章推荐
- vim命令图解
- 单链表的C++实现(采用模板类)
- DICOM简介
- Spring切入点表达式
- 大部分人都会做错的经典JS闭包面试题
- AJAX 跨域请求 - JSONP获取JSON数据
- UVA442栈
- 第十六章 综合实例——《跟我学Shiro》
- struts2拦截器
- 模板方法模式
- nodejs SSL Error: CERT_UNTRUSTED while using npm command 错误
- html文字超出隐藏并显示省略号
- 指针随笔
- LeakCanary——直白的展现Android中的内存泄露
- linux ./configure 的参数详解
- Android TextView HTML链接
- VC常见问题处理方法
- 发手气红包算法
- BitSet的使用
- 第十章编程练习(5)