当前位置:   article > 正文

小熊派回顾:学习GPIO,学习ADC_小熊派gpio教程

小熊派gpio教程

目录

GPIO

GPIO API介绍

wifiiot_gpio.h接口

wifiiot_gpio_ex.h接口

查看LED对应的GPIO引脚

操作GPIO点亮LED

编写业务代码

编译

烧录 

读取GPIO引脚方向、输出电平值

编写业务代码

编译

烧录 

ADC

ADC API介绍

查看ADC对应的GPIO引脚

ADC读取GPIO的电压值

编写业务代码

编译

烧录 


GPIO

GPIO API介绍

wifiiot_gpio.h接口

其作用是用于初始化GPIO。

 1.GpioInit 初始化GPIO

2.GpioDeinit 取消初始化GPIO

3.GpioSetDir 设置GPIO引脚方向

4.GpioGetDir 获取GPIO引脚方向

5.GpioSetOutputVal 设置GPIO引脚输出电平值

6.GpioGetOutputVal 获取GPIO引脚输出电平值

wifiiot_gpio_ex.h接口

其作用是用于设置GPIO拉力和驱动器强度。

1.IoSetPull 设置GPIO引脚上拉

2.IoGetPull 获取GPIO引脚上拉

3.IoSetFunc 设置GPIO引脚功能

4.IoGetFunc 获取GPIO引脚功能

5.IOSetDriverStrength 设置GPIO驱动能力

6.IOGetDriverStrength 获取GPIO驱动能力

查看LED对应的GPIO引脚

LED对应的GPIO引脚是GPIO2通过 控制GPIO2输出的的电平信号来实 现LED灯的闪烁。

操作GPIO点亮LED

编写业务代码

