在及时性要求比较高的场合,AD采样需要持续进行,STM32提供了AD采样中断和持续采样功能,可以比较方便的实现这一功能。下面是一个基于STM32F051的主要代码配置流程。
方法/步骤
-
1
第一步:配置相关的AD端口为模拟或者复用输入,一般AD选模拟输入比较好,当然对于STM32F051选复用(GPIO_Mode_AF)貌似也是可以的。
-
2
第二步:设置目标AD所对应的NVIC,选择NVIC通道为ADC对应的中断向量,使能通道,优先级可以根据需求设置,如果采样即使性要求非常高可以考虑设置为最高优先级,但是要注意不要干扰主流程的执行。
-
3
第三步:配置AD主要参数和相关通道。要注意使能持续采样,同时不要开启外部触发,此外对于AD采样的速率不可太快,否则可能导致中断程序执行的速度都没AD采样快,导致程序一直在执行AD中断,无法执行其他程序。
-
4
第四步:一般而言,在初始化AD时都需要对其进行校准,这个对AD采样有一定的帮助。
-
5
第五步:加入对应的ADC采样中断处理函数,对于STM32F051的ADC1的中断函数是void ADC1_COMP_IRQHandler(void)。因为我只使用了一个AD通道,所以读取采样中断后直接将AD值保存起来,然后清除标志。
-
6
最后:对于主程序,可以根据具体需求添加,比如加个串口传送新采样到的AD。
END
注意事项
-
1、AD中断采样时采样速率不能比中断函数执行的速度还快,否则会导致整个程序卡死在中断函数。
-
2、等待AD校准完成前要使能AD功能,否则会导致程序不向下执行。
-
3、如果需要自动循环地进行AD采样,不要开启AD的外部触发,即adcInitTypeDef.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//无外部触发
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
文章评论