当前位置:

首页 > 硬件相关 > 星闪buttondemo烧录无效排查思路

星闪buttondemo烧录无效排查思路

前言(若无空闲时间请直接跳转至文末查看结论)此前我撰写了几篇有关星闪技术的入门文章,最近收到几位读者私信反馈——烧录buttondemo后毫无反应。本文旨在解决这一常见问题(本文适合新手阅读,若赶时间可直接滑至最后看解决方案)。相关基础教程请参考:星闪开发入门级教程之安装编译器与小项目烧录###一、常规排查思路在过往从事前后端开发及自然语言处理项目时,遇到异常通常会从以下四个方面入手:代码逻辑是否存在漏洞配置项是否正确查阅官方API文档研读第三方库或系统源码(如Android平台)二、配

前言(若无空闲时间请直接跳转至文末查看结论)

此前我撰写了几篇有关星闪技术的入门文章,最近收到几位读者私信反馈——烧录buttondemo后毫无反应。本文旨在解决这一常见问题(本文适合新手阅读,若赶时间可直接滑至最后看解决方案)。

相关基础教程请参考:星闪开发入门级教程之安装编译器与小项目烧录

星闪开发之buttondemo烧录后无效果思路### 一、常规排查思路

在过往从事前后端开发及自然语言处理项目时,遇到异常通常会从以下四个方面入手:

  • 代码逻辑是否存在漏洞
  • 配置项是否正确
  • 查阅官方API文档
  • 研读第三方库或系统源码(如Android平台)

二、配置流程说明

将Demo代码放入peripheral目录下之后,需完成以下两步配置:

1. 修改 peripheral 目录下的 Kconfig 文件,新增如下内容:

config SAMPLE_SUPPORT_BUTTONDEMO    bool    prompt "Support BUTTONDEMO Sample."    default n    depends on ENABLE_PERIPHERAL_SAMPLE    help        This option means support BUTTONDEMO Sample.

2. 在 peripheral 目录下的 CMakeLists.txt 文件中添加如下语句:

if(DEFINED CONFIG_SAMPLE_SUPPORT_BUTTONDEMO)    add_subdirectory_if_exist(buttondemo)endif()

三、代码简要分析

1. 头文件引入与宏定义部分

#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编号,以及任务堆栈大小与优先级。

2. 全局变量声明

static int g_ledState = 0;

作用:用于记录LED当前状态(亮或灭)。

3. 按键中断回调函数

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状态并打印日志。

4. 主任务函数实现

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;}

初始化阶段:

  • 设置LED为输出模式,默认关闭;
  • 设置按键为输入模式,并指定由应用核心处理中断;
  • 注册中断回调函数,采用下降沿触发方式。

主循环逻辑:

  • 定期喂狗防止系统复位;
  • 根据全局变量 g_ledState 控制LED亮灭状态。

5. 创建任务线程函数

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();}

流程说明:

  • 锁定内核以确保线程安全;
  • 创建名为“led_task”的线程;
  • 设置优先级;
  • 解锁后允许调度执行。

6. 应用程序入口点

app_run(button_entry);

启动整个程序,调用button_entry函数创建按键监听任务。

7. 整体运行流程总结

  • 系统通过app_run启动;
  • button_entry创建任务线程;
  • 线程中完成硬件初始化与中断注册;
  • 按键按下时触发中断回调,改变LED状态;
  • 主循环持续更新LED输出并喂狗保活。

由于用户反馈代码来自官方仓库,基本排除逻辑错误可能,因此下一步应聚焦于硬件资料核对。

四、最终解决方案

查阅官方硬件手册发现:

星闪开发之buttondemo烧录后无效果思路
原代码中设置的按键GPIO编号为12,但实际开发板按键连接的是GPIO 14!

修改宏定义如下:

#define BUTTON_GPIO 14 // 按键

重新编译并烧录即可正常运行!

总结

