【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】交通灯 - HarmonyOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

[文章]

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

【目的】学习控制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
  2. #include
  3. #include
  4. #include time.h>
  5. #include
  6. #include

  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、下载后成功后,重启开发板就可以看到交通灯交替闪烁了。

交通灯

回帖(4)

玩硬件的女孩纸

2022-5-30 18:24:03
整理不易,感谢分享!

jf_65020769

2022-6-1 14:59:34
可以说很详细了,赞~期待更多好分享

陈皓雷

2022-6-2 10:31:01
谢谢分享,很全面

华仔stm32

2022-6-2 11:04:49
大家看着有用就好,谢谢大家捧场!

更多回帖

×
发帖