STM32F1 ADC多通道+DMA采集

硬件条件

 核心板:stm32f103ret6 LQFP64封装;如下图:

     

stm32库文件:使用stm32标准库;

ADC通道数:10路,具体用到的IO口资源如下。

使用到了GPIOA,GPIOB,GPIOC。

GPIO初始化

  打开总线时钟,设置对应引脚为模拟输入。

ADC初始化

GPIO对应那个ADC通道,可查看对应芯片的官方参考手册。如下

DMA初始化

设置DMA中断的中断优先级

ADC1对应DMA通道数可参考

由于我开启了DMA传输完成中断,处理DMA_Channel1的中断处理函数

所以,每当中断发生的时候,ADC1_Converted_Value[ADC_NUMOFCHANNEL]已经获取到10个通道的数据。最后,对这些数据进行进一步的处理。

当然,开启dma传输中断不是处理adc数据的明智选择,因为这样会每顺序转化完一组序列就会产生一次中断,单片机就会去处理中断,发生的dma中断频次非常高,如果加了操作系统,会大大影响任务的执行时间,毕竟,使用操作系统就得尽可能避免少得开启中断,更何况是频次这么高的中断。更常用的方式是,增加dma内存基地址的大小,比如我的adc转化数为10个通道,我可以设置一个二维数组adcDmaBuffer[10][10],然后设置一个1ms的软件或硬件定时器(具体选择看系统需求),每间隔1ms再去对这组数据序列求平均的方式,这样可以获得更稳定更易于后续处理的adc数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值