什么是ADC0 L8 ~# B, |, y' I- `! R {2 n
ADC,即Analog-to-Digital Converter,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。可以将真实世界的模拟信号,例如温度、压力、声音或者图像等,转换成更容易储存、处理和发射的数字形式。/ b, D# ]2 T7 x* T
: ^8 X* m+ U& X3 ^一.利用stm32cubeMX勾选ADC1的IN1
8 L: C# M$ l! m0 l: ]5 V2 [( s, Z我这用的是stm32g070rb,只有ADC1。然后打开串口,通过串口来看采样数据。
9 S0 y* |# d! L& d6 q. R- ]6 y; Z- j5 T" `
' Y/ S8 h* J2 E5 z, s7 \: w* w
2 d$ u& c, c$ l w/ H9 h! @) l& ~2 U, h2 F0 B
3 z; w; z1 S* G3 T1 j2 u9 l
+ N k0 k P8 o8 Y& N$ `3 a3 l' [% E* S x- Y1 x2 V/ V5 D
二.编写相关代码
& u! c/ f" [# W1.先写一个串口发送函数,将采样值通过串口发送出去。2 m/ d) e7 R5 B0 y
这里并没有使用DMA模式,也没有添加串口重定向函数,直接使用sprintf()函数将采样值储存在uint8_t str_buff[64]中,然后用HAL_UART_Transmit()发送出去(HAL库自带的)。
# Q5 L& g% C* H O* p$ A; z; R% a
5 U+ I) o, Q z! ^+ Z- void UR2_Send_Info(): m4 o2 B! Z) l& O& |
- {5 V* R' a3 F/ b9 `! `; w
- sprintf((char *)str_buff,"采样值:%d, 电压值:%d.%d%dV\r\n",ADC_Value,ADC_Volt%100,(ADC_Volt%100)/10,ADC_Volt%10);% I8 B# ^; @5 z* ?* x6 ]: B
- HAL_UART_Transmit(&huart2,str_buff,sizeof(str_buff),10000);3 }2 C# w6 _$ c: R
- }
复制代码
9 j0 Y' F7 t2 A+ v+ n2 b5 Y2.再写上AD转换函数# G' M4 c" Q/ c: |2 P- ^1 C
- void ADC_Get_Value()
, m2 K3 E. M# C4 F8 P* w( p& Z# F - {
6 O* Y) b1 Z# c* o4 u - HAL_ADC_Start(&hadc1);//开启ADC13 ^, h8 w! f- E6 K5 e
- LED_ON();//开灯
( I2 r0 p2 B0 E) u6 v: ] - if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//如果ADC收到数据
: N$ H; D' V3 l$ y - {* b0 A' X4 h9 `+ P8 [6 g0 g) f
- //则将数据获取到并赋给ADC_Value
7 P1 ]& E! Z2 f% i - ADC_Value = HAL_ADC_GetValue(&hadc1);
0 r! _0 t- ]/ _+ O% B - //将获取到的值转换为电压值, p) }* _5 X. x4 o9 a+ t3 W1 E
- ADC_Volt = ADC_Value * 330 / 4096;
- h2 n3 S2 b3 k8 F/ k" ?0 m9 C' A" ~ - }
: [: k) H! p. h1 z0 U' ]3 I, o( @ - UR2_Send_Info();//通过串口发送出去- y$ z2 X! d; [& M+ u" L# a
- LED_OFF();//关闭LED- O& M8 D( X# r3 a
- HAL_ADC_Stop(&hadc1);//停止ADC检测0 f! H- u1 V4 D1 P( M. O1 e
- }
复制代码 / J; ^9 w+ {7 v# c
3.在主函数中编写代码
# F- K3 |0 e' {& k$ O只要在大循环中加入下列代码就好- O2 p5 t% O/ a' K% K
- while (1)
n4 O6 m) @( l( s k7 \* ^ - {
$ s5 P: {( f3 J - ADC_Get_Value();
. M! ?9 L. S8 R- H% @! q, U - HAL_Delay(2000);( {8 @5 ~& _" |* o+ q% n
- }
复制代码 三.效果4 V9 J4 ~. o$ ^1 M! ^. K
每测量一次电压值,LED灯就闪烁一次,并且将测量值和转换后的电压值通过串口发送出去。在使用测水位的传感器,测锂电池的电压等场景中使用。% g% v; e' a) V1 s7 F
2 ^" O. [0 s; C+ B- X! \9 X9 n
/ v: @" j1 H( d/ _- {+ u p
|