1、工程创建
从gitee上下载rtthread完整版gitee-master分支(注意分支一定要选对)。
![1.jpg](//file.elecfans.com/web2/M00/71/9D/poYBAGNQ6fqAauTKAAC2H1W9Sd8243.jpg)
等待下载完成。
然后删除BSP文件夹下的板级支持包,仅留下nuvoton,并且将nuvoton文件夹下除了libraries和numaker-iot-m487其它都删除,再将libraries下除了m480和nu_packages以外的都删。再然后回到numaker-iot-m487文件夹开始使用ENV工具。这里参照官网文档进行操作就可以了。
或者你可以不了解,直接按照下述指令一条一条输入:
menuconfig --generate
pkgs --update
scons --target=mdk5 -s(这里我是用的是MDK5)
这里我就不赘述了,参考官方教程即可完成。
2、工程裁剪
使用ENV工具,输入指令menuconfig,弹出如下界面。
![1.jpg](//file.elecfans.com/web2/M00/71/9D/poYBAGNQ6haAKuUWAAFhEA6SWNE129.jpg)
这里不一一贴图了,高级功能都关了就可以。我工程中仅开启了串口(finsh)、ADC、Timer以及GPIO功能(我的任务是ADC和Timer,顺便点个灯),这里ADC我只开启了ADC0单元。
![1.jpg](//file.elecfans.com/web2/M00/72/31/pYYBAGNQ6imAXWldAAJ-x0aR45M530.jpg)
3、ADC底层代码
官方已经实现了ADC的驱动层,drv_eadc.c,可实现ADC0的16个通道可选开起及关闭以及AD值读取功能。感谢官方大大,节约了开发时间,另外这里注意一下,程序中写的最大19个通道,这里的ADC采集通道只有16个即0-15,多余的三个是触发源哦。
static struct nu_eadc nu_eadc_arr [] =
{
#if defined(BSP_USING_EADC0)
{
.name = "eadc0",
.eadc_base = EADC0,
.eadc_max_ch_num = 19,
},
#endif
4、ADC应用
官方还提供了ADC的例程,这里的设备名称为eadc0,注意ADC精度为12位,比较电压是3.3V。我测试的是ADC0的通道0,根据介绍内容,引脚分布如下。
![1.jpg](//file.elecfans.com/web2/M00/71/9D/poYBAGNQ6kGAX8JyAACZ1A3s2bY673.jpg)
这里就不放代码了,官方已经全部实现了。
5、测试
在FINSH控制台下,查看设备,eadc设备已经在列表中了。
![1.jpg](//file.elecfans.com/web2/M00/72/31/pYYBAGNQ6lKAB070AAFDQXW5iKI632.jpg)
什么都不接的情况下测试ADC读取(浮空情况下),此时ADC值为0x497左右。
![1.jpg](//file.elecfans.com/web2/M00/71/9E/poYBAGNQ6mGAdo17AAEsUBmWMUI887.jpg)
将ADC0_CH0与电源GND相连,此时ADC值为0。
![1.jpg](//file.elecfans.com/web2/M00/71/9E/poYBAGNQ6nGAVnaqAAE-F2sFjso698.jpg)
将ADC0_CH0与Verf相连,此时ADC值为0xfff。
![1.jpg](//file.elecfans.com/web2/M00/72/31/pYYBAGNQ6oGAWVqyAAE4zuh4zCY311.jpg)
测试完成。官方已经将基本的ADC设备驱动、框架搭建好了,十分的人性化,本人能力有限,如果文章中存在问题,请大家多多指教。
6、概述
ADC功能的测评基本就是这些,官方把驱动层、应用例程都写好了,我只是个搬运工,这也侧面证明了RT-Thread和Nuvoton的合作深度,以及RT-Thread的上手容易程度。
原作者:werper
|