附件为STM32F0系列ADC的多通道采集,DMA中断方式,注释非常详细,分享给大家,部分代码如下
, T2 H* e/ x. n9 A/ i7 A, K5 V$ C
8 Q' l3 @" Y# Q; _! X- /**
1 G0 P6 I% }+ g - * @brief 配置ADC1的工作模式
0 f8 ?' M# }+ T% r( f - * @param 无
( _( j% c! i h" n5 } - * @retval 无+ f* |. [. u$ p
- */
. c& w |& ?; ~7 F2 g4 }1 |3 M - static void ADC1_Mode_Init(void)
9 t# |" ~$ h6 F* o - {
6 `9 `& h* i* j& u - ADC_InitTypeDef ADC_InitStructure;/ S) ~9 J6 L" K( S$ e! ~. W% \
- ! a9 a B0 {: Q# I6 }+ G, f
- /*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/& S$ S* `( r6 b
- RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4); ' R* [" o5 V0 t# v: L
) C+ s, U2 y3 b9 `# W9 f- /* ADC1 Periph clock enable */
' W/ i) E3 K/ U - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
; N$ v' A w$ ]. N. {! W - E( N0 A4 V2 z! o- w
- /* ADC1 DeInit */ + `8 M( W4 i9 K9 I7 Q8 G
- ADC_DeInit(ADC1);; v" T2 O/ t3 Z8 q9 J Z
-
; Y. h& D5 r9 } - /*初始化ADC结构体,此句必须加,不加的话多路ADC数据会交换*/
5 f( A( S: `$ |. c {5 m - ADC_StructInit(&ADC_InitStructure); . F# {* F$ I5 A9 G$ X% X" f. j0 d) X
- 4 p) S" R9 P4 ^- ?8 o, _9 s
- /*配置ADC分辨率为12位*/
% z5 o4 F) z9 h - ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;8 Z6 F! t3 G1 c% _/ }
- " ~% t1 e w% B2 @9 ^
- /*开启连续转换*// z8 J, N. I. }( m& z# D
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
' P8 e4 S1 n. s+ \ - 9 G; H0 r% N) ?9 X
- /*禁止触发检测,使用软件触发*/
& S6 v: s! u( i0 }1 l - ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
' i% {) x+ B3 Y& l - - L N) |5 w9 w# y% n1 ?# N0 T
- /*ADC采集数据右对齐*/
) T: W, m/ [$ f1 o' j& B - ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;7 | u) k# k/ @- [2 v% I, w# ]
( E. _1 h4 W" y3 j- /*向上扫描*/4 }; ]& A/ [% ~! o8 _/ S
- ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;; \% X- G1 q T, G2 U
- 4 J$ o# J; y1 {: T' D( w
- /*ADC初始化*/
6 T/ D- y! ^3 H; N |7 n' | - ADC_Init(ADC1, &ADC_InitStructure); * k. a# r% G9 U% L# A2 x
-
: q. r8 _: F# o! P! S! w' R. N - /*配置采样通道及时间*/ Q0 k6 ]; h! b8 C: ~+ k* d
- ADC_ChannelConfig(ADC1, ADC_Channel_0 | ADC_Channel_1, ADC_SampleTime_239_5Cycles); # z5 x( g, V3 m: T
- * _; h9 }% M* g( f$ u
- /* ADC 校准 */
3 P* A# s. S% e5 F3 t - ADC_GetCalibrationFactor(ADC1);, O6 [* X/ u0 W# }- @, `$ p
- % H! P V" T# S# n# p. q( G
- /* 循环模式下的 ADC DMA 请求 */
/ S/ U2 P, {$ M% W/ @: V4 A/ N - ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);( f' m4 g( o+ N4 c; i% Z
- " s! y; d/ p" n2 z
- /* 使能 ADC_DMA */
7 S1 C2 _# h) S9 R* f - ADC_DMACmd(ADC1, ENABLE); + P. ^1 N, L* M, n! y D
- W5 v; E' J7 l# V" v4 h6 {- /* 使能 ADC1 */8 X5 i( N8 b# Z1 {' V
- ADC_Cmd(ADC1, ENABLE); ' D% `& E7 n8 ^
- & _5 b, T4 P5 O, g4 }* h2 s
- /* 等待 ADCEN 标志 */' [3 |% C. ^) v3 ~) N: ]
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
% }' H. l% f- G - j7 q1 R. |, Z/ m1 u E7 |9 ^
- /* ADC1 常规软件启动转换 */
% U4 ^6 D9 N6 V# n6 y. ^' B - ADC_StartOfConversion(ADC1);
2 W) g. ~ H% n( \: T7 ~ - . O( i# K3 B# b8 t/ |. f
- }
复制代码
; j, [; U) Q4 G/ @' {: f! O4 D
" C: c3 T; d8 l, R s |
* @brief Configures the ADC clock (ADCCLK).
* @note This function is obsolete.
* For proper ADC clock selection, refer to ADC_ClockModeConfig() in the ADC driver
* @param RCC_ADCCLK: defines the ADC clock source. This clock is derived
* from the HSI14 or APB clock (PCLK).9 C: f. y! |: t; c
* This parameter can be one of the following values:9 {4 H9 k7 a. p& ^: W% ^. C
* @arg RCC_ADCCLK_HSI14: ADC clock = HSI14 (14MHz)% C+ f" [3 Z* V* W0 j6 p" i2 h
* @arg RCC_ADCCLK_PCLK_Div2: ADC clock = PCLK/2# Y- t2 j1 h% B D
* @arg RCC_ADCCLK_PCLK_Div4: ADC clock = PCLK/4
* @retval None
*/: Z! q0 R) q. j& p2 ]% {1 h! o0 ^
void RCC_ADCCLKConfig(uint32_t RCC_ADCCLK)
此函数已废弃,正确ADC时钟选择,请用函数ADC_ClockModeConfig()
void ADC1_Mode_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
/*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/
RCC_ADCCLKConfig(RCC_HCLK_Div4);3 R z! [' c/ X/ g+ \. U( ~4 s
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
: I2 e) W T/ T$ H& ]' e
源码为红字,正确的应该为蓝字,当然影响不大,但起码会影响串口速率.% M5 {$ H! e, m' `, w
7 p0 B; f2 Z7 F
另采集数据全0,还没看那里的问题..
滤波显然会影响速度的吧?4 ~* h W+ r/ ~. e* y% G/ W
滤波之后还能有多少bit?$ ]) V) f$ n1 a3 m ?& S1 n, w
你现在是内基准还是外基准?
内部adc毕竟还是和外部adc有差距,一个单adc芯片都能顶上还几个stm32了 呵呵。
能帮到你就好
能给你提供有用信息就行
我用串口打印了,我用的是dma中断,在主循环检测dma中断是否完成
多谢版主支持