简介
RT-Thread ADC 使用, 基于
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
串口: Usart1
DAC1: PA5, OUT2
ADC1: PC2, IN3
步骤
创建项目
参考 [BearPi RT-Thread项目创建](https://blog.csdn.net/halo_hsuh/article/details/134931437?spm=1001.2014.3001.5502)
RT-Thread开启ADC支持
rtconfig.h 中加入
#define RT_USING_ADC
将DAC文件库加入Keil项目中
env 环境加指令 scons --target=mdk5 -s
CubeMX配置DAC1
双击打开 board\CubeMX_Config\CubeMX_Config.ioc, 开启ADC1 通道3输入
注册设备
board.h # 开启加入ADC1
#define BSP_USING_ADC
#define BSP_USING_ADC1
这里编译的时候会有报错, 解决是在drv_adc.c 加入头文件
#include "drv_common.h" // 这里面包含了adc.h
编译烧录
串口使用list device时候可以发现adc1设备了
用户代码使用adc
拷贝RT-Thread官方示例, 并修改为如下
/*
* 程序清单: 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] 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("[adc] the value is :%d \n", value);
/* 转换为对应电压值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("[adc] 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);
编译烧录
使用串口软件输入指令 adc_vol_sample 100 这个一百是转化值, 将转化成对应的模拟量
代码
参考
BearPi Std 板从入门到放弃 - 引气入体篇(7)(DAC)