stm32F103c8系列的ADC ,本次选用PA2,PA3
' x; f$ j7 C+ |6 t1 I* J( C3 R3 o w( a* Y
$ [ @0 t7 v. d/ u* ?! c# n! g
h, G* A2 _% n6 Q
2 v' T H# \8 k
& o4 B$ O2 X: K5 a' D MScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE
( c4 H5 b3 ?! C2 [% I( u1 l: E, s
6 p4 _! \) r$ z3 I& Q, sContinuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
% F J& K* {$ s' t( i1 {$ b- Y& C# E8 H9 | ^; j8 @3 c/ o
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
; T+ S$ Z! l2 ~0 v' @6 L! s7 f- }1 Q( n! q6 v
number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
6 c1 b: z+ X, o2 }+ F/ M+ e
$ S0 j7 q5 w {- @9 I' p
3 l `4 O+ _5 u: n
* t) a' Z! ]7 a9 ^1 L: c
Enable Regular Conversions (启用常规转换模式) ) L. g# M3 ^# ?9 @! X
& O2 n5 Z% a& }5 d6 }Number OF Conversion(转换通道数) 用了两个2 l3 p/ T7 u5 A+ Y1 h0 T6 ]! {2 O
3 R6 ^# k" @6 I* n2 ]7 uExtenal Trigger Conversion Source (外部触发转换源) 选软件触发
1 l* H6 c6 t/ ] d M5 W6 R1 G) s C/ `+ z9 N' s6 G
Rank 配置两个通道为哪个,且设置转换时间
9 D: B: B" L# A* }: z1 u# b( i. J) b
用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB# ]$ Z- G! ]1 M# l/ r c2 H
- /* USER CODE BEGIN 0 */ v- x6 O& C1 o+ i! y
- #include<stdio.h>8 {1 G4 D& K4 K9 j
- int fputc(int ch, FILE *f)
% T& Y+ D6 F5 C |$ D' Z' H% h - {6 k8 f f7 h [& k/ M# M
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
$ n6 T9 A* D1 H! \# j - return ch;
% z) O6 \1 Q- X! G - }3 V% c* f( R W* h" ?
-
* v3 O" C2 v& N( F9 `0 I% o7 c - /* USER CODE END 0 */
复制代码 + U* b. q- \, `3 D x
ADC函数: {5 K: N5 L/ K+ [+ c8 l6 u9 f
- /* USER CODE BEGIN 1 */
) h. d+ ]; ~4 |' @2 A% a; a - uint8_t i;
7 I4 |/ I* a, s# X - uint16_t adcBuf[2];. l' ?- v" x* B1 Z2 J
- /* USER CODE END 1 */
) O; m! a/ Q a c - 1 I/ d% J2 v9 C. s4 h
- /* USER CODE BEGIN 2 */
# N- d. k6 l4 o5 ^ - HAL_ADCEx_Calibration_Start(&hadc1); //AD校准8 R* r7 U) y8 j' n! [
- /* USER CODE END 2 */
复制代码 1 J8 i0 T, y+ w# r2 j
HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 + F" x& u" x K8 k" k
- while (1)& Q9 {# L% ~1 S( D
- {6 d+ S" m# L* P3 t1 C
- /* USER CODE END WHILE */ 1 ~) T+ E) N/ S& \5 m
- for(i=2;i<4;i++)
& r4 L. Z# @, g: X' Y7 R* ^ - {
5 K2 h+ N9 p0 {1 L - HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA20 w- q% ?7 `, d# C; i+ v
- HAL_ADC_PollForConversion(&hadc1,0xffff);
: i) ~5 V. k/ ` - adcBuf[i]=HAL_ADC_GetValue(&hadc1);' z, F) Z6 _7 K
- printf("PA%d: %.4fV\r\n",i,adcBuf[i]*3.3/4096);+ a8 Z- C% v, `5 ?" r! N! Y( b
- }: H c* y8 i( J, Z4 E- y9 E) Z, v6 U8 x
- HAL_ADC_Stop(&hadc1);" r, Y, L+ c p) A* `- y3 g& m
- HAL_Delay(1000);
$ Q6 z! T0 A ]: M - /* USER CODE BEGIN 3 */$ @$ i' s* E$ T# \& x+ M9 T
- }
复制代码
+ n. e" z( ?- i* c' w0 X$ R% o! e————————————————
% N% _. O0 y# a7 h" E7 k* p( T5 h6 J2 N版权声明:@一二三四五
. f$ X% y6 X% P1 O& P如有侵权请联系删除
: m2 A( S* Q+ Q% @" `& U |