STM32的HAL库开发系列 - ADC中断
ADC_InitTypeDef结构体
typedef struct {
uint32_t ClockPrescaler; /*ADC时钟分频系数 */
uint32_t Resolution; /*ADC分辨率选择 */
uint32_t DataAlign; /*输出数据对齐方式 */
uint32_t ScanConvMode; /*扫描转换模式 */
uint32_t EOCSelection; /*转换结束标志使用轮询或者中断*/
uint32_t ContinuousConvMode; /*连续转换模式 */
uint32_t NbrOfConversion; /*规格转换序列数目 */
uint32_t DiscontinuousConvMode; /*不连续采样模式 */
uint32_t NbrOfDiscConversion; /*不连续采样通道 */
uint32_t ExternalTrigConv; /*外部事件触发选择 */
uint32_t ExternalTrigConvEdge; /*外部事件触发极性 */
uint32_t DMAContinuousRequests; /*DMA连续请求转换 */
} ADC_InitTypeDef;
转换结束中断
数据转换结束后,可以产生中断,中断分为四种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断和溢出中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
溢出中断
如果发生DMA传输数据丢失,会置位ADC状态寄存器ADC_SR的OVR位,如果同时使能了溢出中断,那在转换结束后会产生一个溢出中断。
模拟看门狗中断
当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由ADC_LTR和ADC_HTR设置。例如我们设置高阈值是2.5V,那么模拟电压超过2.5V的时候,就会产生模拟看门狗中断,反之低阈值也一样。
DMA请求
规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求。
参考和引用:STM32F4xx参考手册、STM32F4xx规格书、野火开源项目、库帮助文档