ADC介绍
1:一个ADC虽然有很多通道,但是一次只能处理一个通道的数据,所以需要配置规则通道的转换顺序(SQR规则序列寄存器),有正常顺序必会有抢占(注入序列寄存器JSQR。主要ADC被烧毁是整个ADC都不能用了,而不是只烧毁掉单个通道。如果在使用中重新进行了排序,会复位然后重新开始转换
2:转换时间,采样时间可以在后面配置(Sampling Time)最低为3个,总的时间要小于2.4MSPS也就是0.41us。12bit精度存储时间就是12个周期,几bit就是几周期。
这个计算出来虽然是小于2.4MSPS,但是如果用的是中断读取,那要改小一点,不然太快了不好,也老是进中断,CPU可能都没有时间干其他事情了
3、直接看HAL库配置就知道怎么使用了;或者直接看这一节实验的视频
框图
1、用的是APB2的时钟84M,然后在对这个时钟进行分频,不能太快了
2、设定采样时间(如果使用中断去读取的话就不能设置太快,不然会一直进入到中断中)和分辨率(bit越多所需时间越多)
3、在数据手册中可以查看ADC的最大能达到的时钟,就这里的fADC,当3.3V时,稳定为30M;
寄存器
1:ADC_DR ADC规则数据寄存器
规则通道只有这么一个寄存器,使用单个ADC的时候只用读这个寄存器中的值就行了
2:ADC_CDR 适用于双重和三重模式的 ADC 通用规则数据寄存器
相当于是先将DR寄存器的值先放入这儿,然后再从这里读取
3:ADC_SR 状态寄存器
位 1 EOC:规则通道转换结束 (Regular channel end of conversion)
规则组通道转换结束后,硬件将该位置 1。通过软件或通过读取 ADC_DR 寄存器将该位清零。
0:转换未完成 (EOCS=0) 或转换序列未完成 (EOCS=1)
1:转换已完成 (EOCS=0) 或转换序列已完成 (EOCS=1)
4、一切准备就绪后,ADC 转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR 寄存器,注入组的数据放在 JDRx。如果是使用双重或者三重模式那规矩组的数据是存放在通用规矩寄存器 ADC_CDR 内的。
实验
1、用的是APB2的时钟84M,然后在对这个时钟进行分频,不能太快了
2、设定采样时间(如果使用中断去读取的话就不能设置太快,不然会一直进入到中断中)和分辨率(bit越多所需时间越多)
3、因为就他一个就多通道同时使用需要配置转换顺序的问题
4、可以选择连续转换或者开一次用一次
5、可以选择一个通道转换完成就进入中断,或者一个ADC都完成了再中断;配置扫描模式,一个组进行扫描(使用单个这些就都没有这个的必要了)
实验介绍
通过 ADC1 的通道5(PA5,就是下面这个ADC,其与PA5相连)来读取外部电压值(读3.3或者GND,不能读5V)
HAL库配置
F4407ZGT6单个通道采集是2.4MSPS,三个通道交替采集可以达到7.2MSPS
独立模式:只有一个ADC的话只有这么一个模式,当开启多个ADC这里就会出现多个模式
1:PCLK2 就是APB2外设对应的那个时钟,有最大时钟限制,分频不能取的很小。这里不能取的会自动没有
2:分辨率:后面括号的是使用这个bit最小的转换时间(已经把采样和存储都包含进去 15),转换周期=采样时间+存储时间,有多少位就需要多少的周期进行存储。采样时间是可以自己进行设置的最小要三个周期,F4至少要三个周期。意思就是15个ADC时钟周期完成采集和存储
3:数据对齐:一般都用右对齐,左对齐还要进行换算
4:扫描模式:就是多个ADC通道开启的话设置哪个ADC先转换,只使用单个ADC通道的话不用开启
5:连续转换模式:不使能ADC采样一次数据后,将数据保存到存储寄存器后,就再也不会使用了,等再想使用的话,只能手动代码重新再开启ADC。设置成使能连续转换模式一旦打开,ADC数据就会不断的进行更新,不断采样通道引脚上的电平,等要用的时候直接访问寄存器里的数据就可以了
6:DMA转换:不开启。ADC数据读取两种方式,一种就是使用中断模式,直接在ADC的中断函数中调用,或者开启一个定时器,定时去读取ADC的数据。使用DMA,只要有数据更新,就会源源不断的向我们所要的存储器中去搬运
7:转换结束选择:什么时候触发EOC标志有两种。只要有一个转换完成就触发中断&#x