2. 导入我们头文件
#include 《rtthread.h》
#include 《rtdevice.h》
3. 定义ADC句柄,ADC设备名,通道、参考电压,位数
rt_adc_device_t adc_dev;
#define ADC_DEV_NAME “adc1” /* ADC 设 备 名 称 */
#define ADC_DEV_CHANNEL 6 /* ADC 通 道 */
#define REFER_VOLTAGE 330 /* 参 考 电 压 3.3V,数 据 精 度 乘 以100保 留2位 小 数 */
#define CONVERT_BITS (1 《《 12) /* 转 换 位 数 为12位 */
4. 编写设备代码
首先我们需要使用 这个API来查找设备获取设备句柄,
rt_device_t rt_device_find(const char* name);
其次使能设备
rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel);
再然后读取ADC结果
rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel);
4. 这里放上这个.c文件的完整代码
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-03-14 desktop the first version
*/
#include 《rtthread.h》
#include 《rtdevice.h》
rt_adc_device_t adc_dev;
#define ADC_DEV_NAME “adc1” /* ADC 设 备 名 称 */
#define ADC_DEV_CHANNEL 6 /* 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_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;
}
/* 使 能 设 备 */
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);
return RT_EOK;
}
/* 导 出 到 msh 命 令 列 表 中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
四、 使用方法
使用方法特别简单,我将这个函数导入了命令行中,可以输入adc_vol_sample这个关键词调用,可以直接输出其ADC电压。