附件为STM32F0系列ADC的多通道采集,DMA中断方式,注释非常详细,分享给大家,部分代码如下, [( q: ~/ h7 ^
) y4 h4 N' [) ~ M- /**
5 W" N+ K) G' T" E: F5 S2 S - * @brief 配置ADC1的工作模式1 ~- s8 R' L% h. ^
- * @param 无
) Z' L3 p) H3 r4 O; ~" I - * @retval 无
" d3 @+ B7 Q+ b) m" Z - */
2 R, R% g9 K ?8 n - static void ADC1_Mode_Init(void)
1 ?- J& o2 M( |9 j$ u0 J+ \' d - {
) O7 ^ E, {! o - ADC_InitTypeDef ADC_InitStructure;. s, J& Q( b& ? {3 M/ {$ {% z
' N2 g# I& m% T( l! {6 Q# p. a! L! U- /*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/3 b# ~' a. Y d: V# L+ \' _) Y
- RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
2 p6 f2 b! [2 Y) G, o- G
n* D; Q6 z" V2 h4 {+ n, k- /* ADC1 Periph clock enable */
& K4 W3 h; O$ B6 L: ` - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);7 l2 \4 Z5 B4 j+ `4 ], g8 B
- ) l9 v) [. ^# e9 F9 }3 L! [
- /* ADC1 DeInit */ * A% u! {$ `5 [ z6 B
- ADC_DeInit(ADC1);
- a2 [2 e1 r1 ~7 J) \& s - 6 F8 s% S# V/ N! P0 X3 v3 Q
- /*初始化ADC结构体,此句必须加,不加的话多路ADC数据会交换*/
. T: l0 }, K) B& f# ? - ADC_StructInit(&ADC_InitStructure);
& Z# q! U5 e) b& J7 q/ j - 7 \4 |+ J% J( u- F( ^2 j
- /*配置ADC分辨率为12位*/3 U$ q) i$ `( j; u
- ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
, F0 s6 k5 R/ S2 D0 { K" c - - m4 d& }: g7 S* {) @
- /*开启连续转换*/" C1 a! T8 [" l+ m" S$ e K& W
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
1 Z7 m j& T& d2 s1 \8 ~
2 r5 |. O# |2 C) V7 v) e& e- /*禁止触发检测,使用软件触发*/5 y8 Z. S `4 A
- ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
1 c# n$ f" j' {$ q- F
- j# j5 @0 @( i/ n8 E! X' M& X- /*ADC采集数据右对齐*/! n' M! Y* f u" f
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;* d' M5 {& V9 D( u, C# K- u4 u
- 9 [% V. e' u' d4 ^% G7 U4 k
- /*向上扫描*/
& f8 ~$ M0 O1 T+ k4 A9 @ - ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
u6 H" }9 Y6 Y- P9 Q
9 x- x0 {4 n" g% p9 g- /*ADC初始化*/: i5 _! B! |( s+ Z
- ADC_Init(ADC1, &ADC_InitStructure); 1 G" d0 L d! l
-
7 r" B+ v' d' Z# q" ]2 [ - /*配置采样通道及时间*/* p* t+ D; I" O
- ADC_ChannelConfig(ADC1, ADC_Channel_0 | ADC_Channel_1, ADC_SampleTime_239_5Cycles);
( l7 X& q9 e7 f8 u - 1 l" [1 d3 ~' E. o
- /* ADC 校准 */' m- z A5 e: ^" K& _
- ADC_GetCalibrationFactor(ADC1);8 D! n$ i! }% R
- ' D+ M; P& B- ^9 V- l( H
- /* 循环模式下的 ADC DMA 请求 */
) k8 X4 f C5 @+ j - ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
# w4 s) V( o* O+ \# Z/ o
: ` m* H. ~, s1 v: o- /* 使能 ADC_DMA */: R' V' t( b1 I% O! Z
- ADC_DMACmd(ADC1, ENABLE);
3 }# V' m3 ]" k# b: |2 _
# {9 g w1 ]8 k# Y b- /* 使能 ADC1 */* a2 k4 N4 M; F8 P& y6 Z9 [
- ADC_Cmd(ADC1, ENABLE);
6 z" ~3 k0 Z0 I, T% r( c% \" t - " P9 S# V, m8 }( c0 O' `0 g
- /* 等待 ADCEN 标志 */
. g+ n) L# m) M! k/ k - while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
2 A# q7 c' k5 @; ?% o - - o {9 d2 t% |( o, H b
- /* ADC1 常规软件启动转换 */ ) J8 q/ l) k \8 c
- ADC_StartOfConversion(ADC1);
; J) }4 z& W- R% @( h" B+ L -
% B1 \, W( A( |8 \5 c7 T3 g1 o/ L V3 J5 s - }
复制代码
, C; ]$ y. w D |3 n) X, @
5 N! @& E" o: i( P |
* @brief Configures the ADC clock (ADCCLK).3 H$ G# L: ~% g. {' x% y" m' R2 C
* @note This function is obsolete.
* For proper ADC clock selection, refer to ADC_ClockModeConfig() in the ADC driver7 O3 C. v" g1 E) ^" Q7 J' Z r/ d8 z
* @param RCC_ADCCLK: defines the ADC clock source. This clock is derived 1 m, G# R0 x% x4 C1 }( \! E
* from the HSI14 or APB clock (PCLK).
* This parameter can be one of the following values:0 @$ b- N5 \, f) ]
* @arg RCC_ADCCLK_HSI14: ADC clock = HSI14 (14MHz)- L+ |) a/ [ i( s. d$ G
* @arg RCC_ADCCLK_PCLK_Div2: ADC clock = PCLK/2
* @arg RCC_ADCCLK_PCLK_Div4: ADC clock = PCLK/4
* @retval None
*/
void RCC_ADCCLKConfig(uint32_t RCC_ADCCLK)
此函数已废弃,正确ADC时钟选择,请用函数ADC_ClockModeConfig()
void ADC1_Mode_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;# _9 k# T2 D- X$ |) A1 {" F& g
/*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/
RCC_ADCCLKConfig(RCC_HCLK_Div4);
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
, ?0 \# p3 q- v: ~+ R
源码为红字,正确的应该为蓝字,当然影响不大,但起码会影响串口速率.0 k9 q3 E8 G# T, o" |2 {7 h
! J D! l9 ?. e# _) X
另采集数据全0,还没看那里的问题..
滤波显然会影响速度的吧?7 i# M! l% l' M" Y0 P* p
滤波之后还能有多少bit?) L# n2 U( n, {; s
你现在是内基准还是外基准?
内部adc毕竟还是和外部adc有差距,一个单adc芯片都能顶上还几个stm32了 呵呵。
能帮到你就好
能给你提供有用信息就行
我用串口打印了,我用的是dma中断,在主循环检测dma中断是否完成
多谢版主支持