stm32F103c8系列的ADC ,本次选用PA2,PA38 g c' [: [2 n4 {1 H( X. d) O
- H M0 f# ?+ B- I" S1 w6 Q
3 P( }5 `/ ~8 x8 c3 U, O
! h% S. s& y1 D0 z, N* Y# S
# h& x' D z# b5 L6 x; ?6 u1 [* @
8 j% `' v: y+ P7 B! w, z DScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE* I3 z( U, R2 W: a* s
, i) S+ K* G! ~Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次$ h) Y* [4 O, p; @
5 h, }% z$ h8 i' C9 jDiscontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE2 ~8 r) z5 P/ W& a
; A" S! R2 `/ B& m6 z
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。9 y" @# g2 F( t5 o' B0 u
0 D2 E+ Y" Q! w. j; O
/ i' y* e( t0 c) Q) P$ q9 z" D/ g
4 i5 K, L& Z4 i( @" GEnable Regular Conversions (启用常规转换模式) 9 h" o3 l2 n% \: G
- t8 e3 S# H3 u
Number OF Conversion(转换通道数) 用了两个
, X! c1 R2 H+ w/ i% b5 \/ J5 { Z6 K: d6 i0 k" t9 e
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
: E# }6 W% S) W5 z: n5 m3 V9 a3 T @& A: r
Rank 配置两个通道为哪个,且设置转换时间 ; ~- P% P" M, A6 K {% M' Z* N, Q" w
1 p) `# ?; o' m' W
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB4 X0 z0 @* w0 r) q! I4 F7 { a, H
- /* USER CODE BEGIN 0 */ / j0 e) E& \: R9 E2 f( v
- #include<stdio.h>
' f5 ~1 ?" z- o K4 t1 j8 F+ o; d- e - int fputc(int ch, FILE *f). Y! E. A2 a) J
- {
! j+ h6 @% O9 w& p - HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);; h3 ]% w$ {' b! f/ ~
- return ch;8 a! `' i% I( u: K* j5 Z2 K
- }) L% S$ t0 T5 g B& i3 E
-
) E2 |/ L8 _4 z2 F7 A. s - /* USER CODE END 0 */
复制代码
$ x$ J% n! e" v7 pADC函数
; p# {0 N. g; B6 S- /* USER CODE BEGIN 1 */
" W e$ m0 C0 ~' y7 w: f0 Q: D" ~5 [ - uint8_t i;
- s# G1 \0 R( W1 s- c8 L6 M! X: X) k9 A7 n - uint16_t adcBuf[2];
7 B d6 e- C& \! S - /* USER CODE END 1 */
9 m) q) c7 }, P - 7 P. r1 \# A( r% O6 Y" u' [
- /* USER CODE BEGIN 2 */9 {9 L& E- ?4 L7 y; ^3 i
- HAL_ADCEx_Calibration_Start(&hadc1); //AD校准; z; k* G9 S; H/ {
- /* USER CODE END 2 */
复制代码
6 E. ?4 C; L3 t j) vHAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 : w; w& x# H1 J3 L' d# ~+ X
- while (1); t6 D( ?4 P7 t0 B1 t! t" z
- {
6 P: M7 _, a" }- W$ v9 a2 \, t - /* USER CODE END WHILE */ 6 h$ b" Z4 X9 e
- for(i=2;i<4;i++)0 x R+ _7 M% e" Q% N9 l
- {
2 ?8 x. b9 t1 l& t N9 p - HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA25 ~# E- P! e1 n* C. \
- HAL_ADC_PollForConversion(&hadc1,0xffff);
) R" @! J. Y; d2 X - adcBuf[i]=HAL_ADC_GetValue(&hadc1);5 z% K$ E0 [" x
- printf("PA%d: %.4fV\r\n",i,adcBuf[i]*3.3/4096);/ k# I( V4 m) g. @
- }
" F0 `9 V9 v1 l/ _- M' c" n9 e - HAL_ADC_Stop(&hadc1);6 c: E$ U' y! Q& M; H
- HAL_Delay(1000);8 L- u* p* i. C' ]/ N2 O' P9 U
- /* USER CODE BEGIN 3 */
. S! x+ o( A- J, J0 @8 k - }
复制代码
9 C0 \% F+ k: z+ F" d————————————————
1 M% \" y2 ]& ^# W" K1 y' e版权声明:@一二三四五; p' k0 B* _# m' G8 i
如有侵权请联系删除
" _0 ^* F& v, S* d |