文章目录
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设备:
运行示例程序:
8、参考
RT-Thread 文档中心-其他驱动开发
添加并配置ADC相关文件
底层函数文件配置