1.转换结束
STM32在ADC转换结束后有几种处理方式:转换结束中断、模拟看门狗中断、溢出中断、DMA请求,其中转换结束中断是最常规的处理方式。下面先简单介绍其他三种方式。
当采样电压超出低阈值和高阈值电压时,则看门狗中断产生,低、高阈值分别由ADC_LTR和ADC_HTR设置。所谓看门狗中断,顾名思义,是指有一只“狗”一直监视着,在系统出现异常时,发出警报中断。ADC的看门狗中断,是指当监视的电压超出阈值范围,看门狗发出中断信号,可用于温度、湿度、电池电压等检测场合。
溢出中断与DMA请求均用于DMA传输模式下。DMA的意思是直接内存访问(Direct Memory Access),是一种不需要CPU参与的内存读取接口,普遍用于高性能的计算机系统。关于DMA,读者可以查阅STM32F4xx中文参考手册。
2.转换数据存放
当ADC转换完毕后,ADC转换的数据根据转换组的不同,存放的位置也不一样。规则通道的数据存放在ADC_DR寄存器内,注入通道的数据存放在ADC_JDRx内。如果使用双重或者三重模式,那么规矩组的数据存放在通用规则数据寄存器ADC_CDR内。
(1)规则数据寄存器ADC_DR。
ADC规则通道数据寄存器ADC_DR只有一个,是一个32位的寄存器,只有低16位有效,并且只能用于存储独立模式的转换结果。因为ADC的最大精度是12位,ADC_DR是16位有效,这样允许ADC存放数据时可选择左对齐或右对齐。具体以哪一种方式存放,由ADC_CR2的11位ALIGN设置。现设置ADC精度为12位。如果设置数据为左对齐,AD转换完成的数据存放在ADC_DR寄存器的[4:15]位内;如果设置数据为右对齐,则数据存放在ADC_DR寄存器的[0:11]位内。(www.xing528.com)
规则通道可以有16个,而规则数据寄存器只有一个,如果使用多通道转换,那么转换的数据就全部挤在了ADC_DR里面,前一个时间点转换的通道数据就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后我们就应该把数据取走,或者开启DMA模式,把数据传输到内存里面,不然就会造成数据被覆盖。最常用的做法就是开启DMA传输。
如果没有使用DMA传输,我们一般使用ADC状态寄存器ADC_SR获取当前ADC转换的进度状态,进而进行程序控制。
(2)注入数据寄存器ADC_JDRx。
ADC注入通道最多有4个通道,刚好注入数据寄存器也有4个,每个通道对应着自己的寄存器,不会像规则数据寄存器那样产生数据覆盖的问题。ADC_JDRx是32位的,低16位有效,高16位保留。数据同样分为左对齐和右对齐,具体以哪一种方式存放,由ADC_CR2的11位ALIGN设置。
(3)通用规则数据寄存器ADC_CDR。
规则数据寄存器ADC_DR仅适用于独立模式,而通用规则数据寄存器ADC_CDR适用于双重和三重模式。独立模式就是仅仅适用于三个ADC中的一个,双重模式就是同时使用ADC1和ADC2,而三重模式就是三个ADC同时使用。在双重或者三重模式下,ADC数据的采集一般需要配合DMA数据传输使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。