此前我撰写了几篇有关星闪技术的入门文章,最近收到几位读者私信反馈——烧录buttondemo后毫无反应。本文旨在解决这一常见问题(本文适合新手阅读,若赶时间可直接滑至最后看解决方案)。
相关基础教程请参考:星闪开发入门级教程之安装编译器与小项目烧录
### 一、常规排查思路
在过往从事前后端开发及自然语言处理项目时,遇到异常通常会从以下四个方面入手:
将Demo代码放入peripheral目录下之后,需完成以下两步配置:
config SAMPLE_SUPPORT_BUTTONDEMO bool prompt "Support BUTTONDEMO Sample." default n depends on ENABLE_PERIPHERAL_SAMPLE help This option means support BUTTONDEMO Sample.
if(DEFINED CONFIG_SAMPLE_SUPPORT_BUTTONDEMO) add_subdirectory_if_exist(buttondemo)endif()
#include "pinctrl.h"#include "common_def.h"#include "soc_osal.h"#include "gpio.h"#include "hal_gpio.h"#include "watchdog.h"#include "app_init.h"#define BSP_LED 7 // RED#define BUTTON_GPIO 12 // 按键#define BUTTON_TASK_STACK_SIZE 0x1000#define BUTTON_TASK_PRIO 17
头文件说明:涵盖了引脚控制、通用常量、操作系统抽象层、GPIO驱动、看门狗模块和应用初始化等核心组件。
宏定义解释:设定了LED灯和按键对应的GPIO编号,以及任务堆栈大小与优先级。
static int g_ledState = 0;
作用:用于记录LED当前状态(亮或灭)。
static void gpio_callback_func(pin_t pin, uintptr_t param){ UNUSED(pin); UNUSED(param); g_ledState = !g_ledState; printf("Button pressed.\r\n");}功能描述:按键触发时执行此函数,翻转LED状态并打印日志。
static void *button_task(const char *arg){ unused(arg); uapi_pin_set_mode(BSP_LED, HAL_PIO_FUNC_GPIO); uapi_gpio_set_dir(BSP_LED, GPIO_DIRECTION_OUTPUT); uapi_gpio_set_val(BSP_LED, GPIO_LEVEL_LOW); uapi_pin_set_mode(BUTTON_GPIO, HAL_PIO_FUNC_GPIO); gpio_select_core(BUTTON_GPIO, CORES_APPS_CORE); uapi_gpio_set_dir(BUTTON_GPIO, GPIO_DIRECTION_INPUT); errcode_t ret = uapi_gpio_register_isr_func(BUTTON_GPIO, GPIO_INTERRUPT_FALLING_EDGE, gpio_callback_func); if (ret != 0) { uapi_gpio_unregister_isr_func(BUTTON_GPIO); } while (1) { uapi_watchdog_kick(); if (g_ledState) { uapi_gpio_set_val(BSP_LED, GPIO_LEVEL_HIGH); } else { uapi_gpio_set_val(BSP_LED, GPIO_LEVEL_LOW); } } return NULL;}初始化阶段:
主循环逻辑:
static void button_entry(void){ uint32_t ret; osal_task *taskid; osal_kthread_lock(); taskid = osal_kthread_create((osal_kthread_handler)button_task, NULL, "led_task", BUTTON_TASK_STACK_SIZE); ret = osal_kthread_set_priority(taskid, BUTTON_TASK_PRIO); if (ret != OSAL_SUCCESS) { printf("create task1 failed .\n"); } osal_kthread_unlock();}流程说明:
app_run(button_entry);
启动整个程序,调用button_entry函数创建按键监听任务。
由于用户反馈代码来自官方仓库,基本排除逻辑错误可能,因此下一步应聚焦于硬件资料核对。
查阅官方硬件手册发现:

原代码中设置的按键GPIO编号为12,但实际开发板按键连接的是GPIO 14!
#define BUTTON_GPIO 14 // 按键
重新编译并烧录即可正常运行!
该示例实现了经典的按键控制LED功能,结合看门狗机制提升系统稳定性,是嵌入式GPIO编程中的典型应用案例。遇到类似问题时,建议优先确认硬件引脚定义是否匹配开发板实际布局。
以上就是星闪开发之buttondemo烧录后无效果思路的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号