RT-Thread(RTT)ADC设备使用教程

前言

达到的目标:
1、使能ADC1通道0
2、使用该通道口采集开发板的电源电压和GND
3、计算模拟电压值并打印信息


1、新建工程

在这里插入图片描述

2、打开board.h头文件

在这里插入图片描述

3、在board.h中打开ADC1的注释

在这里插入图片描述

4、打开RT-Thread Settings

在这里插入图片描述

5、点击右侧小箭头

在这里插入图片描述

6、打开ADC设备驱动程序

在这里插入图片描述

7、打开CubeMX Settings

在这里插入图片描述

8、打开ADC通道0

在这里插入图片描述

9、顺便配下时钟

在这里插入图片描述

10、自动计算时钟

在这里插入图片描述

11、串口1也打开一下,因为新建工程的时候默认使用了串口1

在这里插入图片描述

12、生成代码

在这里插入图片描述

13、打开hal_msp.c文件

在这里插入图片描述

14、将ADC初始化函数复制

在这里插入图片描述

15、粘贴到board.c文件的末尾

在这里插入图片描述

16、使能ADC模块

在这里插入图片描述

17、在主函数中写入如下代码,可以直接复制

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-11-11     RT-Thread    first version
 */

#include <rtthread.h>

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

#define ADC_DEV_NAME        "adc1"  /* ADC 设备名称 */
rt_adc_device_t adc_dev;            /* ADC 设备句柄 */
#define ADC_DEV_CHANNEL      0       /* ADC 通道 */

#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

rt_thread_t th1;

void read_adc1_entry(void *parameter)
{
    rt_uint32_t val = 0,vol = 0;    //ADC实际值,ADC转换后的电压值
    while(1)
    {
       val = rt_adc_read(adc_dev, 1);  //读取ADC通道采样值
        rt_kprintf("val:%d\n",val);

        /* 转换为对应电压值 */
          vol = val * REFER_VOLTAGE / CONVERT_BITS;
          rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
        rt_thread_mdelay(1000);
    }
}

int main(void)
{
    rt_err_t ret = 0;
    adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);//查找ADC设备
    if(adc_dev == RT_NULL)
    {
        LOG_E("rt_devide_find(adc1)failed...");
        return  -EINVAL;
    }
    ret = rt_adc_enable(adc_dev,ADC_DEV_CHANNEL);  //使能ADC通道

    if(ret < 0)
    {
        LOG_E("rt_adc_enable(adc1)...\n ");
        return ret;
    }

    th1 = rt_thread_create("th1",read_adc1_entry,NULL,512,10,5);//创建adc通道打印线程1
    if(th1 == NULL)
    {
        LOG_E("rt_adc_enable(adc1)failed...\n");
        return -ENOMEM;
    }

    rt_thread_startup(th1);   //开启线程调度
    return RT_EOK;
}

18、编译发现报错

在这里插入图片描述

19、跳转进去注释掉这段代码

在这里插入图片描述

18、编译还有报错,它说函数重定义了

在这里插入图片描述

19、因为我们刚刚把ADC初始化函数复制到board.c里面,故现在又两处对该函数进行定义,打开hal_msp.c文件把这里的ADC初始化函数注释

在这里插入图片描述

20、再编译无报错

在这里插入图片描述

21、接好下载线和串口1到电脑,然后下载程序

在这里插入图片描述

22、下载好程序后打开串行终端,选择好你所对应的端口,点击确认

在这里插入图片描述

23、不知道端口号的可以打开设备管理器进行查看端口

在这里插入图片描述
在这里插入图片描述

24、成功打开端口后,便可以在终端看到输出值

在这里插入图片描述

25、将ADC采样通道接GND

在这里插入图片描述

26、将ADC采样通道接3.3V,呃。。。有点误差问题不大,总体来看没什么毛病

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先睡个好觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值