RT-Thread+STM32L475VET6——ADC采集电压


文章目录

  • 前言
  • 一、板载资源
  • 二、具体步骤
    • 1.打开CubeMX进行配置
      • [1.1 使用外部高速时钟,并修改时钟树](#1.1 使用外部高速时钟,并修改时钟树)
      • [1.2 打开ADC1的通道3,并配置为连续采集模式(ADC根据自己需求调整)](#1.2 打开ADC1的通道3,并配置为连续采集模式(ADC根据自己需求调整))
      • [1.3 打开串口](#1.3 打开串口)
      • [1.4 生成工程](#1.4 生成工程)
    • [2. 配置ADC](#2. 配置ADC)
      • [2.1 打开ADC驱动](#2.1 打开ADC驱动)
      • [2.2 声明ADC](#2.2 声明ADC)
      • [2.3 剪切stm32l4xx_hal_msp.c中的HAL_ADC_MspInit函数至board.c](#2.3 剪切stm32l4xx_hal_msp.c中的HAL_ADC_MspInit函数至board.c)
      • [2.4 使能ADC(一般默认打开)](#2.4 使能ADC(一般默认打开))
    • [3. 打开libc](#3. 打开libc)
    • 4.编译,烧录

前言

本文采用开发板为STM32L475VET6(潘多拉开发板),使用RT_Thread Studio基于芯片开发模式,完成ADC实验,实现对板载3.3v和GND电压采集


一、板载资源

使用引出I/O口PC2,对应ADC1的通道一

二、具体步骤

1.打开CubeMX进行配置

1.1 使用外部高速时钟,并修改时钟树

1.2 打开ADC1的通道3,并配置为连续采集模式(ADC根据自己需求调整)

1.3 打开串口

1.4 生成工程

2. 配置ADC

官方配置步骤

2.1 打开ADC驱动

在RT-Thread Setting的组件栏中

2.2 声明ADC

2.3 剪切stm32l4xx_hal_msp.c中的HAL_ADC_MspInit函数至board.c

2.4 使能ADC(一般默认打开)

3. 打开libc

4.编译,烧录

将PC2连接至开发板3.3V的I/O口

cpp 复制代码
#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

/*
 * 程序清单: ADC 设备使用例程
 * 例程导出了 adc_sample 命令到控制终端
 * 命令调用格式:adc_sample
 * 程序功能:通过 ADC 设备采样电压值并转换为数值。
 *           示例代码参考电压为3.3V,转换位数为12位。
*/

#include <rtthread.h>
#include <rtdevice.h>

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

static int adc_vol_sample(int argc, char *argv[])
{
    rt_adc_device_t adc_dev;
    rt_uint32_t value, vol;
    rt_err_t ret = RT_EOK;

    /* 查找设备 */
    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;
    }

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

    /* 读取采样值 */
    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);

    /* 关闭通道 */
    ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);

    return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);

int main(void)
{

    return RT_EOK;
}

相关推荐
Freak嵌入式3 小时前
MCU 低功耗模式解析:时钟门控、电源门控、深度休眠
人工智能·python·单片机·嵌入式硬件·开源·依赖倒置原则·micropython
国科安芯3 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
躺不平的理查德3 小时前
STM32时钟树(Clock Tree)
stm32·单片机·嵌入式硬件
Javenwww5 小时前
STM32中DMA的使用——串口数据的DMA传输
单片机
qq_401700415 小时前
经典的电压基准源电路
单片机·嵌入式硬件
茯苓gao6 小时前
嵌入式开发笔记:电机参数辨识与自学习完全指南——从电气参数到机械特性的深度解析
笔记·嵌入式硬件·学习
西安景驰电子6 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
派勤电子7 小时前
5G物联网网关工控主板选型指南(超小尺寸工业级嵌入式硬件解决方案)
嵌入式硬件·工业网关·工控主板·工控主板选型·嵌入式工控主板·5g物联网网关·超小尺寸工控主板
&Hello Code8 小时前
2.一套可落地的 STM32 六层架构:基础工程框架搭建
stm32·嵌入式硬件·架构
sramdram8 小时前
高速低功耗stt-mram工业级存储方案
嵌入式硬件·mram·stt-mram·低功耗stt-mram