本文共 1803 字,大约阅读时间需要 6 分钟。
板子上有三个LED,分别是LED1,LED2,LED3。
看原理图,这三个LED的阳极接的3V电源。只要控制LED的IO口低电平,对应的LED就会亮。根据图纸上的网络标号,确认三个LED分别对应的IO口。
LED1 对应 PB6
LED2 对应 PE3 LED3 对应 PD15顺便看到了三个按键,一起记录一下。
KEY1 PE11 KEY2 PE14 KEY3 PE10拿万用表测试一下,证明上述对应关系OK。
从单片机编程的思维考虑:
先将对应IO口设置为推挽输出模式(这样的IO口驱动能力很强,可以通过软件设置)再通过控制对应IO口是0或者是1,来控制实际对应的高低电平IO口是0,表示低电平,那么对应的LED会亮IO口是1,表示高电平,对应的LED会灭在 AliOS Things 的体系中,SOC层属于底层的东西。由厂家负责维护,你要做的就是了解它。
在SDK的目录里,找到 board 的文件夹,里面找到对应的硬件名称。比如零妖打开的是 developerkit 这个文件夹。这个文件夹里面,是一些涉及底层的东西,想找硬件底层的内容就来这里。零妖要控制LED1,目的是闪烁LED1。
LED1 对应 PB6 ,查看和GPIO有关的头文件,它的编号是 22 。在SDK的文件夹里面,有一个 include 的文件夹,里面放的是一些头文件,需要的话就查一下,包含到你的代码中。操作GPIO属于操作SOC层中的硬件,所以 #include <hal/soc/soc.h> 即可。在 include/hal/soc 文件夹里面,能找到一个 gpio.h 的头文件。
你可以查看对GPIO操作的一些函数。GPIO有关的API,详细解释参考:
#include#include gpio_dev_t LED1;//初始化一个GPIO相关的结构体//声明函数static void LED1_Off(void *arg);//查看原理图,IO口输出0,LED亮static void LED1_On(void *arg){ hal_gpio_output_low(&LED1); aos_post_delayed_action(100, LED1_Off, NULL);}//查看原理图,IO口输出1,LED灭static void LED1_Off(void *arg){ hal_gpio_output_high(&LED1); aos_post_delayed_action(100, LED1_On, NULL);}//主任务,OS初始化完成后运行的第一个任务。int application_start(int argc, char *argv[]){ LOG("初始化完成,应用程序开始:"); LED1.port = 22;//LED1对应的IO口,在OS里面编号是22 LED1.config = OUTPUT_PUSH_PULL;//设置为推挽输出 hal_gpio_init(&LED1);//初始化LED1的IO口 aos_post_delayed_action(1000, LED1_On, NULL);//1S之后调用LED1_On()函数 aos_loop_run();//进入事件循环 return 0;}
从主任务讲起。
首先串口输出字符串,告诉你OS已经初始化完成。配置IO口然后又定时1S,时间到了之后,执行 LED_on()函数LED亮之后,设置了一个100ms定时器,到时间后执行 LED_off()函数LED灭之后,设置了一个100ms定时器,到时间之后执行LED_on()函数LED亮和灭循环执行。微信公众号 偶尔更新
转载地址:http://kcrfa.baihongyu.com/