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
相关产品推荐
相关产品推荐

