江科大STM32学习——ADC-DMA

介绍:

        STM32系列中ADC为12位逐次逼近型模拟数字转换器,最大转换显示数字范围4096,线性对应输入的电压,可以测量16个外部通道以及2个内部通道,输入时钟不能超过14Mhz,一般采用6分频即采用12Mhz时钟频率。

        ADC可以采用软件进行触发,也可以采用硬件触发(来自定时器、外部中断触发),工作模式有单次模式、扫描模式,连续模式、间断模式,转换单元有规则组以及注入组模式,同时可以模拟看门狗事件,在转换完成均产生标志位可以连接至NVIC进行产生中断。

        规则组是常规转换单元,可以配置16个序列通道(外部或者内部),转换结果均存在数据寄存器DR低十六位中,会进行覆盖,一般与DMA配合使用。注入组一般用于执行高优先级任务,最多执行4通道,每个通道有单独寄存器。可以由外部事件触发,可以产生中断,两者可以同时工作,规则组转换期间产生注入触发,将暂停规则组转换,待注入组转换完成在继续。

 工作模式:

         规则组工作模式可以分为单次、扫描,间断、连续工作模式,单次、间断模式仅在序列一中填入通道,转换一次结束,单词连续模式连续对序列1进行转换工作,输出到DR寄存器中,扫描间断模式对n个序列中通道进行扫描,会数据覆盖,配合DMA使用进行转运,到最后一个填写的通道结束,扫描连续模式则该次转换完成后继续转换。

运行流程:

1:开启时钟,GPIO(模拟输入),ADC时钟,配置时钟(12Mhz)

2:配置ADC通道,需要哪些通道在序列几进行配置

3:初始化:选择工作模式(独立,双ADC),是否连续扫描,是否连续转换,软件还是硬件触发,数据对齐,选中的通道数目是多少。

4:其他需求:中断等

5:开启ADC

6:校准:固定方法:

复位校准

复位校准完成(while等待完成==set)

开始校准

等待校准完成(while等待完成==set)

7:软件触发的话需要使用库函数进行触发

相关库函数:

RCC_ADCCLKConfig:ADC时钟配置

ADC_Init:

        mode:选择独立模式independence还是双ADC模式

        dataalign:数据对齐右对齐

        ADC_ExternalTrigConv:外部触发源选择:None就是选择内部软件触发

        ADC_NbrOfChannel:本次需要转换的通道数目是多少个

        ADC_ScanConvMode:单次连续扫描模式

        ADC_ContinuousConvMode:连续转换模式

ADC_RegularChannelConfig(通道设置,在序列几写入通道几,需要几个复制几个函数)

ADC_DMACmd:使用DMA输出数据时需要用这个开启

ADC_ITConfig:通往NVIC

ADC_SoftwareStartConvCmd:软件触发开启开关,执行该命令开始转换,cmd为上电命令

ADC_GetFlagStatus:检查EOC标志位是否置1了,检查转换是否结束,waitingEOCwhileRESET)

ADC_GetConversionValue:获取转换值

DMA:直接存储器存取

通过独立通道将数据从外设到存储器,存储器到外设,存储器到存储器的数据传输,无需CPU干预,减轻CPU负担。

12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)(数据转运路径),每个通道都支持软件触发(存储器——存储器)以及特定的硬件触发(存储器——外设)

工作模式: 

        确定数据传输方向:外设(存储器)——存储器,确定地址、数据传输宽度、是否自增(外设不自增,存储器需要自增)

        可以选择软件触发以及特定通道的硬件触发,触发次数依据计数器值来进行确定,注意,软件触发不能与自动重装一起使用,硬件触发可以使用。

        DMA工作三大条件:传输计数器大于0、触发源有信号、DMA使能

DMA库函数:

DMA_Init:初始化

        DMA_PeripheralBaseAddr起始地址(外设地址,当存储器-存储器时,该地址为存储器地址)(32位)     (地址需要转为32位)

        DMA_PeripheralDataSize(数据宽度)

        DMA_PeripheralInc(是否自增)

        DMA_DIR:传输方向

        DMA_BufferSize:传输计数器大小

        DMA_Mode:是否启用自动重装

        DMA_M2M:选择硬件还是软件触发

        DMA_Priority:优先级

DMA_SetCurrDataCounter:设置传输计数器,写计数值时,必须先关闭DMAdisable函数

DMA_GetFlagStatus:获取标志位:需要手动清除标志位。

ADC与DMA联动:

        在标准组扫描模式中,需要对数据进行及时转运,否则DR寄存器中数据将被覆盖,可以源地址写DR寄存器,目标地址写SRAM存储器地址(变量数组地址),外设不自增,存储器需要自增来进行数据读取记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值