You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M5StickCPlus是否有专属入门指南?访问LED报NullReferenceException求解

问题
  • 是否存在针对M5StickCPlus的专属nanoFramework入门指南?尝试适配示例仓库中的Blinky示例时,试了多种代码写法都无法正常访问板载LED,运行时固定抛出如下空引用异常:
++++ Exception System.NullReferenceException - CLR_E_NULL_REFERENCE (8) ++++
++++ Message: 
++++ nanoFramework.M5Stack.M5StickCPlus::get_Led [IP: 000e] ++++
++++ Exception System.NullReferenceException - CLR_E_NULL_REFERENCE (9) ++++
++++ Message: 
++++ nanoFramework.M5Stack.M5StickCPlus::get_Led [IP: 000e] ++++

尝试过的两种无效写法如下:
第一种写法:

public class Program
{ 
    public static void Main()
    {
        M5StickCPlus.Led.Write(PinValue.Low);
    }
}

第二种写法:

public class Program
{ 
    private static GpioController gpio = new GpioController();
    public static void Main()
    {
        gpio.OpenPin(M5StickCPlus.Led.PinNumber);
        M5StickCPlus.Led.Write(PinValue.Low);
    }
}
解决方案

触发空引用的核心原因是访问Led属性前没有执行板载资源初始化。M5StickCPlus类的所有板载外设对象(包括LED、屏幕、按键、扩展接口等)都需要先调用初始化方法完成实例化,直接访问属性拿到的是空值,必然抛出空引用异常。
正确操作流程:

  • 先确认项目已安装nanoFramework.M5Stack NuGet包,且包版本和设备刷入的nanoFramework固件版本完全匹配,版本不匹配会触发各类外设访问异常。
  • 在Main方法的第一行调用M5StickCPlus.Initialize()完成板载资源初始化,初始化完成后再操作LED等外设。
    可正常运行的Blinky示例代码:
using System.Device.Gpio;
using System.Threading;
using nanoFramework.M5Stack;

public class Program
{
    public static void Main()
    {
        // 必须优先执行初始化,否则所有外设属性均为空引用
        M5StickCPlus.Initialize();
        
        while (true)
        {
            M5StickCPlus.Led.Write(PinValue.Low);  // 板载LED点亮(低电平触发)
            Thread.Sleep(500);
            M5StickCPlus.Led.Write(PinValue.High); // 板载LED熄灭
            Thread.Sleep(500);
        }
    }
}

注意:不需要手动创建GpioController实例,也不需要手动调用OpenPin打开LED引脚。Initialize方法内部已经完成GPIO控制器初始化、引脚占用和功能配置,重复手动操作引脚反而会触发引脚占用冲突。M5StickCPlus板载LED为低电平点亮,和部分通用开发板的高电平点亮逻辑相反,测试时注意电平对应状态。

内容的提问来源于stack exchange,提问作者Gonkers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:42:31