【目的】学习控制GPIO电平的高低,点亮交通灯板上的三个灯。
1、新建工程:
在Hispark目录下新建一个文件夹,把HiHope_WiFi-IoT_Hi3861SPC024 SDK的所有文件复制到这个文件夹下:
2.打开 LiteOS Studio,点击文件->打开文件夹,选择 led_control_demo 文件夹,打开后,工程栏显示如下图所示。
3.在 led_control_demoappdemoinitapp_io_init.c 文件里,app_io_init(hi_void)函数里对 GPIO 10 、11、12进行初始化。GPIO 10 、11、12初始化如下图所:
4.初始化完成后,在 led_control_demoappdemosrc 目录下鼠标右键选择新建文件,新建app_demo_led_control.c 文件,文件如下:(我建议第一次写的同学,不要直接复制,最好自己录一遍,这样对liteos加深印象)。
- #include <hi_gpio.h>
- #include <hi_early_debug.h>
- #include <hi_io.h>
- #include <hi_time.h>
- #include <hi_watchdog.h>
- #include <hi_task.h>
- #define LED_LIGHT_DELAY_500MS (500*1000)
- #define hi_unuse_param(p) ((p) = (p))
- #define LED_CONTROL_TASK_SLEEP_20MS (20)
- #define LED_CONTROL_TASK_SIZE (1024)
- #define LED_CONTROL_TASK_PRIO (28)
- hi_u32 g_led_control_id;
- hi_void led_control(hi_void)
- {
- hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE1);
- hi_udelay(LED_LIGHT_DELAY_500MS);
- hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE0);
- hi_udelay(LED_LIGHT_DELAY_500MS);
- hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE1);
- hi_udelay(LED_LIGHT_DELAY_500MS);
- hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE0);
- hi_udelay(LED_LIGHT_DELAY_500MS);
- hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE1);
- hi_udelay(LED_LIGHT_DELAY_500MS);
- hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE0);
- hi_udelay(LED_LIGHT_DELAY_500MS);
-
- }
- /* 方法一 */
- hi_void app_demo_led_control(hi_void)
- {
- hi_watchdog_disable();
- for(;;){
- led_control();
- }
- }
- hi_void *led_control_demo(hi_void *param)
- {
- hi_u32 ret;
- hi_unuse_param(param);
- for (;;)
- {
- led_control();
- /* 释放CPU资源给其他任务使用 */
- hi_sleep(LED_CONTROL_TASK_SLEEP_20MS);
- }
- ret = hi_task_delete(g_led_control_id);
- if(ret != HI_ERR_SUCCESS){
- printf("Faile to delete led control demo taskrn");
- return HI_ERR_FAILURE;
- }
- return HI_ERR_SUCCESS;
- }
- hi_u32 app_demo_led_control_task(hi_void)
- {
- hi_u32 ret;
- hi_task_attr led_control_attr = {0};
- led_control_attr.stack_size = LED_CONTROL_TASK_SIZE;
- led_control_attr.task_prio = LED_CONTROL_TASK_PRIO;
- led_control_attr.task_name = (hi_char*)"app demo led control";
-
- ret = hi_task_create(&g_led_control_id, &led_control_attr, led_control_demo, HI_NULL);
- if(ret != HI_ERR_SUCCESS){
- printf("Failed to create led control demorn");
- return HI_ERR_FAILURE;
- }
- printf("Succesed to create led control demorn");
- return HI_ERR_SUCCESS;
- }
复制代码5、函数编写完成后,在程序入口 app_main.c 文件中 app_main 函数里调用 app_demo_led_control_task()函数。实现控制红色 LED 闪烁。具体代码实现如下:
- extern hi_u32 app_demo_led_control_task(hi_void);
- app_demo_led_control_task();
复制代码6、编译烧录编译前需要在 LiteOS Stduio->工程配置->组件配置->Third Party library 选项中勾选掉 MQTT support并点击确认。其他编译下载烧录步骤可以参考目录第 1.2.5 节运行第一个例程序 Hello world。配置界面如下图所示。
7、下载设置:
8、下载后成功后,重启开发板就可以看到交通灯交替闪烁了。