STM32
单片机之
ADC
学习经验总结
因为公司的产品上需要使ç”?/p>
AD
来检测电池电压,要求不是很高,突ç„?/p>
想用ä¸?/p>
DMA+ADC+TIM
,以前以为很简单,实际使用中让我觉得很惭愧ï¼?/p>
遇到的问题让我一下子蒙了,不停的查资料,不停的测试,终于一个一个的
问题都解决了,同时对
STM32
çš?/p>
ADC
有了新的认识,并且打算再闲暇时间
内将
STM32
的资源尽量的实践下ã€?/p>
我用的是
STM32F4
来调è¯?/p>
ADC3+DMA+TIM1(
单通道
)
,首先我先查çœ?/p>
了下
DMA
的资料,之后参考官方提供的
ADC3+DMA
很快可以正常读取æ•?/p>
据,之后我直接添加定时器触发
AD
转换,结果失败,我开始查资料看手
册,逐渐对这三者之间的关系有了一个认è¯?/p>
首先定时器产生触发信号,
AD
检测到转换信号后开始转换,每转换一æ¬?/p>
就通过
DMA
将数据放到指定的内存地址中,直到达到
DMA
设定çš?/p>
DMA_BufferSize
设定值后
DMA
置位相应的标志位,从而完成一æ¬?/p>
DMA
ä¼?/p>
输ã€?/p>
由上面的关系的可以得çŸ?/p>
ADC
转换是一次一次即单次非扫描模å¼?/p>
(
我测è¯?/p>
的是
AD
单通道
)
,因为连续模式一旦触发就会不停的转换,这样的话定时器
触发转换就失去了意义,之å�?/p>
DMA
设置成普通模式,即完成一æ¬?/p>
DMA
ä¼?/p>
输后,停止传输,之后çš?/p>
DMA
请求不被响应,因ä¸?/p>
DMA
传输完成后以ä¸?/p>
着可以进行数据处理了,这个时候为了防止数据被覆盖
(
网上还有其他方法é˜?/p>
止数据被覆盖
)
