文章目录
前言
这篇文章主要是对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。