文章目录
前言这篇文章主要是对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驱动打开(具体打开步骤如下图所示)。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/42cdc56ee38945fab89885376915c1a0.png)
二、CubeMX配置
1.CubeMX的adc初始化配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/47db71bbb4334b408930ea17f1a4fd90.png)
2.CubeMX的adc初始化代码复制
1)cubemx代码复制。 2)cubemx代码粘贴并且修改函数名。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/73d0b56542904200afe7590772cb3d0a.png)
三、代码程序编写
1.宏定义添加
1)在bord.h里面添加#define BSP_USING_ADC1。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e88d9cd612584619afd73c086b75a55c.png)
2)在stm32f1xx_hal_conf_bak.h里面添加#define HAL_ADC_MODULE_ENABLED ![在这里插入图片描述](https://img-blog.csdnimg.cn/133075ae241f40479c5992cba0c41f9b.png)
2.用户代码编写
我是新建了一个user_adc.c文件,将用户代码写在该文件里面。通过 ADC 设备采样电压值并转换为数值。
用户代码为:
/*
* 程序清单: ADC 设备使用例程
* 程序功能:通过 ADC 设备采样电压值并转换为数值。
* 示例代码参考电压为5V,转换位数为12位。
*/
#include
#include
#define ADC_DEV_NAME "adc1" /* ADC 设备名称 */
#define ADC_DEV_CHANNEL 1 /* ADC 通道 */
#define REFER_VOLTAGE 500 /* 参考电压 5V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS (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); ![在这里插入图片描述](https://img-blog.csdnimg.cn/80c60220a7b64ebfa0962947fb637439.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/39b3c78493c9499eb2959f7fe7b66f3f.png)
五、注意事项
1)如果CubeMX配置后出现串口错误,需打开CubeMX,将串口进行初始化配置。 2)根据配置的ADC引脚去连接设备,例如本例程用的ADC1,通道1,对应IO口为PA1,硬件接线应接到PA1。
|