C#程序与单片机通信时,如何自动初始化串口(1)?
看看资讯 / 100+人浏览
注意:免费节点订阅链接已更新至 2026-10-28,点击查看详情
PC端的串口程序,首先要发现串口。而与下位机的连接方式有两种,一种是普通USART的串口,第二种是USB转成虚拟串口。下面介绍一下如何找到正确的串口。
1.发现USART串口
由于普通串口没有标识可以查询,因为必须要把所有的串口枚举出来,然后通过下位机的配合,一个一个的试,没有别的好方法。C#里有SerialPort类,其GetPortNames是静态函数,可以直接使用。列出所有串口端口的代码如下:
//列出所有串口 foreach (string n in SerialPort.GetPortNames()) { comboBox1.Items.Add(n); } //显示出第一个串口 if(comboBox1.Items.Count) { if(comboBox1.Items.Count>0) { comboBox1.Text = comboBox1.Items[0].ToString(); } } 然后对罗列的串口一个个试,看哪个是正确的。
2.USB串口
下面主要讲讲当下位机用USB虚拟串口与PC时,PC端如何自动识别下位机的串口。此时,虚拟串口是一个USB设备,其设备代码Vender ID和Product ID是可以通过电脑的设备管理器里显示出来,如果这个值在本电脑是唯一的话,我们就可以据此识别。
2.1 注册程序
为了能够让程序发现USB活动,如插、拔动作。我们必须将上位机程序注册到系统监视列表中,如下
//监视句柄 private static IntPtr notificationHandle; //监视信息定义,Windows定义的结构 [StructLayout(LayoutKind.Sequential)] private struct DevBroadcastDeviceinterface { internal int Size; internal int DeviceType; internal int Reserved; internal Guid ClassGuid; internal short Name; } 定义自己的设备注册函数,让PC程序能接收到USB事件。
//输入是PC程序的句柄 //调用此函数后,程序就能检测到USB活动 public static void RegisterUsbDeviceNotification(IntPtr windowHandle) { //只监视我们关心的信息 DevBroadcastDeviceinterface dbi = new DevBroadcastDeviceinterface { Size = Marshal.SizeOf(typeof(DevBroadcastDeviceinterface)), DeviceType = 5, Reserved = 0, //USB设备 ClassGuid = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED"), Name = 0 }; IntPtr Filter = Marshal.AllocHGlobal(dbi.Size); Marshal.StructureToPtr(dbi, Filter, true); //注册本程序,返回监视句柄 //此句柄在注销时用 notificationHandle = RegisterDeviceNotification(windowHandle, Filter, 0); Marshal.FreeHGlobal(Filter); } //真正的注册函数由系统提供 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr RegisterDeviceNotification(IntPtr recipient, IntPtr notificationFilter, int flags); 2.2 监视事件
注册程序之后,本程序就是接收到USB事件了。接下来要对相应的windows事件进行处理。在C#里,要覆盖原有的WndProc函数。可以把这部分代码放在主窗体程序中,代码如下
//处理接收到的USB事件 protected override void WndProc(ref Message m) { //运行默认的代码 base.WndProc(ref m); //自己增加的代码 if (m.Msg == HardwareEvent.WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { //拔USB case 0x8004: //在此关闭串口 Usb_DeviceRemoved(); break; //USB插入 case 0x8000: //在此打开串口 Usb_DeviceAdded(); break; } } 2.3 事件识别
长度限制,下次再发。
谢谢关注。如果你是第一次阅读,请参阅此话题的前二篇短文。
想进一步了解此话题,请继续阅读以下文章:
上两篇,
后一篇
版权声明:
作者: FreeClashNode
链接: https://www.freeclashnode.com/news/article-1544.htm
来源: www.freeclashnode.com
文章版权归作者所有,未经允许请勿转载。
免费节点实时更新
热门文章
- 10月1日免费节点分享|18M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月2日免费节点分享|22.8M/S,Singbox节点/Shadowrocket节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 10月3日免费节点分享|20.1M/S,SSR节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 9月30日免费节点分享|19.1M/S,Clash节点/V2ray节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月6日免费节点分享|19.2M/S,V2ray节点/Singbox节点/Shadowrocket节点/Clash节点|免费上网梯子每天更新
- 10月8日免费节点分享|22.5M/S,V2ray节点/Singbox节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月11日免费节点分享|18.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月5日免费节点分享|19.9M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
最新文章
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 穿越数字边界:科学上网的全面指南与深度思考
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 数字世界的破壁之旅:科学上网全指南与实用工具深度解析
- 10月26日免费节点分享|21.5M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 跨越知识边界:浙大学子的全球学术网络探索指南
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月24日免费节点分享|20.5M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 刘大猫科学上网全攻略:解锁全球网络的终极指南
- 10月23日免费节点分享|22.2M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 全面解析Quantumult安卓版:功能、安装与配置教程
- 双重防护,畅享无界:AdGuard联手V2RayNG,打造极致安全的上网体验
- 10月22日免费节点分享|18.8M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 掌握Clash白名单设置:精准控制代理流量的艺术
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 突破网络边界:技术科学上网的终极安全指南
- 10月20日免费节点分享|22.9M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- Shadowrocket 选购指南:从入门到精通,找到你的专属代理神器
- 10月19日免费节点分享|19.3M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 深入解读:V2Ray为何比SSR更安全?一场网络隐私的全方位较量
- 10月18日免费节点分享|20.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度指南:Shadowrocket从入门到精通——iOS用户的网络自由密钥
- 10月17日免费节点分享|18M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 深入解析科学上网套:全方位使用指南与常见问题解答
- 10月16日免费节点分享|22M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月15日免费节点分享|21.2M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 全局掌控:安卓设备上 Clash 全局模式完整设置指南与深度解析
- 解锁全球游戏体验:育碧平台科学上网全攻略与深度解析
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 华为Mate 10科学上网全攻略:突破限制,畅游全球网络
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 10月12日免费节点分享|22.7M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 量子ULT全方位指南:从下载配置到高阶玩法一网打尽
- 10月11日免费节点分享|18.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 极路由V2ray插件完全指南:打造家庭网络的安全屏障
- 10月10日免费节点分享|18.3M/S,V2ray节点/Singbox节点/Clash节点/SSR节点|免费上网梯子每天更新
- 极速狂飙与正义追击:《警车 Clash》深度解析与高阶攻略
- 10月9日免费节点分享|22.3M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 用hosts文件科学上网:一份从入门到实战的详细指南
- 10月8日免费节点分享|22.5M/S,V2ray节点/Singbox节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- iOS设备上SSR科学上网全教程:从入门到精通
- 10月7日免费节点分享|23M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 深度剖析V2Ray订阅机制:从零搭建高效、安全的科学上网环境
- 10月6日免费节点分享|19.2M/S,V2ray节点/Singbox节点/Shadowrocket节点/Clash节点|免费上网梯子每天更新
- 全面解析蚕蛹生态冲突及其多元价值
- 10月5日免费节点分享|19.9M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 从零开始:手把手教你刷梅林固件实现安全科学上网
- 10月4日免费节点分享|20M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 跨越边界,自由探索:一加科学上网全面指南与深度解析
- 10月3日免费节点分享|20.1M/S,SSR节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
归档
- 2026-10 54
- 2026-09 58
- 2026-08 63
- 2026-07 61
- 2026-06 55
- 2026-05 56
- 2026-04 51
- 2026-03 60
- 2026-02 52
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3