RT-Thread 之 ADC设备驱动调试

文章目录

  • 前言
    • 这篇文章主要是对rtthread studio 软件进行ADC设备驱动调试总结。
  • 一、RT-Thread Settings配置
  • 二、CubeMX配置
    • 1.CubeMX的adc初始化配置
    • 2.CubeMX的adc初始化代码复制
  • 三、代码程序编写
    • 1.宏定义添加
    • 2.用户代码编写
  • 四、测试实验结果
  • 五、注意事项


前言

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

一、RT-Thread Settings配置

RT-Thread Settings配置,将adc驱动打开(具体打开步骤如下图所示)。
RT-Thread 之 ADC设备驱动调试_第1张图片

二、CubeMX配置

1.CubeMX的adc初始化配置

RT-Thread 之 ADC设备驱动调试_第2张图片

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

1)cubemx代码复制。
RT-Thread 之 ADC设备驱动调试_第3张图片
2)cubemx代码粘贴并且修改函数名。
RT-Thread 之 ADC设备驱动调试_第4张图片

三、代码程序编写

1.宏定义添加

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

2)在stm32f1xx_hal_conf_bak.h里面添加#define HAL_ADC_MODULE_ENABLED
RT-Thread 之 ADC设备驱动调试_第5张图片

2.用户代码编写

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

RT-Thread 之 ADC设备驱动调试_第6张图片
用户代码为:

/*
 * 程序清单: 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);
RT-Thread 之 ADC设备驱动调试_第7张图片

RT-Thread 之 ADC设备驱动调试_第8张图片

五、注意事项

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

你可能感兴趣的:(rt-thread,studio系列教程,stm32,c语言,单片机,嵌入式硬件)