RT-Thread STM32F407 ADC

ADC (Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。与之相对应的 DAC(Digital-to-Analog Converter),它是 ADC 模数转换的逆向过程。ADC 最早用于对无线信号向数字信号转换。如电视信号,长短播电台发射接收等。

  • 第一步,首先在 RT-Thread Settings中进行配置
  • 第二步,退出RT-Thread Settings,进入board.h,定义ADC1
  • 第三步,进入STM32CubeMX进行配置
  • 第四步,回到main.c,找到adc1,并使能adc
c 复制代码
rt_adc_device_t adc_dev = (rt_adc_device_t)rt_device_find("adc1");  /* 查找设备 */
rt_adc_enable(adc_dev, 1);    /* 使能adc1 的通道1 */
  • 第五步,读取采样值
c 复制代码
rt_uint32_t value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
  • 第六步,将模拟信号转换为数字信号(12位adc 参考电压为3.3v)
c 复制代码
rt_uint32_t  vol = value * 3.3/ 4096;

综上,main.c

c 复制代码
#include <rtthread.h>
#include <rtdbg.h>
#include <rtdevice.h>
#include <board.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG

#define ADC_DEV_NAME        "adc1"      /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     1           /* ADC 通道 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

int main(void)
{
    rt_adc_device_t adc_dev;
    rt_uint32_t value, vol;

    adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);  /* 查找设备 */
    if (adc_dev == RT_NULL)
    {
        rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
        return RT_ERROR;
    }
    else {
        rt_kprintf("find %s success!\n",ADC_DEV_NAME);
    }

    rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);/* 使能设备 */

    while (1)
    {
        /* 读取采样值 */
        value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
        rt_kprintf("the value is :%d \n", value);

        /* 转换为对应电压值 */
        vol = value * REFER_VOLTAGE / CONVERT_BITS;
        rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
        rt_thread_mdelay(500);
    }
    return RT_EOK;
}
相关推荐
进击的小头13 小时前
第18篇:嵌入式电机控制专用外设:正交编码脉冲模块原理与闭环控制应用
arm开发·单片机·嵌入式硬件
feifeigo12314 小时前
STM32 LCD彩色液晶屏显示汉字、英文、数字
stm32·单片机·嵌入式硬件
实在太懒于是不想取名15 小时前
STM32N6的开发日记(4):快速上手LTDC显示图片-让屏幕刷新丝滑流畅
stm32·单片机·嵌入式硬件
实在太懒于是不想取名15 小时前
STM32N6的开发日记(1):上手难度拉满的N6有哪些不同?
stm32·单片机·嵌入式硬件
LingLong_roar15 小时前
keil未指定 PY32F0 具体芯片型号导致编译报错及无法烧录问题
单片机·嵌入式硬件
见行AGV机器人17 小时前
AGV中工控机有什么用?
单片机·嵌入式硬件·非标定制agv·agv控制器
KWTXX17 小时前
TouchGFX 4.21.2 Designer与keil的联合使用【图形化】
单片机·嵌入式硬件
sweetone18 小时前
迷你电吹风速修
经验分享·嵌入式硬件
d111111111d18 小时前
STM32-UART抽象层封装
笔记·stm32·单片机·嵌入式硬件·学习
沃虎Chinty-0318 小时前
工程师笔记:三大磁性元器件(共模电感/一体成型电感/CHIP LAN)选型要点与实战避坑
单片机·嵌入式硬件