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

描述

本文来源电子发烧友社区,作者:华仔stm32, 帖子地址:https://bbs.elecfans.com/jishu_2283601_1_1.html


【目的】学习控制GPIO电平的高低,点亮交通灯板上的三个灯。
1、新建工程:
在Hispark目录下新建一个文件夹,把HiHope_WiFi-IoT_Hi3861SPC024 SDK的所有文件复制到这个文件夹下:
HiSpark
2.打开 LiteOS Studio,点击文件->打开文件夹,选择 led_control_demo 文件夹,打开后,工程栏显示如下图所示。

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

HiSpark
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.  
  8. #define LED_LIGHT_DELAY_500MS (500*1000)
  9. #define hi_unuse_param(p)  ((p) = (p))
  10. #define LED_CONTROL_TASK_SLEEP_20MS (20)
  11. #define LED_CONTROL_TASK_SIZE       (1024)
  12. #define LED_CONTROL_TASK_PRIO       (28)
  13.  
  14. hi_u32 g_led_control_id;
  15.  
  16. hi_void led_control(hi_void)
  17. {
  18.     hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE1);
  19.     hi_udelay(LED_LIGHT_DELAY_500MS);
  20.     hi_gpio_set_ouput_val(HI_GPIO_IDX_10, HI_GPIO_VALUE0);
  21.     hi_udelay(LED_LIGHT_DELAY_500MS);
  22.     hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE1);
  23.     hi_udelay(LED_LIGHT_DELAY_500MS);
  24.     hi_gpio_set_ouput_val(HI_GPIO_IDX_12, HI_GPIO_VALUE0);
  25.     hi_udelay(LED_LIGHT_DELAY_500MS);
  26.     hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE1);
  27.     hi_udelay(LED_LIGHT_DELAY_500MS);
  28.     hi_gpio_set_ouput_val(HI_GPIO_IDX_11, HI_GPIO_VALUE0);
  29.     hi_udelay(LED_LIGHT_DELAY_500MS);
  30.    
  31. }
  32.  
  33. /* 方法一 */
  34. hi_void app_demo_led_control(hi_void)
  35. {
  36.     hi_watchdog_disable();
  37.     for(;;){
  38.         led_control();
  39.     }
  40. }
  41.  
  42. hi_void *led_control_demo(hi_void *param)
  43. {
  44.     hi_u32 ret;
  45.     hi_unuse_param(param);
  46.     for (;;)
  47.     {
  48.         led_control();
  49.         /* 释放CPU资源给其他任务使用 */
  50.         hi_sleep(LED_CONTROL_TASK_SLEEP_20MS);
  51.     }
  52.     ret = hi_task_delete(g_led_control_id);
  53.     if(ret != HI_ERR_SUCCESS){
  54.         printf("Faile to delete led control demo taskrn");
  55.         return HI_ERR_FAILURE;
  56.     }
  57.     return HI_ERR_SUCCESS;
  58. }
  59.  
  60. hi_u32 app_demo_led_control_task(hi_void)
  61. {
  62.     hi_u32 ret;
  63.     hi_task_attr led_control_attr = {0};
  64.     led_control_attr.stack_size = LED_CONTROL_TASK_SIZE;
  65.     led_control_attr.task_prio = LED_CONTROL_TASK_PRIO;
  66.     led_control_attr.task_name = (hi_char*)"app demo led control";
  67.    
  68.     ret = hi_task_create(&g_led_control_id, &led_control_attr, led_control_demo, HI_NULL);
  69.     if(ret != HI_ERR_SUCCESS){
  70.         printf("Failed to create led control demorn");
  71.         return HI_ERR_FAILURE;
  72.     }
  73.     printf("Succesed to create led control demorn");
  74.     return HI_ERR_SUCCESS;
  75. }
复制代码
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。配置界面如下图所示。
HiSpark
7、下载设置:
HiSpark
8、下载后成功后,重启开发板就可以看到交通灯交替闪烁了。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分