[文章]【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】交通灯

阅读量0
1
5
【目的】学习控制GPIO电平的高低,点亮交通灯板上的三个灯。
1、新建工程:
在Hispark目录下新建一个文件夹,把HiHope_WiFi-IoT_Hi3861SPC024 SDK的所有文件复制到这个文件夹下:
拷SDK.png

2.打开 LiteOS Studio,点击文件->打开文件夹,选择 led_control_demo 文件夹,打开后,工程栏显示如下图所示。

打开工程.png

3.在 led_control_demoappdemoinitapp_io_init.c 文件里,app_io_init(hi_void)函数里对 GPIO 10 、11、12进行初始化。GPIO 10 、11、12初始化如下图所:

初始化IO.png

4.初始化完成后,在 led_control_demoappdemosrc 目录下鼠标右键选择新建文件,新建app_demo_led_control.c 文件,文件如下:(我建议第一次写的同学,不要直接复制,最好自己录一遍,这样对liteos加深印象)。

  1. #include <hi_gpio.h>
  2. #include <hi_early_debug.h>
  3. #include <hi_io.h>
  4. #include <hi_time.h>
  5. #include <hi_watchdog.h>
  6. #include <hi_task.h>

  7. #define LED_LIGHT_DELAY_500MS (500*1000)
  8. #define hi_unuse_param(p)  ((p) = (p))
  9. #define LED_CONTROL_TASK_SLEEP_20MS (20)
  10. #define LED_CONTROL_TASK_SIZE       (1024)
  11. #define LED_CONTROL_TASK_PRIO       (28)

  12. hi_u32 g_led_control_id;

  13. hi_void led_control(hi_void)
  14. {
  15.     hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE1);
  16.     hi_udelay(LED_LIGHT_DELAY_500MS);
  17.     hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE0);
  18.     hi_udelay(LED_LIGHT_DELAY_500MS);
  19.     hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE1);
  20.     hi_udelay(LED_LIGHT_DELAY_500MS);
  21.     hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE0);
  22.     hi_udelay(LED_LIGHT_DELAY_500MS);
  23.     hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE1);
  24.     hi_udelay(LED_LIGHT_DELAY_500MS);
  25.     hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE0);
  26.     hi_udelay(LED_LIGHT_DELAY_500MS);
  27.    
  28. }

  29. /* 方法一 */
  30. hi_void app_demo_led_control(hi_void)
  31. {
  32.     hi_watchdog_disable();
  33.     for(;;){
  34.         led_control();
  35.     }
  36. }

  37. hi_void *led_control_demo(hi_void *param)
  38. {
  39.     hi_u32 ret;
  40.     hi_unuse_param(param);
  41.     for (;;)
  42.     {
  43.         led_control();
  44.         /* 释放CPU资源给其他任务使用 */
  45.         hi_sleep(LED_CONTROL_TASK_SLEEP_20MS);
  46.     }
  47.     ret = hi_task_delete(g_led_control_id);
  48.     if(ret != HI_ERR_SUCCESS){
  49.         printf("Faile to delete led control demo taskrn");
  50.         return HI_ERR_FAILURE;
  51.     }
  52.     return HI_ERR_SUCCESS;
  53. }

  54. hi_u32 app_demo_led_control_task(hi_void)
  55. {
  56.     hi_u32 ret;
  57.     hi_task_attr led_control_attr = {0};
  58.     led_control_attr.stack_size = LED_CONTROL_TASK_SIZE;
  59.     led_control_attr.task_prio = LED_CONTROL_TASK_PRIO;
  60.     led_control_attr.task_name = (hi_char*)"app demo led control";
  61.    
  62.     ret = hi_task_create(&g_led_control_id, &led_control_attr, led_control_demo, HI_NULL);
  63.     if(ret != HI_ERR_SUCCESS){
  64.         printf("Failed to create led control demorn");
  65.         return HI_ERR_FAILURE;
  66.     }
  67.     printf("Succesed to create led control demorn");
  68.     return HI_ERR_SUCCESS;
  69. }
复制代码
5、函数编写完成后,在程序入口 app_main.c 文件中 app_main 函数里调用 app_demo_led_control_task()函数。实现控制红色 LED 闪烁。具体代码实现如下:
  1. extern hi_u32 app_demo_led_control_task(hi_void);
  2. app_demo_led_control_task();
复制代码
6、编译烧录编译前需要在 LiteOS Stduio->工程配置->组件配置->Third Party library 选项中勾选掉 MQTT support并点击确认。其他编译下载烧录步骤可以参考目录第 1.2.5 节运行第一个例程序 Hello world。配置界面如下图所示。
编译选项.png

7、下载设置:
下载配置.png

8、下载后成功后,重启开发板就可以看到交通灯交替闪烁了。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友