小熊派季GPIO、PWM、中断综合实验

阅读: 评论:0

小熊派季GPIO、PWM、中断综合实验

小熊派季GPIO、PWM、中断综合实验

要求编写程序,按F1使LED变亮,按F2使LED变暗。

程序使用OpenHarmony官网提供的SDK,采用纯Windows环境编译烧录。

目前由于华为云链接失效,DevEco无法下载Windows下的Hi3861 SDK,我已经在华为设备开发论坛发帖。我是使用八月份的SDK备份编程的。

其他同学使用小熊派社区的SDK编程,出现了打印栈回退并重启开发板的错误。问题单链接:根据样例B1、B2和B3,设计通过按F1和F2调节灯亮度的程序运行后,系统崩溃,打印栈回退信息并重启 · Issue #I8RW1U · 小熊派开源社区/BearPi-HM_Nano - Gitee

下面是我写的代码,采用样例各模块复制粘贴的方式拼凑而成。

/* 不知道这边 include 的是啥玩意 */
#include <unistd.h>#include "iot_gpio_ex.h"
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "iot_watchdog.h"
#include "iot_pwm.h"#define IOT_PWM_PORT_PWM0   0
#define IOT_PWM_PORT_PWM1   1
#define IOT_PWM_PORT_PWM2   2
#define IOT_PWM_PORT_PWM3   3
#define IOT_FREQ            65535
#define DELYA_MS            100static int g_duty = 20;// 一种错误是在中断里面调 PWM。中断只能做加加减减!
static void F1(char* arg)
{(void)arg;printf("F1n");++g_duty;printf("g_duty = %dn", g_duty);
}static void F2(char* arg)
{(void)arg;printf("F2n");if (g_duty > 0) {--g_duty;}printf("g_duty = %dn", g_duty);
}void PwmMain(void)
{/* 初始化 LED 灯和 PWM */IoTGpioInit(IOT_IO_NAME_GPIO_2);IoSetFunc(IOT_IO_NAME_GPIO_2, IOT_IO_FUNC_GPIO_2_PWM2_OUT);IoTGpioSetDir(IOT_IO_NAME_GPIO_2, IOT_GPIO_DIR_OUT);IoTPwmInit(IOT_PWM_PORT_PWM2);/* 初始化 F1 按钮并设置为下降沿中断 */IoTGpioInit(IOT_IO_NAME_GPIO_11);IoSetFunc(IOT_IO_NAME_GPIO_11, IOT_IO_FUNC_GPIO_11_GPIO);IoTGpioSetDir(IOT_IO_NAME_GPIO_11, IOT_GPIO_DIR_IN);IoSetPull(IOT_IO_NAME_GPIO_11, IOT_IO_PULL_UP);IoTGpioRegisterIsrFunc(IOT_IO_NAME_GPIO_11, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1, NULL);/* 初始化 F2 按钮并设置为下降沿中断 */IoTGpioInit(IOT_IO_NAME_GPIO_12);IoSetFunc(IOT_IO_NAME_GPIO_12, IOT_IO_FUNC_GPIO_12_GPIO);IoTGpioSetDir(IOT_IO_NAME_GPIO_12, IOT_GPIO_DIR_IN);IoSetPull(IOT_IO_NAME_GPIO_12, IOT_IO_PULL_UP);IoTGpioRegisterIsrFunc(IOT_IO_NAME_GPIO_12, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2, NULL);while (1) {IoTPwmStart(IOT_PWM_PORT_PWM2, g_duty, IOT_FREQ);}
}void GA12N20SampleEntry(void)
{osThreadAttr_t attr;IoTWatchDogDisable();attr.name = "PwmMain";attr.attr_bits = 0U;attr.cb_mem = NULL;attr.cb_size = 0U;attr.stack_mem = NULL;attr.stack_size = 1024 * 5; // 堆栈大小为1024*5,stack size 1024*5attr.priority = osPriorityNormal;if (osThreadNew((osThreadFunc_t)PwmMain, NULL, &attr) == NULL) {printf("[PwmMain] Failed to create Hcsr04SampleTask!n");}
}APP_FEATURE_INIT(GA12N20SampleEntry);

本文发布于:2024-01-31 20:12:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670313931073.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:小熊   GPIO   PWM
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23