鸿蒙 Hi3861 GPIO操作 点灯和按键实验

系统
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[349902]]

 想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

Hi3861也提供了相关得GPIO口操作

先看最简单得LED灯闪烁操作

源码结构如下:

 BUILD.gn文件内容:

  1. static_library("led_demo") { 
  2.  
  3. sources = [ 
  4.  
  5. "led_demo.c" 
  6.  
  7.  
  8. include_dirs = [ 
  9.  
  10. "//utils/native/lite/include"
  11.  
  12. "//kernel/liteos_m/components/cmsis/2.0"
  13.  
  14. "//base/iot_hardware/interfaces/kits/wifiiot_lite" 
  15.  
  16.  

led_demo.c内容:

  1. #include <unistd.h> 
  2. #include "stdio.h" 
  3. #include "ohos_init.h" 
  4. #include "cmsis_os2.h" 
  5. #include "wifiiot_gpio.h" 
  6. #include "wifiiot_gpio_ex.h" 
  7.  
  8.  
  9. #include <hi_types_base.h> 
  10. #include <hi_i2c.h> 
  11. #include <hi_early_debug.h> 
  12. #include <hi_stdlib.h> 
  13.  
  14. void *LedTask(const char *arg) 
  15.  
  16.     (void)arg; 
  17.     while (1)  
  18.     { 
  19.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0); 
  20.             usleep(300000); 
  21.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1); 
  22.             usleep(300000); 
  23.     } 
  24.  
  25.     return NULL
  26.  
  27. void led_demo(void) 
  28.     osThreadAttr_t attr; 
  29.  
  30.     GpioInit(); 
  31.  
  32.     //复用引脚为 GPIO 
  33.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO); 
  34.  
  35.     //设置为输出 
  36.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT); 
  37.  
  38.  
  39.      
  40.     attr.name = "LedTask"
  41.     attr.attr_bits = 0U; 
  42.     attr.cb_mem = NULL
  43.     attr.cb_size = 0U; 
  44.     attr.stack_mem = NULL
  45.     attr.stack_size = 512; 
  46.     attr.priority = 26; 
  47.  
  48.     if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { 
  49.         printf("[LedExample] Falied to create LedTask!\n"); 
  50.     } 
  51.      
  52.  
  53.  
  54. //SYS_RUN(led_demo); 
  55.  
  56. void oled_test(void) 
  57.  
  58.  
  59. SYS_RUN(oled_test); 

 另外GPIO口还可以作为输入,然后使用中断,示例代码如下:

这段示例代码用的开发板上面的user按键。


通过查阅原理图,我们可以看到Hi3861在type-C口附近有一个user按钮,如图,主要不要和复位按钮搞错了。user按钮对应的是GPIO5引脚。

  1. /* gpio callback func */ 
  2. hi_void my_gpio_isr_func(hi_void *arg) 
  3.     hi_unref_param(arg); 
  4.     printf("----- gpio isr success -----\r\n"); 
  5.  
  6.  
  7. /* 设置 按键中断响应 */ 
  8. hi_void my_gpio_isr_demo(hi_void) 
  9.     hi_u32 ret; 
  10.  
  11.     printf("----- gpio isr demo -----\r\n"); 
  12.  
  13.     (hi_void)hi_gpio_init(); 
  14.      
  15.     hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); /* uart1 rx */ 
  16.  
  17.     ret = hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN); 
  18.     if (ret != HI_ERR_SUCCESS) { 
  19.         printf("===== ERROR ======gpio -> hi_gpio_set_dir1 ret:%d\r\n", ret); 
  20.         return
  21.     } 
  22.  
  23.     ret = hi_gpio_register_isr_function(HI_GPIO_IDX_5, HI_INT_TYPE_EDGE, 
  24.                                         HI_GPIO_EDGE_RISE_LEVEL_HIGH, my_gpio_isr_func, HI_NULL); 
  25.     if (ret != HI_ERR_SUCCESS) { 
  26.         printf("===== ERROR ======gpio -> hi_gpio_register_isr_function ret:%d\r\n", ret); 
  27.     } 

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 【编辑推荐】

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-10-14 09:41:02

Hi3861GPIO点灯

2020-10-28 10:03:43

Hi3861 GPIO点灯按键

2020-10-16 09:50:37

Hi3861WiFi热点

2020-11-18 11:56:06

鸿蒙Hi3861

2020-11-03 12:26:55

Hi3861

2020-12-08 12:36:41

Hi3861 ADC驱动开发

2021-02-02 15:52:17

鸿蒙HarmonyOS应用开发

2020-11-06 11:32:11

NV操作

2020-11-06 10:15:16

HiBurn

2022-03-15 15:00:59

Hi3861Pin接口鸿蒙

2023-05-26 16:07:14

Hi3861Wifi模块

2020-12-31 12:02:15

鸿蒙Hi3861环境搭建

2020-11-23 13:09:42

HI3861

2020-12-17 10:02:16

鸿蒙Hi3861开发板

2020-11-03 11:39:22

wifi小车

2020-10-27 10:08:19

Hi3861ADC驱动

2020-12-09 09:44:29

Hi3861硬件介绍鸿蒙开发板

2020-10-14 09:37:03

HiBurn鸿蒙.bin文件

2020-11-02 11:27:09

鸿蒙LiteOS

2021-01-14 11:58:35

鸿蒙HarmonyOSHi3861
点赞
收藏

51CTO技术栈公众号