RT-Thread stm32f10x-HAL 使用ADC设备

1、使用的工程

rt-thread-v4.0.1\bsp\ stm32f10x-HAL.

注:已测试rt-thread-v4.0.1\bsp\stm32\stm32f103-fire-arbitrary 可以通过env工具配置直接使用ADC设备,其余BSP未测试。

2、使用ADC

通过env工具运行menuconfig,开启adc.

–→ RT-Thread Components
——→Device Drivers
在这里插入图片描述

3、添加ADC相关文件

将以下文件复制到 stm32f10x-HAL\drivers 文件夹中,并将 .c 文件加入到工程中

文件名 文件路径
adc.h rt-thread-v4.0.1\components\drivers\include\drivers
drv_adc.c rt-thread-v4.0.1\bsp\stm32\libraries\HAL_Drivers
drv_config.h rt-thread-v4.0.1\bsp\stm32\libraries\HAL_Drivers
drv_log.h rt-thread-v4.0.1\bsp\stm32\libraries\HAL_Drivers
文件夹 f1 rt-thread-v4.0.1\bsp\stm32\libraries\HAL_Drivers\config
stm32f1xx_hal_msp.c rt-thread-v4.0.1\bsp\stm32\stm32f103-fire-arbitrary\board\CubeMX_Config\Src

4、修改rtconfig.h

rtconfig.h 文件中添加宏定义

#define SOC_SERIES_STM32F1
#define RT_USING_ADC
#define BSP_USING_ADC1

5、修改stm32f1xx_hal_conf.h.

取消 #define HAL_ADC_MODULE_ENABLED 的注释

6、修改drv_adc.c文件

在 drv_adc.c 文件中添加头文件 adc.h.

#include "adc.h"

7、修改stm32f1xx_hal_msp.c文件

①将 #include “main.h” 替换为 #include “board.h”;
②删除其余函数,只保留与ADC相关的两个函数 HAL_ADC_MspInit 和 HAL_ADC_MspDeInit

8、编译运行及运行结果

ADC 设备使用示例:[传送门]

运行 RT-Thread 文档中心的ADC设备使用示例程序,程序及结果图如下:

/*
 * 程序清单: 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     5           /* 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);

使用串口助手发送 list_device 查看使用的RTT设备:
已开启ADC
运行示例程序:
运行ADC示例程序

8、参考

RT-Thread 文档中心-其他驱动开发
添加并配置ADC相关文件
底层函数文件配置

9、工程下载

csdn下载:https://download.csdn.net/download/qq_40630196/12704504
百度云盘:链接:https://pan.baidu.com/s/1oPM4CnRp7ZaRc2hUXtKDTQ 提取码:1fk6

猜你喜欢

转载自blog.csdn.net/qq_40630196/article/details/107896253