你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
河北兔

河北兔

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
1 回答

如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????

USB 接口
STMCU-管管 STMCU-管管 回答时间: 2025-3-25 18:30

1. 环境准备 硬件连接 确保ST25R3911 Discovery板通过USB正确连接到PC,并安装官方驱动(STSW-ST25R001)。 检查设备管理器中是否识别为ST25R3911-DISCO COM端口。 软件依赖 引用官方DLL(需从ST官网下载): ST25R3911DISCOComm.dll ST25R3911DISCOComm.xml(文档注释) 2. C#示例代码 初始化读写器 csharp 复制 using System; using ST25R3911DISCOComm; // 引用DLL命名空间 class NFCReader { private static ST25R3911Discovery _discoveryBoard; static void Main(string[] args) { // 1. 初始化设备 _discoveryBoard = new ST25R3911Discovery(); if (!_discoveryBoard.Connect()) { Console.WriteLine("连接ST25R3911 Discovery板失败!"); return; } // 2. 检测NFC标签 if (!_discoveryBoard.IsTagPresent()) { Console.WriteLine("未检测到NFC标签!"); _discoveryBoard.Disconnect(); return; } // 3. 读取NDEF数据 ReadNDEFMessage(); // 4. 写入NDEF数据 string newMessage = "https://www.st.com"; WriteNDEFMessage(newMessage); _discoveryBoard.Disconnect(); } } 读取NDEF消息 csharp 复制 static void ReadNDEFMessage() { try { // 获取NDEF数据 byte[] ndefData = _discoveryBoard.ReadNDEF(); if (ndefData == null || ndefData.Length == 0) { Console.WriteLine("标签中没有NDEF数据或读取失败。"); return; } // 解析NDEF记录(示例:解析URI类型) NdefRecord record = NdefParser.Parse(ndefData)[0]; // 取第一条记录 Console.WriteLine($"NDEF类型: {record.Type}"); Console.WriteLine($"NDEF内容: {Encoding.UTF8.GetString(record.Payload)}"); } catch (Exception ex) { Console.WriteLine($"读取NDEF时出错: {ex.Message}"); } } 写入NDEF消息 csharp 复制 static void WriteNDEFMessage(string uri) { try { // 创建NDEF URI记录 NdefRecord record = new NdefRecord { Type = NdefRecordType.Uri, Payload = Encoding.UTF8.GetBytes(uri) }; // 转换为NDEF字节流 byte[] ndefBytes = NdefParser.ToByteArray(new List<NdefRecord> { record }); // 写入标签 if (_discoveryBoard.WriteNDEF(ndefBytes)) { Console.WriteLine("NDEF写入成功!"); } else { Console.WriteLine("NDEF写入失败!"); } } catch (Exception ex) { Console.WriteLine($"写入NDEF时出错: {ex.Message}"); } } 3. NDEF辅助类(NdefParser.cs) csharp 复制 using System; using System.Collections.Generic; using System.Text; public class NdefRecord { public NdefRecordType Type { get; set; } public byte[] Payload { get; set; } } public enum NdefRecordType { Text = 0x01, Uri = 0x02 } public static class NdefParser { // 解析NDEF字节流为记录列表 public static List<NdefRecord> Parse(byte[] ndefData) { var records = new List<NdefRecord>(); int index = 0; while (index < ndefData.Length) { byte flags = ndefData[index++]; NdefRecordType type = (NdefRecordType)ndefData[index++]; int payloadLength = ndefData[index++]; byte[] payload = new byte[payloadLength]; Array.Copy(ndefData, index, payload, 0, payloadLength); index += payloadLength; records.Add(new NdefRecord { Type = type, Payload = payload }); } return records; } // 将NDEF记录列表转为字节流 public static byte[] ToByteArray(List<NdefRecord> records) { var bytes = new List<byte>(); foreach (var record in records) { bytes.Add(0xD1); // MB+ME+CF+SR+IL标志位 bytes.Add((byte)record.Type); bytes.Add((byte)record.Payload.Length); bytes.AddRange(record.Payload); } return bytes.ToArray(); } }

赞0
河北兔 河北兔


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16