什么是ADC. q8 c/ k6 S) n- z/ x5 D, }0 T
ADC,即Analog-to-Digital Converter,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。可以将真实世界的模拟信号,例如温度、压力、声音或者图像等,转换成更容易储存、处理和发射的数字形式。
( _- @8 v# X6 z: ^8 N7 U9 {/ B! I
一.利用stm32cubeMX勾选ADC1的IN1
" f/ g! {% q4 J* `- @; ^我这用的是stm32g070rb,只有ADC1。然后打开串口,通过串口来看采样数据。
7 Y% w3 A0 U7 _% R! {3 z0 j; _( O4 i2 G
" d- _" c) o v$ k( D
7 u% I- h. B7 F- I) P' q0 p
7 d P! P4 ]. t! d- U5 f/ O' q1 G
( z' p7 U0 `$ `6 Y( T$ e; o: ~
6 M; R$ e- N, U# z! k" M
二.编写相关代码
0 j% f6 {* o; q1.先写一个串口发送函数,将采样值通过串口发送出去。
- N. c8 ] l* q$ X( D# Z+ I这里并没有使用DMA模式,也没有添加串口重定向函数,直接使用sprintf()函数将采样值储存在uint8_t str_buff[64]中,然后用HAL_UART_Transmit()发送出去(HAL库自带的)。
, q8 p$ N$ c3 |- f7 ~: E3 Q( Y' i3 t* C
- void UR2_Send_Info()' ~' C9 ^/ O" y! T
- {
1 o; e2 u6 q" l: l: t( d - sprintf((char *)str_buff,"采样值:%d, 电压值:%d.%d%dV\r\n",ADC_Value,ADC_Volt%100,(ADC_Volt%100)/10,ADC_Volt%10);
2 y( C" S% |. O. v! e O3 O7 M - HAL_UART_Transmit(&huart2,str_buff,sizeof(str_buff),10000);
# j! R% X5 K: c - }
复制代码
# {) x# [' y2 [/ ?# D2.再写上AD转换函数
- u: o, y: k9 l2 W. O- void ADC_Get_Value()
& l! j9 h2 Q) Q8 v/ b" K, \ - {
8 }6 {3 x0 j& M7 X M& W8 o$ B7 n6 d - HAL_ADC_Start(&hadc1);//开启ADC1
4 V5 w2 o1 A1 b Q2 |" D - LED_ON();//开灯
" M3 u, L7 R) a' Z - if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//如果ADC收到数据. ?2 L" z. q( O9 A& c0 A |
- {
0 [! l& m. |: X - //则将数据获取到并赋给ADC_Value
+ f& e1 p: b( k - ADC_Value = HAL_ADC_GetValue(&hadc1);( f" \ L) A& v1 X' t
- //将获取到的值转换为电压值
( Z* s7 E# ~" H - ADC_Volt = ADC_Value * 330 / 4096;: ?2 o/ q% I w, y; e
- }. |" n5 A& ?$ N9 H
- UR2_Send_Info();//通过串口发送出去
0 |* |* {: h+ m' ] - LED_OFF();//关闭LED; o8 y3 l# ]' G6 L1 `7 Z
- HAL_ADC_Stop(&hadc1);//停止ADC检测+ `) R2 o* i2 j) W' K. q) a4 O
- }
复制代码
' s6 T7 k$ z& q6 \) P2 @3.在主函数中编写代码7 c5 u( X& @+ E6 o" v0 m# W
只要在大循环中加入下列代码就好6 R0 V* u% o' H! k, R- S
- while (1)2 i; A$ ] A7 h1 ]% L
- {& H' N" Q7 @& \2 D
- ADC_Get_Value();7 W; C! N& o+ I" v+ M3 W$ y$ `
- HAL_Delay(2000);/ G6 K6 f% G% O+ V( |. L% Q1 M p
- }
复制代码 三.效果
( ?: P. G" @1 H5 y& o0 I+ _每测量一次电压值,LED灯就闪烁一次,并且将测量值和转换后的电压值通过串口发送出去。在使用测水位的传感器,测锂电池的电压等场景中使用。
7 R$ u* H) y4 d8 W/ l2 S; |6 V, n' w+ I
\( k. u6 Z. _* Y! W2 k2 g |