前言:ADC模数转换器,作用在于使得本来只能读取高电平或低电平的IO口可以读取高低电平之间的任意信号了,并将这一输入的模拟信号转化为数字信号呈现出来,相当于把一个看不见摸不着的变化的信号(举个例子:正弦信号)给实时用对应的电压值表示出来(现象就是可以在OLED屏幕上面实时显示当前端口的电压值)。
一、介绍
![](https://i-blog.csdnimg.cn/blog_migrate/30132811ace541cd7623e97d1068bd49.png)
其中左下方是输入引脚选择器,用来选择哪一路GPIO作为信号输入端口。
选择完输入端口之后,模拟信号进入ADC转换器,具体内部结构看下图(来自江协科技)
图中的DAC是数模转换器,可以输出一个已知电压的模拟信号。这个已知的信号和我们外部ADC端口采集的信号一起进入一个电压比较器,进行比较。如果DAC输出的已知电压更大,单片机就会调小DAC电压,然后再进行比较。这样不断的比较、调整之后DAC电压就等于外部的电压了。这样,就间接的知道了外部模拟信号的电压大小,也就是数字信号。
转换的结果会写入到上面的数据寄存器里面。这里有两个通道,分别对应不同的模式。
规则通道数据寄存器:采用规则输入,预先设置好至多16个输入端口的ADC转换,然后单片机会一个个执行,并储存到规则通道数据寄存器中。但是这个寄存器的空间很小,只能同时存一个数据。所以要使用DMA进行数据转存,这样才能得到完整的16个ADC数据。
注入通道数据寄存器:采用注入输入,即可以同时进行4个通道的ADC转换,并将其存入注入通道数据寄存器中,该寄存器的有四个位置,刚好可以储存这四个通道的数据。
三、模拟看门狗
看门狗这个称号其实非常的形象,主要作用就是在里面设置一个阈值上限与下限。当ADC的信号传过来之后超过了的这个阈值,那么看门狗就会叫。在程序上的表现就是它会申请一个中断至NVIC,使得程序停止,来进行这个中断。
四、转换模式
单次转换模式,连续转换模式,扫描模式,间断模式,双ADC模式等,这些模式的使用具体可以看手册。