led_exmaple.c文件:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. #include "wifiiot_gpio.h"
  6. #include "wifiiot_gpio_ex.h"
  7. static void LedTask(void)
  8. {
  9. //初始化GPIO
  10. GpioInit();
  11. //设置GPIO_2的复用功能为普通GPIO
  12. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);
  13. //设置GPIO_2为输出模式
  14. GpioSetDir(WIFI_IOT_GPIO_IDX_2, WIFI_IOT_GPIO_DIR_OUT);
  15. while (1)
  16. {
  17. //设置GPIO_2输出高电平点亮LED灯
  18. GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 1);
  19. //延时1s
  20. usleep(1000000);
  21. //设置GPIO_2输出低电平熄灭LED灯
  22. GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 0);
  23. //延时1s
  24. usleep(1000000);
  25. }
  26. }
  27. static void LedExampleEntry(void)
  28. {
  29. osThreadAttr_t attr;
  30. attr.name = "LedTask";
  31. attr.attr_bits = 0U;
  32. attr.cb_mem = NULL;
  33. attr.cb_size = 0U;
  34. attr.stack_mem = NULL;
  35. attr.stack_size = 512;
  36. attr.priority = 25;
  37. if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL)
  38. {
  39. printf("Falied to create LedTask!\n");
  40. }
  41. }
  42. APP_FEATURE_INIT(LedExampleEntry);

 BUILD.gn文件:

  1. static_library("led_example") {
  2. sources = [
  3. "led_example.c"
  4. ]
  5. include_dirs = [
  6. "//utils/native/lite/include",
  7. "//kernel/liteos_m/components/cmsis/2.0",
  8. "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  9. ]
  10. }

编译

烧录 

 

读取GPIO引脚方向、输出电平值

编写业务代码

led_exmaple.c文件:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. #include "wifiiot_gpio.h"
  6. #include "wifiiot_gpio_ex.h"
  7. static void LedTask(void)
  8. {
  9. //初始化GPIO
  10. GpioInit();
  11. //设置GPIO_2的复用功能为普通GPIO
  12. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);
  13. //设置GPIO_2为输出模式
  14. GpioSetDir(WIFI_IOT_GPIO_IDX_2, WIFI_IOT_GPIO_DIR_OUT);
  15. WifiIotGpioDir val = {0};
  16. GpioGetDir(WIFI_IOT_GPIO_IDX_2,&val);
  17. printf("GPIO_2 Dir is %d\r\n",val);
  18. WifiIotGpioValue OutputVal = {0};
  19. while (1)
  20. {
  21. //设置GPIO_2输出高电平点亮LED灯
  22. GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 1);
  23. GpioGetOutputVal(WIFI_IOT_GPIO_IDX_2,&OutputVal);
  24. printf("GPIO_2 OutputVal is %d\r\n",OutputVal);
  25. //延时1s
  26. usleep(1000000);
  27. //设置GPIO_2输出低电平熄灭LED灯
  28. GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 0);
  29. GpioGetOutputVal(WIFI_IOT_GPIO_IDX_2,&OutputVal);
  30. printf("GPIO_2 OutputVal is %d\r\n",OutputVal);
  31. //延时1s
  32. usleep(1000000);
  33. }
  34. }
  35. static void LedExampleEntry(void)
  36. {
  37. osThreadAttr_t attr;
  38. attr.name = "LedTask";
  39. attr.attr_bits = 0U;
  40. attr.cb_mem = NULL;
  41. attr.cb_size = 0U;
  42. attr.stack_mem = NULL;
  43. attr.stack_size = 512;
  44. attr.priority = 25;
  45. if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL)
  46. {
  47. printf("Falied to create LedTask!\n");
  48. }
  49. }
  50. APP_FEATURE_INIT(LedExampleEntry);

 BUILD.gn文件:

  1. static_library("led_example") {
  2. sources = [
  3. "led_example.c"
  4. ]
  5. include_dirs = [
  6. "//utils/native/lite/include",
  7. "//kernel/liteos_m/components/cmsis/2.0",
  8. "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  9. ]
  10. }

编译

 

烧录 

 

ADC

ADC API介绍

wifiiot_adc.h接口

1.AdcRead 根据输入参数从指定的ADC通道读取一段采样数据

参数说明

1.channel ADC通道

2.data 指示用于存放读取数据的地址的指针

3.equModel 表示平均算法的次数

4.curBais 表示模拟功率控制模式

5.rstCnt 指示从重置到转换开始的时间计数

查看ADC对应的GPIO引脚

将使用板载用户按键F1来模拟GPIO口电压的变化。GPIO_11对应的是ADC Channel 5,所以需要 编写软件去读取ADC Channel 5的电压。

ADC读取GPIO的电压值

编写业务代码

adc.exmaple文件:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <math.h>
  5. #include "ohos_init.h"
  6. #include "cmsis_os2.h"
  7. #include "wifiiot_gpio_ex.h"
  8. #include "wifiiot_errno.h"
  9. #include "wifiiot_adc.h"
  10. #define ADC_TASK_STACK_SIZE 1024 * 8
  11. #define ADC_TASK_PRIO 24
  12. /***** 获取电压值函数 *****/
  13. static float GetVoltage(void)
  14. {
  15. unsigned int ret;
  16. unsigned short data;
  17. ret = AdcRead(WIFI_IOT_ADC_CHANNEL_5, &data, WIFI_IOT_ADC_EQU_MODEL_8, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
  18. if (ret != WIFI_IOT_SUCCESS)
  19. {
  20. printf("ADC Read Fail\n");
  21. }
  22. return (float)data * 1.8 * 4 / 4096.0;
  23. }
  24. static void ADCTask(void)
  25. {
  26. float voltage;
  27. //上拉,让按键未按下时GPIO_11保持高电平状态
  28. IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
  29. while (1)
  30. {
  31. printf("=======================================\r\n");
  32. printf("***************ADC_example*************\r\n");
  33. printf("=======================================\r\n");
  34. //获取电压值
  35. voltage = GetVoltage();
  36. printf("vlt:%.3fV\n", voltage);
  37. //延时1s
  38. usleep(1000000);
  39. }
  40. }
  41. static void ADCExampleEntry(void)
  42. {
  43. osThreadAttr_t attr;
  44. attr.name = "ADCTask";
  45. attr.attr_bits = 0U;
  46. attr.cb_mem = NULL;
  47. attr.cb_size = 0U;
  48. attr.stack_mem = NULL;
  49. attr.stack_size = ADC_TASK_STACK_SIZE;
  50. attr.priority = ADC_TASK_PRIO;
  51. if (osThreadNew((osThreadFunc_t)ADCTask, NULL, &attr) == NULL)
  52. {
  53. printf("[ADCExample] Falied to create ADCTask!\n");
  54. }
  55. }
  56. APP_FEATURE_INIT(ADCExampleEntry);

BUILD.gn文件:

  1. static_library("adc_example") {
  2. sources = [
  3. "adc_example.c"
  4. ]
  5. include_dirs = [
  6. "//utils/native/lite/include",
  7. "//kernel/liteos_m/components/cmsis/2.0",
  8. "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  9. ]
  10. }

编译

烧录 

 

 仅为学习笔记,原文请看:

【鸿蒙2.0设备开发教程】小熊派HarmonyOS 鸿蒙·季 开发教程_哔哩哔哩_bilibili

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号