该示例实现了经典的按键控制LED功能,结合看门狗机制提升系统稳定性,是嵌入式GPIO编程中的典型应用案例。遇到类似问题时,建议优先确认硬件引脚定义是否匹配开发板实际布局。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
硬件相关
相关文章 更多
显示器色温怎么调不刺眼?色温调多少看着最舒服
显示器色温怎么调不刺眼?色温调多少看着最舒服

详解显示器色温的舒适调节区间、刺眼的核心诱因,以及在不同使用场景与环境光下的具体调节步骤与校准方法。

显卡风扇不转怎么回事判断是否正常及解决方法
显卡风扇不转怎么回事判断是否正常及解决方法

发现显卡风扇不转先别慌,这很可能是正常的智能启停功能。本文详解如何区分待机静音与硬件故障,提供从软件检测到物理清理的完整解决思路。

笔记本加内存条后无法开机怎么办及解决方法
笔记本加内存条后无法开机怎么办及解决方法

笔记本加装新内存后遇到黑屏或无法开机?不要慌张,本文通过重新插拔、清洁金手指、单根测试等具体操作步骤,帮你快速判断是安装失误还是硬件不兼容,并给出相应解决办法。

电脑主机前置usb不能用怎么解决排查修复教程
电脑主机前置usb不能用怎么解决排查修复教程

针对电脑主机前置USB接口无法识别设备的问题,本文提供一套基于因果逻辑的排查流程。涵盖检查机箱内部USB针脚连接、验证BIOS中USB控制器状态、更新芯片组驱动以及排除供电不足等常见原因,帮助用户快速恢复接口功能。

无线鼠标充不进电解决办法及故障排查步骤
无线鼠标充不进电解决办法及故障排查步骤

遇到无线鼠标充不进电的问题,不要急于更换设备。本文详解从清理接口氧化层、更换数据线到检测电池电压的完整排查流程,帮助你判断是临时故障还是硬件损坏。

蓝牙游戏手柄连接教程吃鸡
蓝牙游戏手柄连接教程吃鸡

想知道如何用蓝牙手柄玩吃鸡游戏?本文详细讲解手机蓝牙手柄的连接步骤、主流映射软件的使用方法以及实战中的键位布局技巧,助你提升射击手感,同时解析外设玩家的匹配机制与注意事项。

游戏手柄蓝牙连接为何每次都要重连原因排查与解决方法
游戏手柄蓝牙连接为何每次都要重连原因排查与解决方法

本文深入分析游戏手柄蓝牙频繁断开且需重连的根本原因,涵盖电池电压检测、操作系统电源管理策略及驱动冲突。通过具体的系统设置调整和固件更新步骤,解决蓝牙握手失败问题,恢复手柄的稳定连接状态。

显示器画面模糊抖动怎么解决及排查方法教程
显示器画面模糊抖动怎么解决及排查方法教程

遇到显示器画面模糊或抖动时,可通过检查视频连接线、调整系统分辨率与刷新率、更新显卡驱动等步骤进行排查和修复。

小米智能门锁换电池后怎么开机
小米智能门锁换电池后怎么开机

小米智能门锁更换新电池后无法开机或屏幕不亮?本文详解电池极性检查、金属触点清洁及强制重启方法,帮你快速解决供电问题,让门锁恢复正常使用。

电视机声音怎么连接到外置音响
电视机声音怎么连接到外置音响

想让电视声音更震撼?本文详解如何通过HDMI ARC、光纤、蓝牙和3.5mm接口将电视连接至外置音响,包含具体设置步骤与常见问题排查,助你轻松打造家庭影院。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
WPS Office macOS版
WPS Office macOS版
macOS

WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,

Shapr3D macOS版
Shapr3D macOS版
Mac

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

REAPER macOS版
REAPER macOS版
Mac

REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

WINDOWS 更多
Adobe Photoshop Windows版
Adobe Photoshop Windows版
Windows

Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许

Adobe InDesign Windows版
Adobe InDesign Windows版
Windows

Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator

Adobe Illustrator Windows版
Adobe Illustrator Windows版
Windows

Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。