RT-Thread+STM32L475VET6——ADC采集电压
文章目录
- 前言
- 一、板载资源
- 二、具体步骤
- 1.打开CubeMX进行配置
- 1.1 使用外部高速时钟,并修改时钟树
- 1.2 打开ADC1的通道3,并配置为连续采集模式(ADC根据自己需求调整)
- 1.3 打开串口
- 1.4 生成工程
- 2. 配置ADC
- 2.1 打开ADC驱动
- 2.2 声明ADC
- 2.3 剪切stm32l4xx_hal_msp.c中的HAL_ADC_MspInit函数至board.c
- 2.4 使能ADC(一般默认打开)
- 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口
#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;
}