STM32学习笔记(八)--DMA直接存储器存取详解

(1)配置步骤
1.配置RCC外设时钟 开启DMA外设
2.初始化DMA外设 调用DMA_Init 外设存储器站点的起始地址 数据宽度 地址是否自增 方向 传输计数器 是否需要自动重装 选择触发源 通道优先级
3.开启DMA控制
4.开启触发信号输出(如果需要硬件触发)
5.开启中断输出(如果需要DMA中断)

(2)代码示例
案例1  ADC1单通道 PA0单通道模拟输入实例

uint16_t MyDMA_Size;
void MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size)
{
MyDMA_Size = Size;
//开启DMA1外设时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_InitTypeDef DMA_InitStructure;
//外设站点起始地址 数据宽度 地址是否自增
DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
//存储器站点起始地址 数据宽度 地址是否自增
DMA_InitStructure.DMA_MemoryBaseAddr = AddrB;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向
DMA_InitStructure.DMA_BufferSize = Size;//缓存区大小 传输计数器
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//传输模式 是否使用自动重装
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;//硬件触发\软件触发
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//优先级
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
//DMA1(1--7)、DMA2(1--5) 
DMA_Cmd(DMA1_Channel1, DISABLE);
}
void MyDMA_Transfer(void)
{
//每当要重新获取一次DMA数据的时候 可以调用下面的函数
	DMA_Cmd(DMA1_Channel1, DISABLE);//失能
	DMA_SetCurrDataCounter(DMA1_Channel1, MyDMA_Size);//重新存放
	DMA_Cmd(DMA1_Channel1, ENABLE);//使能
	while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//判断转运成功与否
	DMA_ClearFlag(DMA1_FLAG_TC1);//标志位清除
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-19 08:10:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-19 08:10:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-19 08:10:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-19 08:10:03       20 阅读

热门阅读

  1. 从0到1上线小程序的步骤

    2024-06-19 08:10:03       5 阅读
  2. 虚设备与Spooling技术

    2024-06-19 08:10:03       6 阅读
  3. 【100个C++面试题和解答】

    2024-06-19 08:10:03       7 阅读
  4. 数据结构——顺序表的实现

    2024-06-19 08:10:03       9 阅读
  5. 「前端+鸿蒙」鸿蒙应用开发-布局

    2024-06-19 08:10:03       10 阅读
  6. 拥抱未来:探索改变游戏规则的新存储技术

    2024-06-19 08:10:03       7 阅读
  7. LLM大语言模型(GPT)的分布式预训练与微调及部署

    2024-06-19 08:10:03       11 阅读
  8. 创建最基本的web服务器-http模块

    2024-06-19 08:10:03       7 阅读
  9. cpp混淆详解

    2024-06-19 08:10:03       11 阅读
  10. ListMapToExcel

    2024-06-19 08:10:03       8 阅读