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

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

(2)代码示例

案例1 ADC1单通道 PA0单通道模拟输入实例

cpp 复制代码
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);//标志位清除
}
相关推荐
ysa0510309 分钟前
虚拟位置映射(标签鸽
数据结构·c++·笔记·算法
Yue丶越14 分钟前
【C语言】深入理解指针(二)
c语言·开发语言·数据结构·算法·排序算法
web安全工具库20 分钟前
Linux进程的:深入理解子进程回收与僵尸进程
java·linux·数据库
赖small强36 分钟前
Linux 用户态与内核态及其切换机制
linux·内核态·用户态(user mode)·硬件中断与异常·调度与抢占
武陵悭臾37 分钟前
Python应用开发学习: Pygame 中实现数字水平靠右对齐和垂直靠底对齐
python·学习·程序人生·游戏·个人开发·学习方法·pygame
Tonya4340 分钟前
测开学习DAY26
学习
偶像你挑的噻41 分钟前
Linux应用开发-17-套接字
linux·网络·stm32·嵌入式硬件
songyuc1 小时前
《A Bilateral CFAR Algorithm for Ship Detection in SAR Images》译读笔记
人工智能·笔记·计算机视觉
01100001乄夵1 小时前
第二课:时序逻辑入门-零基础FPGA闯关教程
经验分享·笔记·学习方法
水月wwww1 小时前
vue学习之组件与标签
前端·javascript·vue.js·学习·vue