stm32F103c8系列的ADC ,本次选用PA2,PA3" I# E( k8 J! V1 N: U! r! b/ x+ @
4 Z* M- _4 _. [, p
, N% ^6 H' V# h/ g1 F* ^! G- d
! D( G2 \! n3 {( M
6 M1 V9 J4 C5 k
W7 k' A( r+ ^8 mScan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE/ C% c( l a. J
' i1 F; \8 q" u7 a0 O1 `1 A
Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次
5 _( Q& f W' [. B `- {2 E/ m% b2 a2 R0 P+ m) x0 j, p
Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE
3 t4 O" a3 X } u: ~8 I
( U: q& U6 l/ j( r1 b7 M2 ^* Vnumber of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。
' {' L' h' `- h0 ~' ]2 @/ X8 s. U2 |6 e7 j: H4 k
5 w! h8 {' k) n! r4 Q: \3 u, {+ j& N' V; k% J/ _
Enable Regular Conversions (启用常规转换模式)
0 |8 X7 w( s u( i0 U0 e4 f5 D& L; q7 ]1 Y* S; |
Number OF Conversion(转换通道数) 用了两个
: R. e5 N/ n3 S/ z8 n0 A7 P; J4 {' i( L
Extenal Trigger Conversion Source (外部触发转换源) 选软件触发
7 F, n, Z( e0 m* L8 K" q; N) B9 x" B" C
Rank 配置两个通道为哪个,且设置转换时间 9 x4 r0 N: ?1 Z5 J6 S3 S! c6 w
/ {2 w# |; P# B- _用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB- x3 [5 ^3 t" v9 [6 o' b
- /* USER CODE BEGIN 0 */ 8 H2 m5 T+ @/ m
- #include<stdio.h>
, O' b* E+ i8 I$ c! H) u - int fputc(int ch, FILE *f)" v, F- v# w H4 z
- {+ e( b( |" b* @( {
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
9 }- ]* W# @+ W" M+ c2 k - return ch;3 p0 }. ~& o3 b j { {/ x
- }
: S! @: w' w3 S( M - & `& m8 v% Y8 {% J. T# _
- /* USER CODE END 0 */
复制代码 & C7 e, P& Q @- Z
ADC函数
8 a, s. U' a* k% B% ?1 Y1 Z, r- /* USER CODE BEGIN 1 */
. T7 R0 Q+ P/ G: p; A - uint8_t i;* f4 V6 [* ?0 X9 J1 k0 g9 e* P
- uint16_t adcBuf[2];
4 @( W+ _0 {" C, d0 H+ U - /* USER CODE END 1 */0 T# Y) [( }: I' R
-
0 d# x) _& ^1 b1 P - /* USER CODE BEGIN 2 */
, M5 c( _3 F. I1 u0 E0 J a( @% \ - HAL_ADCEx_Calibration_Start(&hadc1); //AD校准3 U3 n; H/ T2 ]0 r
- /* USER CODE END 2 */
复制代码 $ R( T6 N, F7 \! L$ \5 M' ~
HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 2 Z% o1 J4 U$ O$ @9 z* r
- while (1)$ a7 f9 E& J! q' C4 q# a' J
- {
/ C7 G3 R( S+ o; v$ t! Q# o2 ^ - /* USER CODE END WHILE */ , m, i: p* Z7 v, A4 U) K+ ^
- for(i=2;i<4;i++). X/ o* H P8 H# _5 L
- {/ A/ c; B0 | ]
- HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA2
# \) H" q& L" i c* ^' j; H - HAL_ADC_PollForConversion(&hadc1,0xffff);
8 I) ]/ d) \, V8 a - adcBuf[i]=HAL_ADC_GetValue(&hadc1);6 @6 o* c1 j* X/ `
- printf("PA%d: %.4fV\r\n",i,adcBuf[i]*3.3/4096);
/ ] ?& z8 O5 ^) ]" b% N& ~" T - }
1 `- W* ?% k+ t& S. r1 ? - HAL_ADC_Stop(&hadc1); H* a$ \& j& ~9 t( M3 O& E! \( J
- HAL_Delay(1000);7 k! k. ?3 K5 `' }8 l
- /* USER CODE BEGIN 3 */6 g4 h) K8 u( c+ F% q
- }
复制代码 % h. t( s7 ]- K3 T
————————————————; H! {: {; a+ w
版权声明:@一二三四五4 H u5 \' T. K! u9 |( I
如有侵权请联系删除
) _$ r* _' D3 p1 a% n" j0 l |