一、学习内容
二、ADC配置讲解
转换时钟来源于本地的80mhz的振荡器,使得高速的12bits的转换可以达到4mhz的采样率
ADC转换过程分两个步骤,一是采样,二是转换
因此,配置中的是采样时钟
真正决定采样速率的是conversion clock 决定
转换时钟并不能手动配置,是由80mhz的振荡器来获取时钟的
所以不必担心采样时钟的采样率,维持默认设置即可
对于start和enable的配置,syscong 工具配置完成后,会将enable置1,然后转换一次后置零

模式一 单通道单词转换
第一个是置1,第二个是置0

对应配置如下

模式二 单通道连续转换
这种模式下,enable始终为1,start在触发转换后会被置0,但是,通道内部在转换之后会提供触发信号,从而会连续转换
模式三 多通道单次转换

模式四 多通道连续转换

Sampling Mode

自动模式
sample window 由定时器控制,通过设置定时器时间来决定采样多长时间。

手动模式
不再由定时器决定,需要再设置开始和结束时间

Trigger Source
触发方式
软件触发和事件触发(通过定时器控制)
Conversion Data Format
1无符号二进制右对齐(默认使用)
2有符号二进制左对齐(补码)

ADC Conversion Memory Configurations
下面可以对不同通道设置不同引脚和时钟

共有两个采样时钟0和1

这里可以对不同时钟进行配置,从而达到不同采样时间
Advanced Configuration

可以对转换精度进行配置,一般用12bits ,这样更加精准
Mannul模式下会耗电更多
但是电赛对这个要求不多,可以配置在改模式下
三、DMA 讲解
通过中断触发DMA,因此不使用中断去读取数据,中断选择不做处理
如果是单通道,就每次传1个,我们就用MEM0结果读进来就会触发DMA
此种场景下,选择第二种
第一种使用场景:ADC读取值,DAC 输出值
第三种使用场景:串口DMA,有一串数组,将数组传给另一个数组
后面几种不常用,这里不做介绍

因为是存储在16位的寄存器中,均选择半字节

递增数组第0个开始递增
递减从大向小递减

勾选并输入每次要搬运的数据个数

然后可以使能一个中断
当DMA 传输完成后进行的中断


- 第一个是采集1000个数一次传一个
- 第二个是采集1000个数一次传1个传1000次,使得数组里1000个位置都是这一个数
repeat 是传输完以后再进入继续传输,符合设想要求
这里的是传输起点的递增,不是过程

这里不需要改动
四、DMA使用
配置方面

代码编写
第一步
设置存放结果的寄存器的地址(即DMA要传输 的起始地址)
然后开辟新的数组空间存放DMA传输的数据,设置终点地址

查看寄存器地址的方法
点击register,出现相关寄存器地址的值
第二步
使能DMA中断
开启ADC

第三步
DMA中断服务程序

另外,由于选用repeat模式,还会不断进行DMA 传输,可能导致数组发生变化,因此调用函数关闭ADC通道

第四步
编写数据处理函数

第五步
打开ADC中断
开启ADC

五、FIFO学习
先进先出
先进后出


使用FIFO 的意义是可以降低对DMA和中断调用的频率,提升资源利用率,优化系统性能
六、FIFO的使用
勾选FIFO

更改DMA触发方式和传输数据个数


更改 数据格式
代码更改

七、多通道使用

多通道连续采集模式下是强制使用FIFO 的

八、使用定时器实现可控采样率
ADC配置
改为事件触发
使用DMA中断

关闭自动触发
选择第二个

定时器配置

定时器通道和事件

这是在ADC里面

代码编写
不需要start ADC

九、实现最高4mhz采样率
软件触发

DMA传输
采样时间

