DMA_DeInit
时间: 2024-06-16 21:06:40 浏览: 10
DMA_DeInit是一个函数,用于将DMA(Direct Memory Access,直接内存访问)控制器的配置恢复到默认值。它通常在DMA使用完成后或者需要重新配置DMA时调用。
该函数的具体实现可能因不同的硬件平台而有所不同,但一般包括以下步骤:
1. 关闭DMA通道:停止DMA传输并禁用DMA通道。
2. 清除DMA寄存器:将DMA相关的寄存器值恢复为默认值,以确保下次使用时的正确配置。
3. 释放DMA资源:释放DMA相关的资源,如内存缓冲区等。
相关问题
解释下面的代码:void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输 DMA_DeInit(DMA_CHx); //将DMA的通道1寄存器重设为缺省值 DMA1_MEM_LEN = cndtr; DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMA外设基地址 DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMA内存基地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //数据传输方向,从内存读取发送到外设 DMA_InitStructure.DMA_BufferSize = cndtr; //DMA通道的DMA缓存的大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输 DMA_Init(DMA_CHx, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
这段代码是配置STM32的DMA通道,用于在外设和内存之间进行数据传输。具体的解释如下:
1. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE):使能DMA传输,打开DMA1的时钟。
2. DMA_DeInit(DMA_CHx):将DMA的通道1寄存器重设为缺省值,清空DMA通道的所有寄存器。
3. DMA1_MEM_LEN = cndtr:设置DMA传输的数据长度,即DMA缓存的大小。
4. DMA_InitStructure.DMA_PeripheralBaseAddr = cpar:DMA外设基地址,表示数据从哪个外设开始传输。
5. DMA_InitStructure.DMA_MemoryBaseAddr = cmar:DMA内存基地址,表示数据传输到哪个内存地址。
6. DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC:数据传输方向,从外设读取数据发送到内存。
7. DMA_InitStructure.DMA_BufferSize = cndtr:DMA通道的DMA缓存的大小,与第3步设置的数据长度相同。
8. DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable:外设地址寄存器不变,表示数据从同一外设地址连续传输。
9. DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable:内存地址寄存器递增,表示数据传输到内存的地址连续递增。
10. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte:数据宽度为8位,表示一次传输的数据大小为1字节。
11. DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte:数据宽度为8位,表示一次传输的数据大小为1字节。
12. DMA_InitStructure.DMA_Mode = DMA_Mode_Normal:工作在正常模式,表示数据传输完成后DMA通道自动停止。
13. DMA_InitStructure.DMA_Priority = DMA_Priority_Medium:DMA通道x拥有中优先级,表示在多个DMA通道同时传输数据时,DMA通道x会被优先处理。
14. DMA_InitStructure.DMA_M2M = DMA_M2M_Disable:DMA通道x没有设置为内存到内存传输,表示数据传输的源和目的地不是内存地址。
15. DMA_Init(DMA_CHx, &DMA_InitStructure):根据上述配置,初始化DMA通道x。
/* Function used to set the DMA configuration to the default reset state *****/ void DMA_DeInit(DMA_Stream_TypeDef* DMAy_Streamx); /* Initialization and Configuration functions *********************************/ void DMA_Init(DMA_Stream_TypeDef* DMAy_Streamx, DMA_InitTypeDef* DMA_InitStruct); void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); void DMA_Cmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); /* Optional Configuration functions *******************************************/ void DMA_PeriphIncOffsetSizeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_Pincos); void DMA_FlowControllerConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FlowCtrl); /* Data Counter functions *****************************************************/ void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter); uint16_t DMA_GetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx); /* Double Buffer mode functions ***********************************************/ void DMA_DoubleBufferModeConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t Memory1BaseAddr, uint32_t DMA_CurrentMemory); void DMA_DoubleBufferModeCmd(DMA_Stream_TypeDef* DMAy_Streamx, FunctionalState NewState); void DMA_MemoryTargetConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t MemoryBaseAddr, uint32_t DMA_MemoryTarget); uint32_t DMA_GetCurrentMemoryTarget(DMA_Stream_TypeDef* DMAy_Streamx); /* Interrupts and flags management functions **********************************/ FunctionalState DMA_GetCmdStatus(DMA_Stream_TypeDef* DMAy_Streamx); uint32_t DMA_GetFIFOStatus(DMA_Stream_TypeDef* DMAy_Streamx); FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG); void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState); ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT); void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT);具体解释
这是一段用于配置和控制DMA(直接内存访问)的函数。DMA是一种数据传输方式,用于在外设和内存之间直接传输数据,而不需要CPU的干预。
这段代码包含以下函数:
1. `DMA_DeInit`: 将DMA配置为默认复位状态。
2. `DMA_Init`: 初始化并配置DMA流,使用给定的DMA_InitTypeDef结构体参数。
3. `DMA_StructInit`: 将DMA_InitTypeDef结构体参数初始化为默认值。
4. `DMA_Cmd`: 启用或禁用指定的DMA流。
5. `DMA_PeriphIncOffsetSizeConfig`: 配置DMA传输过程中外设地址增量、内存地址增量和数据宽度。
6. `DMA_FlowControllerConfig`: 配置DMA流的流控制器。
7. `DMA_SetCurrDataCounter`: 设置当前数据传输计数器的值。
8. `DMA_GetCurrDataCounter`: 获取当前数据传输计数器的值。
9. `DMA_DoubleBufferModeConfig`: 配置DMA流的双缓冲模式,并指定两个缓冲区的内存地址。
10. `DMA_DoubleBufferModeCmd`: 启用或禁用DMA流的双缓冲模式。
11. `DMA_MemoryTargetConfig`: 配置DMA流传输过程中的内存目标地址。
12. `DMA_GetCurrentMemoryTarget`: 获取当前DMA流传输过程中的内存目标地址。
13. `DMA_GetCmdStatus`: 获取指定DMA流的使能状态。
14. `DMA_GetFIFOStatus`: 获取指定DMA流的FIFO状态。
15. `DMA_GetFlagStatus`: 获取指定DMA流的指定标志位状态。
16. `DMA_ClearFlag`: 清除指定DMA流的指定标志位。
17. `DMA_ITConfig`: 配置指定DMA流的中断使能状态。
18. `DMA_GetITStatus`: 获取指定DMA流的中断状态。
19. `DMA_ClearITPendingBit`: 清除指定DMA流的中断挂起标志位。
这些函数可以帮助配置和控制DMA传输,以满足特定应用需求。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)