关于STM32系列的文章网上有很多了,我这里不会讲如何使用,只是分享下几种使用方法,有同感的同学可以回去试下
ADC的采样触发可以分为几种模式(个人分类):
1)手动触发:需要的时候去触发
2)定时触发:起定时器,在需要的时候去触发
3)自动周期触发:使用芯片自带触发功能,周期性触发
4)事件触发
5)还有其他模式,选择自己需要的就行
我的小车把红外传感、电压采样都分配到了ADC,使用的是周期规则采样,触发源用的是TIM2_CC2,也可以根据实际设计选择其他资源
(上述图片来自ST芯片 参考手册)
使用的时候请注意下STM32F1系列的ADC输入引脚不是5V兼容的,其他的没有什么了。
在使用的时候一般会使能DMA,在如何使用DMA及DMA中断处理上也有几种方式,如我画的图
1、映射内存地址固定不变。映射的内存地址可以是一个short,也可以数组,长度保持是short的整数倍即可。每次采样完成并完成数据自动搬移后,芯片触发DMA中断。使用者也有2中选择
1-1 直接取走数据,用于控制或者计算
1-2 在中断ISR中讲数据放入独立缓存,供任务读取调用
只要遵循ISR中不要有阻塞操作和超时处理即可。在带OS的系统中,1-2方式中不要有获取信号量的阻塞操作,所以如果是独立队列管理,要提前考虑重入设计。
2、DMA搬移内存地址动态变化。从1-2中可以看出,写缓存的操作就有2中,一种带数据拷贝,另一种就是这种内存地址动态映射的。优势就是减少了一次内存搬移,缺点是在中断ISR中要做队列管理(检查)
代码就不贴了,网上有很多,也可以下载我上传的代码。