使用HAL_ADC_PollForConversion可以进行一次转换,但是会根据设置的EOC类型决定是完成单通道转换还是Rank序列转换。7 g2 K1 b% }7 L+ y- {
$ c: B. S) p' l6 k' l3 X- e主函数逻辑代码如下:* F. S, ]7 H# F% U* h
- #include "sys.h"
8 F" D& n9 T. i; g0 l - #include "delay.h", L, d4 \. o8 v0 s2 \
- #include "usart.h". K/ o8 ?* Y% M0 A; m6 ^
- #include "adc.h", [7 m6 b. {/ `4 `
6 i5 J f5 h/ S0 d# V( R- int main(void)# d* v/ B8 @7 Y0 p, u; v
- {) K# Q. q, s5 ^ v' t
- u16 adcx;
: P) F! D# U/ E7 S& u0 V# N& m2 U - //Cache_Enable(); //打开L1-Cache
6 O! q6 Y! W3 x) Z& K - HAL_Init(); //初始化HAL库
, i0 f# G3 t, z7 T8 o, L - Stm32_Clock_Init(200, 2, 2, 2); //设置时钟,400Mhz) T8 l" _& O0 T# F" M4 ]
- delay_init(400); //延时初始化
2 H5 n1 p% }4 A! v+ Q; P - uart_init(115200); //串口初始化
- m4 O$ e$ {' y4 A& U, U - printf("hello\r\n");
0 ]* h6 j' a4 {' p$ Y3 H- H! S3 G - MX_ADC1_Init();
; d, y0 R- z8 q" \( n" { - while (1)
; ]1 D" U- e9 ^9 m1 O4 x/ Z - {+ p7 k/ Q% M# p7 p" u6 R
- HAL_ADC_Start(&hadc1); //开启ADC
0 ]) h- S- O# T5 H/ O" M% Z; c - HAL_ADC_PollForConversion(&hadc1, 10); //轮询转换, c$ ~% S8 \+ {8 }' J: h
- for (int i = 0; i < 8; i++)6 \0 Q5 X ~- y: [7 }3 D* H1 ~
- {, F9 [; |6 v, J
- printf("%d\t", (u16)HAL_ADC_GetValue(&hadc1)); //返回最近一次ADC1规则组的转换结果* N, E) a: E3 f) W9 J% ]
- }
5 W( {% L3 |$ r. A' m - printf("\r\n");
: s3 ^$ w, E: f - delay_ms(500);
/ ~3 f3 y. |; `! r4 o6 J - }3 R/ T) _5 q3 {" ^ n' i: B0 Z1 A
- }6 |, G& a! Y" m6 k
- & K" D9 ]6 Q8 Y" A4 i
- void Error_Handler(void)
3 X1 n2 F8 T6 V9 h - {
* t- a. q5 z% }. K - /* USER CODE BEGIN Error_Handler_Debug */
/ b+ f$ C! U/ @" u# ^ - /* User can add his own implementation to report the HAL error return state */* E/ Z( _' d3 w- N# r3 d
- ) R" }3 g9 s5 o' Z2 j: L, J b
- /* USER CODE END Error_Handler_Debug */
! F; H S; o, n( D$ ~. K7 B" F( y - }5 H& }- r: N" K4 f( i# i ^
复制代码
7 ^3 M$ n8 |7 t3 |( K实验效果如下,中途将接入到3.3V的PA3切换到了PA2~
* r9 G W% P6 g1 G1 g* a& A
8 a" ]6 Y" D6 r5 Z5 e. v! q4 C: A: s
+ O2 c$ |% ^: ?
. x2 p2 u1 c" @& ]————————————————3 }0 C; [- u" T8 B. g d9 C: v! ~
版权声明:小盼你最萌哒
7 n1 w: ~# X+ g }, n! ?1 |# ~4 i3 ]- b- |1 T
|