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

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

[复制链接]
STMCU小助手 发布时间:2021-11-13 00:01
什么是ADC
ADC,即Analog-to-Digital Converter,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。可以将真实世界的模拟信号,例如温度、压力、声音或者图像等,转换成更容易储存、处理和发射的数字形式。

一.利用stm32cubeMX勾选ADC1的IN1
我这用的是stm32g070rb,只有ADC1。然后打开串口,通过串口来看采样数据。

20210428153958922.png

20210428154026962.png


20210428154327448.png



二.编写相关代码
1.先写一个串口发送函数,将采样值通过串口发送出去。
这里并没有使用DMA模式,也没有添加串口重定向函数,直接使用sprintf()函数将采样值储存在uint8_t str_buff[64]中,然后用HAL_UART_Transmit()发送出去(HAL库自带的)。

  1. void UR2_Send_Info()
  2. {
  3.         sprintf((char *)str_buff,"采样值:%d, 电压值:%d.%d%dV\r\n",ADC_Value,ADC_Volt%100,(ADC_Volt%100)/10,ADC_Volt%10);
  4.         HAL_UART_Transmit(&huart2,str_buff,sizeof(str_buff),10000);
  5. }
复制代码

2.再写上AD转换函数
  1. void ADC_Get_Value()
  2. {
  3.         HAL_ADC_Start(&hadc1);//开启ADC1
  4.         LED_ON();//开灯
  5.         if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)//如果ADC收到数据
  6.         {
  7.                 //则将数据获取到并赋给ADC_Value
  8.                 ADC_Value = HAL_ADC_GetValue(&hadc1);
  9.                 //将获取到的值转换为电压值
  10.                 ADC_Volt = ADC_Value * 330 / 4096;
  11.         }
  12.         UR2_Send_Info();//通过串口发送出去
  13.         LED_OFF();//关闭LED
  14.         HAL_ADC_Stop(&hadc1);//停止ADC检测
  15. }
复制代码

3.在主函数中编写代码
只要在大循环中加入下列代码就好
  1. while (1)
  2.   {
  3.                 ADC_Get_Value();
  4.                 HAL_Delay(2000);
  5.   }
复制代码
三.效果
每测量一次电压值,LED灯就闪烁一次,并且将测量值和转换后的电压值通过串口发送出去。在使用测水位的传感器,测锂电池的电压等场景中使用。


收藏 评论0 发布时间:2021-11-13 00:01

举报

0个回答

所属标签

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