DMA转运数据+AD多通道

DMA(Direct Memory Access) —直接存储器存取,是单片机的一个外设,它的主要功能
是用来搬数据,但是不需要占用 CPU, 数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以 SRAM 或者是 FLASH。
江科大学习笔记。
DMA转运的3个必要条件:①传输计数器大于0  ②有触发源 ③使能DMA
DMA数据转运
DMA转运数据编程主要思路:

1)对外设和存储器进行初始化

2)由M2M确定触发方式(merry to merry 存储器到存储器表示软件触发)

3)确定传输模式选择

4)使能DMA

DMA数据转运的详细代码介绍(本次外设作为源地址,选择一次传输,软件触发)

1)开启DMA时钟

2)初始化DMA结构体

PeripheralDaseAddr:为外设地址

PeripheralInc:地址是否自增(若外设定义为寄存器不用自增,增加地址后,寄存器发生改变了,若读取flash,sram中一块区域地址,地址自增)

PeripheralDataSize:外设数据宽度(外设数据为所示字节)

存储器初始化与外设相同

IDR:传输方向(相对于外设来说,若读取外设写入存储器中,定义为源地址,若读取存储器写入外设,定义为目标地址)

BuffSzie:传输数目(自动重载器里面的值,由读取地址内容决定)

Mode:选择一次传输或循环传输(往传输计数器写值的次数,一次还是循环写入)

M2M:软件触发(存储器到存储器)还是硬件触发,使用软件触发,模式不能选择循环模式

Priority:传输优先级

3)使能DMA,DMA开始转运

完成一次后,DMA搬运结束,若循环进行DMA搬运,对传输计数器赋值(软件触发一直有触发信号,使能DMA也不是问题)

4)循环转运DMA(手动写传输计数器,在失能DMA下进行写入)

先失能DMA,调用DMA_SetCurrDataCounter函数对传输计数器赋值,使能DMA ,等待DMA转运完成,清除DMA标准位。

DMA转运AD多通道编程的主要思路

AD配置:通过ADC_RegularChannelConfig函数,配置AD多通道,使用单次,扫描模式

DMA配置:外设地址配置为ADC1的DR寄存器,读取十六位数据(半字读取),地址不自增,定义一个数组为存储器,存储器地址为数组地址,读取数据相同,地址自增,外设为源地址,使用硬件(ADC)触发,选择一次传输模式。

打开ADC触发DMA通道

在(AD:单次,扫描模式 , DMA一次传输)情况下,循环转运,①对传输计数器赋值(与上面相同)②开启ADC软件触发 ③等待DMA转运完成

在(AD:非单次,扫描模式 , DMA循环传输)情况下,只需要软件触发ADC一次,DMA就鞥循环转运。

AD单次模式:触发一次就转化ADC一次,若需要进行循环转化,需要手动进行触发

AD非单次模式:触发一次就能够循环转运

AD非扫描模式:只对规则列表里面的序列1有效,即对序列1里面的通道进行AD转化

AD扫描模式:能够指定规则列表有效的序列数,一般与DMA相配合使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值