什么是ADC
1 D* D/ K8 N+ _0 g. @) VADC,即Analog-to-Digital Converter,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。可以将真实世界的模拟信号,例如温度、压力、声音或者图像等,转换成更容易储存、处理和发射的数字形式。9 F( [; Z1 S0 ^# u) J
1 K; i7 W, u2 v. H
一.利用stm32cubeMX勾选ADC1的IN13 Z. V( { X" S4 i# u& {# R
我这用的是stm32g070rb,只有ADC1。然后打开串口,通过串口来看采样数据。
. F z% A7 r9 O4 s# ^. U$ W
& C' `2 {, e- J4 u0 `; K8 M: o, @: |; {6 z! P. E" X
) i) s0 [5 C! Q% c
k( h) g+ {/ I5 K3 y4 y6 I6 q7 [! E9 k6 L3 n b% E, {
3 P; ?' C7 d' A4 G* M* ~, a
- F$ c1 `; o6 a: d8 ~" d- J S二.编写相关代码9 x+ E7 V2 Z, H! @4 y4 I2 B
1.先写一个串口发送函数,将采样值通过串口发送出去。# p; c7 J6 [. E( Y
这里并没有使用DMA模式,也没有添加串口重定向函数,直接使用sprintf()函数将采样值储存在uint8_t str_buff[64]中,然后用HAL_UART_Transmit()发送出去(HAL库自带的)。* u. d. G/ l, z" j8 e# X7 u2 M+ H1 G
; ?( j$ A6 H2 e3 f. q- void UR2_Send_Info()
' O# h' y- L ~' h0 T" e+ B - {1 E( q2 b$ T( l4 }$ l4 P/ C w1 Q# j
- sprintf((char *)str_buff,"采样值:%d, 电压值:%d.%d%dV\r\n",ADC_Value,ADC_Volt%100,(ADC_Volt%100)/10,ADC_Volt%10);3 ]4 j7 K7 ]( z- ?: u5 L, m; B
- HAL_UART_Transmit(&huart2,str_buff,sizeof(str_buff),10000);" G; l; O% ]. V2 N( V
- }
复制代码 $ y) n* @- |& m4 n7 C6 B$ R
2.再写上AD转换函数7 c# Z; T3 s4 R
- void ADC_Get_Value()! n4 Z( N3 ?7 v/ K3 t8 _: |5 x
- {
9 Q; _8 {# A' u9 ] - HAL_ADC_Start(&hadc1);//开启ADC1& @1 {5 c- |5 a" @- b% a
- LED_ON();//开灯
) |+ x9 m8 U; p% B' h, u% ~. e - if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//如果ADC收到数据5 U& g5 k& M: P, [' I) H
- {
, g" X1 S9 R: c4 U7 d - //则将数据获取到并赋给ADC_Value
; s* Z( H/ i9 F7 { - ADC_Value = HAL_ADC_GetValue(&hadc1);5 w& u# J9 Q r$ V* H
- //将获取到的值转换为电压值2 J# i$ k- l5 y+ [: r
- ADC_Volt = ADC_Value * 330 / 4096;
' @3 I6 t% X2 A! O% P. U! d - } H# z0 o- L& r' O
- UR2_Send_Info();//通过串口发送出去
7 h; c1 l' r' i3 [ J - LED_OFF();//关闭LED
; Y) L- }' |' _7 t0 q8 ^% D' ^ - HAL_ADC_Stop(&hadc1);//停止ADC检测/ }4 f* C6 b- N, ^7 z
- }
复制代码 ) c+ U2 H* Q9 p
3.在主函数中编写代码
3 Q7 T" ^2 ?$ o1 R7 }- R只要在大循环中加入下列代码就好6 ?3 I9 `; Q# t( c1 b, g
- while (1). \% R% R1 G: I# |$ P0 J" z
- {7 I8 K0 e' B; k3 |, m6 n$ s
- ADC_Get_Value();" C( u- E, g7 t7 }+ Y6 A
- HAL_Delay(2000);: l- d4 P) _1 [8 Z6 T. S
- }
复制代码 三.效果
- Z" f$ b; l* Z& S9 G( W& r+ W每测量一次电压值,LED灯就闪烁一次,并且将测量值和转换后的电压值通过串口发送出去。在使用测水位的传感器,测锂电池的电压等场景中使用。( \/ ~1 p7 d2 x2 W
/ c6 W1 k* p: I) K! `( W9 E2 E* i
5 _4 x' v1 v3 W/ L3 g
|