stm32F103c8系列的ADC ,本次选用PA2,PA3) D) T2 w; [3 ?5 F7 p4 ]( k
- Y& T9 K. d4 @2 F! i4 ?
( {4 u9 B& z# ?! o6 l% K) \+ v( G& X) Y! a/ A
! |0 y( d: J4 {- U w/ z" k* Z) L( @0 Y) Y# `
Scan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE: p3 a) [' a- H' j- x/ d- m
2 h# _2 Z0 R7 Q0 V' O' }/ y8 ^0 c
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
4 |6 ?( C7 s# t0 J$ E
2 D0 B$ C' `9 X; M+ fDiscontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
* K7 f% n: s2 L4 x# v) B7 O
8 m" p5 P1 J: D- X3 b/ _5 Anumber of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。: u6 C! K r4 G6 K" a. J+ w. t/ V
" v( x/ z% G- T. Z
2 I' M9 r) r5 C$ F0 ^( N* w
$ h! x! v) j, w# B, n2 uEnable Regular Conversions (启用常规转换模式)
, w& Z* N8 A2 c6 o! h5 O; R5 S5 B: l/ d! K0 w- |) W g
Number OF Conversion(转换通道数) 用了两个
6 F) W+ ]7 N& e* r- X, J _( b$ k9 N: D, S% J" ~% ~
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发 " K4 Z* u# D# V# J4 [: h
* `7 r0 e4 r q1 U s0 \4 N7 [
Rank 配置两个通道为哪个,且设置转换时间
/ C7 v# F5 h/ l4 N. ]8 v9 m- r8 \! `) E: S
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB
* u% e- E4 b% w7 a3 P+ L% S- /* USER CODE BEGIN 0 */ 6 b' f) w b! k; \: q9 H
- #include<stdio.h>2 a+ j, s& p; l5 ?& t, i
- int fputc(int ch, FILE *f)% Y& w0 d3 ?+ }& C& l* m
- { q4 a# t8 z' n! z% d/ ~
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
3 c1 _( Q5 L% | - return ch;0 p0 A3 A! n5 u/ }3 N6 z& }, W
- }+ ]0 V0 P$ Z( e( Q* s5 e8 b
-
5 u# B% t6 \1 { - /* USER CODE END 0 */
复制代码 ! ?7 G- t# s) C- y( ^" m; h
ADC函数
3 ]" }" f7 a5 l% s; ?' Y& h- /* USER CODE BEGIN 1 */
" W2 H3 p) E4 b6 Q - uint8_t i;9 `5 Y8 w0 O" w0 z. ?4 V* s
- uint16_t adcBuf[2];5 r5 P$ Z4 G/ i) ]$ X' X) N; ^
- /* USER CODE END 1 */
# b; Y0 t2 Z- N3 f% G- ]8 y* ~3 P P7 B - " y9 p- I0 e7 u* d
- /* USER CODE BEGIN 2 */! K- \$ \- d( b9 y& [) ~: j4 i
- HAL_ADCEx_Calibration_Start(&hadc1); //AD校准
; {+ I# P3 a o! ^- [8 n- l) l - /* USER CODE END 2 */
复制代码
$ z# V5 C. M; D) `# m$ k2 DHAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2
; ^ n% H9 h m/ |/ Y2 M: c, B- while (1); Y' W$ s+ Y3 d: ~# l
- {
; Y+ R- A; x' w - /* USER CODE END WHILE */ $ y% {% }3 O6 y; U* |
- for(i=2;i<4;i++)
- v$ K) Z0 B% ?0 G$ F( \2 N) f - {
0 Z6 n# Q8 o5 }' x% E/ a - HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA28 |& x( \0 U* W& w
- HAL_ADC_PollForConversion(&hadc1,0xffff);
j+ y5 h2 ^# i7 W8 B7 I5 ` - adcBuf[i]=HAL_ADC_GetValue(&hadc1);
% b! i: B( i1 \, E - printf("PA%d: %.4fV\r\n",i,adcBuf[i]*3.3/4096);
: M( k1 {) M6 M1 U& [7 ?7 g - }1 d. K+ }7 t6 Q" q8 M7 }
- HAL_ADC_Stop(&hadc1);5 N' C8 D f- ~
- HAL_Delay(1000);$ L# d r- Q3 w$ m
- /* USER CODE BEGIN 3 */, Z# o4 t8 b. l7 v9 t
- }
复制代码 # e, h+ _* e- X8 ? Q
————————————————
* }: s* W5 [1 y& B版权声明:@一二三四五' W7 ?: a p$ l4 \/ N% H
如有侵权请联系删除/ U5 p0 }5 _: d$ f
|