基于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;
}