之前有陆续介绍STM32的ADC采样与板载运算放大器,本期我们将二者结合,顺带再完善一下ADC采样与DMA。/ I+ Z$ I1 ^2 q% m7 b 板载运算放大器; C+ T. j7 ^% ? 板子使用的ST公司的STM32G474RE部分板子上没有板载OPAMP的话可以忽略运算放大器的部分。 我们打开运算放大器的跟随器功能,将跟随器的输出和STM32的ADC绑定,使得我们的信号接入PA1即可通过跟随器被采样。$ A7 p/ @6 t( t9 Y: H ADC配置 4 k3 ^3 |( ]8 \- Z" @( {2 c + T) Q* E8 k+ X 开启ADC1_12,这里通道12只能配置为单端输入,其他的通道可以配置为差分输入。$ \: ?5 E5 O, ~0 Y0 P - N3 `- q: G6 m2 s 添加DMA传输,模式选择正常模式,这样子我们只采集一组ADC数据,这里如果开启了Circle模式的话,环形存储区会导致DMA后面采集的数据覆盖前面采集的数据,导致数据乱飞。 9 H" Q2 Y7 Q3 ]' ~; a9 M# t$ ]: i 触发方式(启动ADC转化)我们选择定时器8,这边可以是任意定时器推荐使用的是低级定时器,这样子就可以控制我们的采样率。% Z) d# R. m7 v5 W4 P8 } 定时器配置 这里解释一下Timer 8 Trigger Out event. + i v, M: V( @7 t8 o4 y4 M 定时器(Timer)的触发输出事件(Trigger Output Event)可以用于生成特定的触发信号,以触发其他外设或事件。 3 ~ l3 B4 \1 m* } 在STM32定时器中,可以配置不同的事件作为TRGO信号的源。常见的触发源包括:0 i& K3 h5 @: n7 T* [8 ?4 y! t5 ? 更新事件(Update Event) 当定时器的计数器溢出或达到设定的周期值时产生的事件。 捕获/比较事件(Capture/Compare Event)+ b4 g- x& v6 N7 O& z# m" ?, J$ O+ O 当定时器捕获输入信号或计数器值与比较值匹配时产生的事件。 输出比较事件(Output Compare Event)1 O. ^2 z7 B$ q 当定时器的输出比较单元产生一个输出信号时的事件。 5 B: U- K, H' P. I8 U/ F" G. v0 N: A 这里设置好我们的分频系数,计数值,设置一个Update Event更新事件来触发定时器采样。这里我的主频是170MHZ,分配系数是169,溢出值是100,这样子过100us触发采样,采样率固定下就是10KHZ。' B3 t0 {9 U4 i; M + a- m0 |2 M% e" G" X ~ 我们强调过好几次,根据奈奎斯特采样定律,采样率必须高于信号频谱最高的两倍,当然我们在性能充裕的情况下最好是在最高频率的倍数高一点。 : G6 v, y3 b r) _ 最后别忘记开启相对应中断源的中断。& G! Z$ w2 z" `" D9 \ $ j) {" Q9 n2 S! K 接着就是创建工程。
定义一个数组用以充当DMA的缓存区。! X3 O$ _# O* j% l9 {
在主函数中使用轮询的方式等待ADC传输完成,传输完成后我们利用串口打印。2 D% N0 L5 D# j% Z( @5 @7 S7 X 我们使用HAL_DMA_GetState函数来获取状态。+ }" s# d; q/ V$ n
当DMA属于就绪状态就说明传输结束。这里有一个坑点,关于" j/ v% Y8 k5 [5 o. K HAL_DMA_PollForTransfer这个函数按理来说是用来查询传输结束的,但是不知道为什么使用起来很奇怪。+ F% }/ N Y* l' J9 G & u* O4 K; \5 ? 2 K- R# Y/ j' I7 _1 x 这是我们采集的方波信号。, { ^3 D. b' ^$ L 转载自:电路小白; ]2 k- f8 U2 c3 R1 ` 如有侵权请联系删除5 B7 B* k7 n( \' ^* ^3 b) I1 N 7 z9 v2 X" F* d1 F+ m6 p ) u5 M# v9 y; P; G |
STM32的DMA双缓冲模式详解
基于STM32使用ADC的多通道采样经验分享
基于STM32的心率计以DMA方式获取传感器数据经验分享
基于STM32利用ADC+DMA采样显示经验分享
【经验分享】STM32使用DMA接收串口数据
基于STM32的DMA经验分享
基于STM32F407和Cubemx的ADC采集+DMA传输实现简易示波器经验分享
基于STM32CubeMX实现ADC的经验分享
基于STM32F407的DMA采样+FFT时域经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享