你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32之ADC的使用

[复制链接]
STMCU小助手 发布时间:2021-11-13 00:01
什么是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
20210428153958922.png
" d- _" c) o  v$ k( D
20210428154026962.png
7 u% I- h. B7 F- I) P' q0 p
7 d  P! P4 ]. t! d- U5 f/ O' q1 G
20210428154327448.png

( 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
  1. void UR2_Send_Info()' ~' C9 ^/ O" y! T
  2. {
    1 o; e2 u6 q" l: l: t( d
  3.         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
  4.         HAL_UART_Transmit(&huart2,str_buff,sizeof(str_buff),10000);
    # j! R% X5 K: c
  5. }
复制代码

# {) x# [' y2 [/ ?# D2.再写上AD转换函数
- u: o, y: k9 l2 W. O
  1. void ADC_Get_Value()
    & l! j9 h2 Q) Q8 v/ b" K, \
  2. {
    8 }6 {3 x0 j& M7 X  M& W8 o$ B7 n6 d
  3.         HAL_ADC_Start(&hadc1);//开启ADC1
    4 V5 w2 o1 A1 b  Q2 |" D
  4.         LED_ON();//开灯
    " M3 u, L7 R) a' Z
  5.         if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//如果ADC收到数据. ?2 L" z. q( O9 A& c0 A  |
  6.         {
    0 [! l& m. |: X
  7.                 //则将数据获取到并赋给ADC_Value
    + f& e1 p: b( k
  8.                 ADC_Value = HAL_ADC_GetValue(&hadc1);( f" \  L) A& v1 X' t
  9.                 //将获取到的值转换为电压值
    ( Z* s7 E# ~" H
  10.                 ADC_Volt = ADC_Value * 330 / 4096;: ?2 o/ q% I  w, y; e
  11.         }. |" n5 A& ?$ N9 H
  12.         UR2_Send_Info();//通过串口发送出去
    0 |* |* {: h+ m' ]
  13.         LED_OFF();//关闭LED; o8 y3 l# ]' G6 L1 `7 Z
  14.         HAL_ADC_Stop(&hadc1);//停止ADC检测+ `) R2 o* i2 j) W' K. q) a4 O
  15. }
复制代码

' 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
  1. while (1)2 i; A$ ]  A7 h1 ]% L
  2.   {& H' N" Q7 @& \2 D
  3.                 ADC_Get_Value();7 W; C! N& o+ I" v+ M3 W$ y$ `
  4.                 HAL_Delay(2000);/ G6 K6 f% G% O+ V( |. L% Q1 M  p
  5.   }
复制代码
三.效果
( ?: 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
收藏 评论0 发布时间:2021-11-13 00:01

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版