基于RT-Thread Stduio使用ART-Pi的ADC外设

基于RT-Thread Stduio使用ART-Pi的ADC外设

1. 打开RT-Thread Stduio,左上角新建RT-Thread项目,选择基于开发板开发, 然后选择开发板为ART-Pi,创建模板工程。

在这里插入图片描述

2. 如果想保存自定义位置的话,就取消使用缺省位置的√。在这里插入图片描述

3. 输入项目名,点击完成。

在这里插入图片描述

3. 选择刚才创建的工程的main函数,进行全局编译。

在这里插入图片描述

4. 编译没有错误,没有警告后,打开RT-Thread Setting 使能ADC。

在这里插入图片描述

5. 选择更多配置

在这里插入图片描述

6. 点击组件,使能ADC驱动后点击左上角全部保存并关闭RT-Thread Setting。

在这里插入图片描述

7. 打开Library中的Kconfig

在这里插入图片描述

8. 打开Library中的Kconfig,找到On-Chip组件,将下面代码添加到图中所示位置并保存文件。

    menuconfig BSP_USING_ADC		
    	bool "Enable ADC"			
        default n					
    	select RT_USING_ADC			
    	select RT_USING_PIN
    	if BSP_USING_ADC			
    		config BSP_USING_ADC1	
    			bool "Enable ADC1"
            	default n
    		config BSP_USING_ADC2
    			bool "Enable ADC2"
            	default n
    		config BSP_USING_ADC3
    			bool "Enable ADC3"
            	default n
        endif 	

在这里插入图片描述

9. 打开RT-Thread Setting ,选择硬件,选择On-chip,然后点击使能ADC,根据自己选择需要使用的ADC通道进行使能,我这里使用PB0和BP1作为ADC,它是挂载在ADC1中的。将ADC1打上对勾并保存。

在这里插入图片描述

10. 打开Board下的CUMX,我们配置ADC引脚。

在这里插入图片描述

11. 直接查找PB1引脚,这里引脚将会闪烁。

在这里插入图片描述

12. 我这里使用了ADC1的通道五,选中即可。

在这里插入图片描述
在这里插入图片描述

13.在左侧搜索ADC,选择ADC1,将通道5设置为Single-ended

在这里插入图片描述

14. 同样,选择PB0为ADC1通道9

在这里插入图片描述

15. 选择左上角文件, 保存项目。

在这里插入图片描述

16. 点击获取代码,即可自动生成代码。

在这里插入图片描述

17. 点击关闭,关掉CUBEMX即可。

在这里插入图片描述

18. 点击刚刚创建的项目名,右键-更新软件包。

19. 更新完后,进行全局编译。无错误、无警告。但是此时ADC还是无法使用的。因为编译器将部分ADC的外设文件屏蔽掉了。

20. 选中项目名,右键-属性,来到图示位置。

在这里插入图片描述

21. 将所有带有ADC的文件,选中文件名后点击移出。

在这里插入图片描述

22. 将所有带有ADC的文件,选中文件名后点击移出,完成后点击确定即可。

在这里插入图片描述

在这里插入图片描述

23. 打开rtconfig.h 发现ADC和ADC1已经被使能。

在这里插入图片描述

23. 这时候来到主函数里新建一个进程。

先将宏定义写在开始的地方。这里如果使用ADC1,设备名称就是adc1,如果是ADC2,设备名称就是adc2,通道数是由使能的ADC通道决定。

#define ADC_DEV_NAME        "adc1"      /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     5          /* ADC 通道 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 16)   /* 转换位数为16位 */

int adc_vol()
{
    rt_uint32_t value, vol;
    rt_adc_device_t adc_dev;
    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;
}

24. 在主函数前声明刚才创建的函数,然后在主函数中调用即可。

在这里插入图片描述

25.编译无误,下载进开发板即可。

在这里插入图片描述

26.下载完成后,打开RT-Thread Studio的串口终端。。这个终端真的是十分好用。

在这里插入图片描述

27.即可看到16位ADC转换的数值和对应的电压值。具体电压处理是在adc_vol函数中,进行操作即可。

在这里插入图片描述

28.如果是多个通道开启ADC,则新建两个adc_vol函数(函数名不能不要),然后创建两份宏定义即可(宏定义名字也不可相同)。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值