如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的
如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用
git的使用(下载及上传_gitcode怎么下载文件_是小刘不是刘的博客-优快云博客
ADC(模拟转数字):本次代码是采集端口电压,并且通过可变电阻改变电压值观测
使用非扫描单次和非扫描连续来进行多通道和单通道的采集
为什么没有扫描呢(因为规则组只有一个数据寄存器,所以一次采集多少个通道他也只会保存一个,如果想保存多个最后用DMA将数据转运,DMA的知识会到下一章写,这个也就刚好当作DMA的实践了)扫描模式连续采集文章如下。
目录
一、理论部分
1. ADC简介
先大致了解下,后面会写到为什么是1us转换时间、也会写转换结果精度的问题、通道数什么的也会详细介绍、模拟单元后面也会具体讲、模拟看门狗自动检测可以减少进看门狗中断的检测次数减少硬件的压力。(然后每个板子的adc数量是不一样的,f103的好像都是2个ADC,具体有几个就得去看芯片手册了。
2. 逐次逼近型ADC
这里我们先说说一个8位的ADC,stm32内部的为12位的,只能说精度更高,但是原理差不多,所以我们先了解一下这个远古芯片ADC0809。因为stm32是ADC外设,所以没有具体画出adc的工作方式,这里正好可以了解一下。
1) 首先第一部分就是选择器:这个很简单,总不能18个通道给你18个选择引脚把,这里通过3位选择器来控制8个通道的选择
2) 第二部分 一个DAC 通过DAC的输入范围Vref+和Vref-来确定DAC和ADC的参考电压,所以这里如果是5v那ADC的输入也要是5V,然后ADC通过每次取值(二分法取值,假如输入范围是0-255,我们就会拿126与输入值进行比较,如果不对就继续减小或者加大)这里刚好二分法的取值是二进制的权值,所以只需要8次就能判断出8位ADC的值
之后是上面的那一部分使能和时钟了,ADC内部是需要时钟来控制的,EOC转换结束信号
3 )第三部分是输出,8位8个输出,12位12个输出
3 stm32ADC框图
这个看着就比刚刚说的那个芯片复杂很多了
但是逻辑方面差不多,首先是16个通道的输入IN0-IN15 还有两个内部源 一个温度传感器一个参考电压的输入(总共18个通道
然后中间有一个模拟多路开关,这个一个4选16的开关
然后是输入到两个通道:一个注入通道,一个规则通道,这两个通道分别由自己的使用方面
1:注入通道:可以一次选择四个通道,并且也能存储4个处理结果。
2:规则通道:可以一次选中16个通道但是只能存储一个量,一般配合DMA使用,存一个就转移一个走,这里右侧有个ADCCLK就是ADC的时钟,前面说过ADC内部的比较是需要时钟的干预的·。这个时钟源是来自ADC的预分频器,如图所示,经过APB2后分屏(将72M分2 4屏很显然超过了最大14M的限制这里就最大只能6 分下来为12M。
然后是这一块,1 为一个模拟看门狗,如果我们打开了这个模拟看门狗他就会一直帮我们检测这个adc的转换结果,分别有上限为和下下限位,如果超出了阈值就会输出一个·AWD信号标志位
2 为通道的输出,当注入组和规则组转换完成,也会输出一个标志位出去。
然后是下面这一部分是触发源:ADC可以软件触发,也可以硬件触发
上面是注入组的触发源下面是规则组的触发源,有一些时钟通道和TRGO(这个东西就是可以硬件自动完成转换的,减少代码频繁进入中断,产生不确定因素的可能)吧时钟触发源选择为TRGO然后这里触发源选择TRGO就行。
总结一下(直接找的中科大的PPT
从左往右看