RT-Thread 之 ADC设备驱动调试

本文详细介绍了如何在rtthreadstudio中配置ADC设备驱动,包括RT-ThreadSettings设置、CubeMX初始化配置及代码编写,展示了通过ADC采样电压值并转换的过程,以及测试实验结果和注意事项。
摘要由CSDN通过智能技术生成


前言

这篇文章主要是对rtthread studio 软件进行ADC设备驱动调试总结。

一、RT-Thread Settings配置

RT-Thread Settings配置,将adc驱动打开(具体打开步骤如下图所示)。
在这里插入图片描述

二、CubeMX配置

1.CubeMX的adc初始化配置

在这里插入图片描述

2.CubeMX的adc初始化代码复制

1)cubemx代码复制。
在这里插入图片描述
2)cubemx代码粘贴并且修改函数名。
在这里插入图片描述

三、代码程序编写

1.宏定义添加

1)在bord.h里面添加#define BSP_USING_ADC1。
在这里插入图片描述

2)在stm32f1xx_hal_conf_bak.h里面添加#define HAL_ADC_MODULE_ENABLED
在这里插入图片描述

2.用户代码编写

我是新建了一个user_adc.c文件,将用户代码写在该文件里面。通过 ADC 设备采样电压值并转换为数值。

在这里插入图片描述
用户代码为:

/*
 * 程序清单: ADC 设备使用例程
 * 程序功能:通过 ADC 设备采样电压值并转换为数值。
 *           示例代码参考电压为5V,转换位数为12位。
*/

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

#define ADC_DEV_NAME        "adc1"      /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     1          /* ADC 通道 */
#define REFER_VOLTAGE       500         /* 参考电压 5V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */
float Distance=0;
void adc_vol_sample();


static void adc1_read_distance_entry(void *parameter)
{

    while(1)
    {
        adc_vol_sample();
        rt_thread_mdelay(1000);
    }


}



void adc_vol_sample()
{
    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);
    Distance=(76762/(value-7))-4;
    rt_kprintf("the value is :%d \n", value);
    rt_kprintf("the Distance is :%d \n", Distance);

    /* 转换为对应电压值 */
    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;
}


int adc1_read_distance_sample(void)
{
    rt_thread_t adc1_thread;

    adc1_thread = rt_thread_create("adc1",
                                   adc1_read_distance_entry,
                                   "pr_adc1",
                                   1024,
                                   RT_THREAD_PRIORITY_MAX / 2,
                                   20);
    if (adc1_thread != RT_NULL) {
        rt_thread_startup(adc1_thread);
    }

    return RT_EOK;
}
INIT_APP_EXPORT(adc1_read_distance_sample);


四、测试实验结果

打开adc读写线程,打印adc数据。INIT_APP_EXPORT(adc1_read_distance_sample);
在这里插入图片描述

在这里插入图片描述

五、注意事项

1)如果CubeMX配置后出现串口错误,需打开CubeMX,将串口进行初始化配置。
2)根据配置的ADC引脚去连接设备,例如本例程用的ADC1,通道1,对应IO口为PA1,硬件接线应接到PA1。

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值