串口编程中的流控制

洋葱onion 2017-01-03 12:56:22
一般在工业上,为了数据不发生丢失,一般采用硬件流和软件流控制?
硬件流:在DB9的接口上,除了TX,RX,GND,还需要用到:DTR/DSR方式和RTS/CTS方式。在实现时,是不是这两个信号用一般的GPIO来控制?再结合软件来实现?我有一个疑问:我们一般用的串口通信只用了TX,RX,GND一样通信,为什么用这两个多余的信号?我也没看见说只用三个信号线有数据丢失多严重的现象?
软件流怎么用?求大神指教啊
...全文
688 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
uid123 2017-01-04
  • 打赏
  • 举报
回复
影响带宽,一根线传一个固定长度的信号假定需要10S,用2个可以缩短到5s。
of123 2017-01-04
  • 打赏
  • 举报
回复
引用 16 楼 u013816798 的回复:
[quote=引用 13 楼 of123 的回复:] [quote=引用 10 楼 u013816798 的回复:] [quote=引用 9 楼 sprawling 的回复:] 流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
那DB9上的这几个接口DTR/DSR方式和RTS/CTS其实在使用时也是用一般的GPIO来控制,在实际编程中也是if判定?还是说UART控制器自己有一套自己的硬件机制来实现这个协议?[/quote] 如果你的单片机 UART 模块支持全双工,那么 DTR/DSR 就不需要。一般来说,PC 端不需要接收时流控制,RTC 也不必使用。这样将剩下了 CTS(表示相当于 Modem 的外设可接收),可用来表示 MCU 忙(注意,信号无效为忙)。此情况下,单片机是 CTS 信号的发送方,它不需要对此信号进行判断。在 PC 端,这个信号需要应用软件去处理。[/quote] 现在的单片机大部分都是全双工,为什么全双工就不要DTR/DSR,硬件流控制信号是发送方和接收方之间通信时的一路信号,全双工怎么就不需要使用这些信号了?拜谢,还望多多指教 [/quote]在全双工通讯状态下这两个信号始终有效。
schlafenhamster 2017-01-04
  • 打赏
  • 举报
回复
大概 当 接受缓冲区空间《 原 1/4 时 ,接受方 发 xoff 给 发送方。发送方 接受到 xoff 后,会 停止发送,直到接受到 xon
schlafenhamster 2017-01-04
  • 打赏
  • 举报
回复
"XON 和 XOFF 都是接收方发送的,因此不存在从数据流中识别控制字的问题。" 双方 都可以 是 接收方 ! 所谓 文本方式就是可见字符方式 (即 ascii 中 可打印的 字符),所以 文本方式中不会出现 《 0x20 ‘’空格" 的 acsii 码。
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 13 楼 of123 的回复:
[quote=引用 10 楼 u013816798 的回复:] [quote=引用 9 楼 sprawling 的回复:] 流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
那DB9上的这几个接口DTR/DSR方式和RTS/CTS其实在使用时也是用一般的GPIO来控制,在实际编程中也是if判定?还是说UART控制器自己有一套自己的硬件机制来实现这个协议?[/quote] 如果你的单片机 UART 模块支持全双工,那么 DTR/DSR 就不需要。一般来说,PC 端不需要接收时流控制,RTC 也不必使用。这样将剩下了 CTS(表示相当于 Modem 的外设可接收),可用来表示 MCU 忙(注意,信号无效为忙)。此情况下,单片机是 CTS 信号的发送方,它不需要对此信号进行判断。在 PC 端,这个信号需要应用软件去处理。[/quote] 现在的单片机大部分都是全双工,为什么全双工就不要DTR/DSR,硬件流控制信号是发送方和接收方之间通信时的一路信号,全双工怎么就不需要使用这些信号了?拜谢,还望多多指教
of123 2017-01-04
  • 打赏
  • 举报
回复
引用 10 楼 u013816798 的回复:
[quote=引用 9 楼 sprawling 的回复:] 流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
那DB9上的这几个接口DTR/DSR方式和RTS/CTS其实在使用时也是用一般的GPIO来控制,在实际编程中也是if判定?还是说UART控制器自己有一套自己的硬件机制来实现这个协议?[/quote] 如果你的单片机 UART 模块支持全双工,那么 DTR/DSR 就不需要。一般来说,PC 端不需要接收时流控制,RTC 也不必使用。这样将剩下了 CTS(表示相当于 Modem 的外设可接收),可用来表示 MCU 忙(注意,信号无效为忙)。此情况下,单片机是 CTS 信号的发送方,它不需要对此信号进行判断。在 PC 端,这个信号需要应用软件去处理。
引用 12 楼 schlafenhamster 的回复:
其中XON采用ASCII字符集中的控制字符DC1(0x11),XOFF采用ASCII字符集中的控制字符DC3(0x13) 软件每接受到一个 字符 必须检查是不是 控制字符DC, 因而 只能 用于 字符(文本)通讯,因为 二进制 通讯 区分不了 DC (0x11,0x13)
XON 和 XOFF 都是接收方发送的,因此不存在从数据流中识别控制字的问题。 比如,你的单片机接收 PC 发送的数据,当你需要暂停时,就发送 XOFF;可以重新开始时,再发送 XON。 在 PC 端,XON/XOFF 是用户不可见的。假设你在 PC 端使用 WriteFile() API 发送数据,当驱动层接收到 XOFF 时,如果你使用的是 overlap 方式,WriteFile() 会返回 FAILE。如果你用 GetLastError() 提取错误,将得到 ERROR_IO_PENDING。如果你使用的是非 overlap 方式,程序会在 WriteFile() 处停下来, 等待发送成功(如果未超时)。
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 12 楼 schlafenhamster 的回复:
其中XON采用ASCII字符集中的控制字符DC1(0x11),XOFF采用ASCII字符集中的控制字符DC3(0x13) 软件每接受到一个 字符 必须检查是不是 控制字符DC, 因而 只能 用于 字符(文本)通讯,因为 二进制 通讯 区分不了 DC (0x11,0x13)
您好,书我学艺不精,事实上,字符通信在实现上不也是以二进制的形式进行的吗?您这里说的文本通信能否举个例子?
of123 2017-01-04
  • 打赏
  • 举报
回复
引用 10 楼 u013816798 的回复:
[quote=引用 9 楼 sprawling 的回复:] 流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
那DB9上的这几个接口DTR/DSR方式和RTS/CTS其实在使用时也是用一般的GPIO来控制,在实际编程中也是if判定?还是说UART控制器自己有一套自己的硬件机制来实现这个协议?[/quote] 如果你的单片机 UART 模块支持全双工,那么 DTR/DSR 就不需要。一般来说,PC 端不需要接收时流控制,RTC 也不必使用。这样将剩下了 CTS(表示相当于 Modem 的外设可接收),可用来表示 MCU 忙(注意,信号无效为忙)。此情况下,单片机是 CTS 信号的发送方,它不需要对此信号进行判断。在 PC 端,这个信号需要应用软件去处理。
schlafenhamster 2017-01-04
  • 打赏
  • 举报
回复
其中XON采用ASCII字符集中的控制字符DC1(0x11),XOFF采用ASCII字符集中的控制字符DC3(0x13) 软件每接受到一个 字符 必须检查是不是 控制字符DC, 因而 只能 用于 字符(文本)通讯,因为 二进制 通讯 区分不了 DC (0x11,0x13)
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 9 楼 sprawling 的回复:
流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
我是看见软件流控制中规定了0x11和0x13作为数据头和数据尾,难道这两个参数是固化的,由硬件自己来完成if判定过程?
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 9 楼 sprawling 的回复:
流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
那DB9上的这几个接口DTR/DSR方式和RTS/CTS其实在使用时也是用一般的GPIO来控制,在实际编程中也是if判定?还是说UART控制器自己有一套自己的硬件机制来实现这个协议?
sprawling 2017-01-04
  • 打赏
  • 举报
回复
流控制的目的就是告訴通信的對方什麼時候喂數據,什麼時候自己飽了.
sprawling 2017-01-04
  • 打赏
  • 举报
回复
引用 7 楼 u013816798 的回复:
[quote=引用 2 楼 sprawling 的回复:] 樓主可以試試以1Mbps的速度向51發送1M的數據,採用單向發送,如果沒有流控制,看你如何完整接下所以數據
51·的内存极小,1M的数据肯定是来不及处理;如果我用计算机给ARM-A9这样的处理器发送数据,1M的数据感觉毫无压力。所以根据您的说法:流控一般用于接收方缓存区过小或者接收方数据处理速度小于发送方发送速度的情况?我其实想用串口发送一幅图片,大小也就几十K,不用实时。想用软件流控制标定数据头和数据尾,这样看的话,高速设备之间的通信完全没必要用流控制。但是在百度里看,又说流控是为了不让数据发生丢失现象,感觉这种说法片面,应该说:在高速设备和低速设备之间通信时,使用流控可以有效避免数据丢失[/quote] 就像一個人喝一個水缸的水肯定是沒有問題的,問題在於你採用什麼方式去喝
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 2 楼 sprawling 的回复:
樓主可以試試以1Mbps的速度向51發送1M的數據,採用單向發送,如果沒有流控制,看你如何完整接下所以數據
51·的内存极小,1M的数据肯定是来不及处理;如果我用计算机给ARM-A9这样的处理器发送数据,1M的数据感觉毫无压力。所以根据您的说法:流控一般用于接收方缓存区过小或者接收方数据处理速度小于发送方发送速度的情况?我其实想用串口发送一幅图片,大小也就几十K,不用实时。想用软件流控制标定数据头和数据尾,这样看的话,高速设备之间的通信完全没必要用流控制。但是在百度里看,又说流控是为了不让数据发生丢失现象,感觉这种说法片面,应该说:在高速设备和低速设备之间通信时,使用流控可以有效避免数据丢失
洋葱onion 2017-01-04
  • 打赏
  • 举报
回复
引用 2 楼 sprawling 的回复:
樓主可以試試以1Mbps的速度向51發送1M的數據,採用單向發送,如果沒有流控制,看你如何完整接下所以數據
那硬件流控制也是使用普通的GPIO来实现,只不过得在程序里加点判定条件是吧?
schlafenhamster 2017-01-04
  • 打赏
  • 举报
回复
DTR/DSR 数据终端就绪/数据设备就绪。 与 RTS/CTS 请求发送(Request to Send)/ 清除发送(Clear to Send) 是 2对 信号 , 只要用一对 就可以。
schlafenhamster 2017-01-03
  • 打赏
  • 举报
回复
“带流控制的串口通讯程序.rar ” http://download.csdn.net/detail/schlafenhamster/4195462 这个是 硬件 流控制。 软件流控制 就是发 xoff 和 xon (0x11 和 0x14 记不清了)
C_Rabbit 2017-01-03
  • 打赏
  • 举报
回复
现在确实这个用的很少了
sprawling 2017-01-03
  • 打赏
  • 举报
回复
樓主可以試試以1Mbps的速度向51發送1M的數據,採用單向發送,如果沒有流控制,看你如何完整接下所以數據
of123 2017-01-03
  • 打赏
  • 举报
回复
是“软件”“流控制”和“硬件”“流控制”。 如果你的接收端是 PC,且数据处理的过程很快,一般就不需要流控制。因为 RS-232 是极低速通讯,设置好缓存大小,一般不会出现数据丢失的情况。
里面讲了MSComm控件 、 WinAPI 串口通信、CSerial类,例子很详实,每一步操作都有解释。作者是龚建伟,有一个个人主页www.gjwtech.com,讲串口通信的内容比较多,还行,大家可以先看看这个主页。 本书目录 第1章轻松体验串口通信编程与调试 1.1初识串口 1.1.1从外观上了解串口 1.1.2 串口通信的发展前景 1.2 自己制作简单的串口线 1.2.1 三线制串口接线的规定 1.2.2 焊接制作自己的串口连接线 1.3 调试串口通信程序时的几种使用串口的技巧 1.3.1 查看计算机串口资源 1.3.2 常规调试-2个物理串口之间的通信 1.3.3 特殊调试-单个物理串口之间的通信 1.3.4 虚拟串口-为计算机添加取之不尽的串口资源 1.4 使用串口调试助手来体验串口通信 1.5体验Windows环境下Visual C++串口通信编程 1.6体验DOS环境下Turbo C串口通信编程 第2章 VC多线程串口编程工具CSerialPort类 2.1 类功能及成员函数介绍 2.2 应用CSerialPort类编制基于对话框的应用程序 2.3 应用CSerialPort类编制基于单文档的应用程序 2.4对CSerialPort类的改进 2.5 在Visual C++.NET应用CSerialPort类 第3章 控件MSComm串口编程 3.1 MSComm控件详细介绍 3.1.1 VC应用MSComm控件编程步骤 3.1.2 MSComm控件串行通信处理方式 3.1.3 MSComm 控件的属性说明 3.1.4 MSComm控件错误信息 3.2使用MSComm控件的几个疑难问题 3.2.1使用VARIANT 和SAFEARRAY 数据类型从串口读写数据 3.2.2 MSComm控件能离开对话框独立存在吗? 3.2.3 如何发送接收ASCII值为0和大于128的字符? 3.2.4 在同一程序用MSComm控件控制多个串口的具体操作方法 3.2.5解决使用控件编程时程序占用的内存会不断增大的问题 3.2.6在没有安装Visual Studio的计算机上如何使用MSComm控件 3.2.7 在MSComm控件串口编程时遇到的其它问题说明 3.3在基于单文档(SDI)程序应用MSComm控件 3.4应用MSComm控件控制多个串口实例 第4章 Windows API串口编程 4.1 Windows API串口编程概述 4.2 API串口编程用到的结构及相关概念说明 4.2.1 DCB(Device Control Block)结构 4.2.2超时设置COMMTIMEOUTS结构 4.2.3 OVERLAPPED异步I/O重叠结构 4.2.4 通信错误与通信设备状态 4.2.5 串行通信事件 4.3 Windows API串行通信函数 4.4 Win32 API串口通信编程的一般流程和特殊实例 4.4.1 Win32 API串口通信编程的一般流程 4.4.2 用查询方式读串口 4.4.3同步I/O读写数据 4.4.4 关于流控制的设置问题 4.5 CSerialPort类的API函数编程应用剖析 4.6 Win32 API串口编程TTY(虚拟终端)实例 4.7 Windows API串口精简例程 第5章 串口调试助手V2.2详细编程 5.1 建立SCOMM程序工程实现界面功能 5.2 串口的初始化及关闭 5.3串口数据的发送与接收及十六进制数据的处理 5.3.1 十六进数据发送处理 5.3.2 手动发送处理 5.3.3自动发送处理 5.3.4 接收处理及十六进制显示 5.4 其它辅助功能的实现 5.4.1 接收数据的文件保存 5.4.2 实现小文件发送 5.4.3 图钉按钮功能使程序能浮在最上层 5.4.4 对话框动画图标的实现 5.4.5 超链接功能的实现 5.4.6 如何打开帮助网页文件 第6章 DOS环境下的Turbo C串口编程及通用实例GSerial类 6.1 PC机异步通信适配器8250及其编程操作 6.1.1 INS8250内部寄存器及其选择方式 6.1.2 波特率设置 6.1.3数据位、奇偶校验、停止位等数据格式设置 6.1.4 查询I/O方式相关设置 6.1.5 断I/O通信方式相关设置 6.1.6 Modem寄存器 6.2 COMRXTX程序实例
Visual C++/Turbo C串口通信编程实践及源代码 第1章 轻松体验串口通信编程与调试 1 1.1 使用串口调试助手来体验串口通信 1 1.2 体验windows环境下的visual c++串口通信编程 4 1.3 体验dos环境下turbo c串口通信编程 12 第2章 多线程串口编程工具cserialport类 16 2.1 cserialport类的功能及成员函数介绍 16 2.2 应用cserialport类编制基于对话框的应用程序 30 2.3 应用cserialport类编制基于单文档的应用程序 35 2.4 对cserialport类的改进 40 2.4.1 改进一:ascii文本和二进制数据发送方式兼容 40 2.4.2 改进二:也许能解决内存泄漏 43 2.4.3 改进三:彻底关闭串口,释放串口资源 44 第3章 控件mscomm串口编程 46 3.1 mscomm控件介绍 46 3.1.1 vc应用mscomm控件编程步骤 46 3.1.2 mscomm控件串行通信处理方式 47 3.1.3 mscomm 控件的属性说明 48 3.1.4 mscomm控件错误信息 55 3.2 使用mscomm控件的几个疑难问题 56 3.2.1 使用variant 和safearray 数据类型从串口读写数据 56 .3.2.2 mscomm控件能离开对话框独立存在吗 59 3.2.3 如何发送接收ascii值为0和大于128的字符 60 3.2.4 在同一程序用mscomm控件控制多个串口的具体操作方法 62 3.2.5 解决使用控件编程时程序占用的内存会不断增大的问题 62 3.2.6 在mscomm控件串口编程时遇到的其他问题 63 3.3 在基于单文档(sdi)程序应用mscomm控件 63 3.4 应用mscomm控件控制多个串口实例 69 3.5 串口与modem拨号应用简例 76 3.5.1 创建工程 76 3.5.2 代码分析 78 3.5.3 应用 85 第4章 windows api串口编程 87 4.1 windows api串口编程概述 87 4.2 api串口编程用到的结构及相关概念说明 89 4.2.1 dcb(device control block)结构 89 4.2.2 超时设置commtimeouts结构 92 4.2.3 overlapped异步i/o重叠结构 94 4.2.4 通信错误与通信设备状态 95 4.2.5 串行通信事件 96 4.3 windows api串行通信函数 97 4.4 win32 api串口通信编程的一般流程和特殊实例 116 4.4.1 win32 api串口通信编程的一般流程 116 4.4.2 用查询方式读串口 116 4.4.3 同步i/o读写数据 117 4.4.4 关于流控制的设置问题 118 4.5 cserialport类的api函数编程应用剖析 119 4.6 win32 api串口编程tty(虚拟终端)实例 128 4.6.1 建立程序工程 128 4.6.2 建立串口设置对话框 129 4.6.3 编写ctermdoc类的相关代码 132 4.6.4 小结 141 4.6.5 在ctermview类字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收及十六进制数据的处理 151 5.3.1 十六进数据发送处理 152 5.3.2 手动发送处理 152 5.3.3 自动发送处理 153 5.3.4 接收处理及十六进制显示 154 5.4 其他辅助功能的实现 156 5.4.1 接收数据的文件保存 156 5.4.2 实现小文件发送 158 5.4.3 图钉按钮功能使程序能浮在最上层 161 5.4.4 对话框动画图标的实现 162 5.4.5 超链接功能的实现 164 5.4.6 如何打开帮助网页文件 164 第6章 dos环境下的turbo c串口编程及通用实例gserial类 168 6.1 pc机异步通信适配器8250及其编程操作 169 6.1.1 ins8250内部寄存器及其选择方式 169 6.1.2 波特率设置 169 6.1.3 数据位、奇偶校验、停止位等数据格式设置 170 6.1.4 查询i/o方式相关设置 171 6.1.5 断i/o通信方式相关设置 171 6.1.6 modem寄存器 172 6.2 comrxtx程序实例 173 6.3 通用实例程序gserial类 175 6.4 用gserial类控制多串口 186 6.5 多串口编程pc机高号断8259a可编程断控制器的控制 195 第7章 串口通信用户层协议的编制与数据处理方法 197 7.1 通信协议的编制 197 7.1.1 为什么要编制用户通信协议 197 7.1.2 串口通信用户层协议编制原则 199 7.1.3 在串口通信几种常用的用户层协议 200 7.2 串口通信数据包处理方法编程实例 202 7.2.1 编程任务 203 7.2.2 编程步骤 203 7.2.3 程序测试 216 第8章 单片机串口通信 218 8.1 单片机串口硬件系统及c51程序开发 218 8.1.1 较典型的单片机硬件系统实例 218 8.1.2 c51语言及程序简介 220 8.1.3 开发c51程序的利器keil c51 uvision2及串口程序仿真 221 8.2 c51单片机串口通信程序实例 226 8.2.1 实例一 226 8.2.2 实例二 227 第9章 串口与网络结合的解决方案及编程 230 9.1 串口与网络结合的硬件解决方案 230 9.2典型串口与联网的设备 231 9.2.1 nport5400系列产品的特点 231 9.2.2 nport 5400系列产品的典型应用介绍 233 9.2.3 nport5400系列产品的设置与编程测试 235 9.3 与access数据库结合的串口通信实例 237 9.3.1 微机网络检测系统说明 237 9.3.2 创建odbc数据源 238 9.3.3 创建工程 239 9.3.4 程序简介 244 9.4 与winsock结合的串口通信实例 246 9.4.1 客户端应用程序 247 9.4.2 服务器应用程序 252 9.5 在已经编好的串口通信程序加入网络通信功能 260 9.5.1参照mfc appwizard创建winsockets程序 261 9.5.2 利用windows sockets api和第三方提供的类进行编程 262 9.6 串口通信用于遥控操作简例 262 第10章 计算机串口与其他设备通信编程实例 266 10.1通过串口收发短消息 266 10.1.1 sms编码规范及编码与解码例程 266 10.1.2 at命令收发短消息实例 273 10.1.3 "实时"接收短消息的方法 281 10.1.4 用串口收发sms短信编程的一些讨论 283 10.2 计算机与rabbit 2000嵌入式系统通信编程实例 286 10.2.1 rabbit 2000微处理器介绍 286 10.2.2 动态c(dynamic c)语言介绍 287 10.2.3 某车载无线调度系统实例介绍 288 10.3 计算机与plc通信程序实例 294 10.4 matlab环境串口编程通信实例 295 10.4.1 matlab串口类serial应用 295 10.4.2 通过串口使matlab simulink与下位机通讯进行控制 299 10.4.3 xpc目标环境下串口通信实现 299 第11章 串口通信基本概念及标准 302 11.1 串口通信基本概念 302 11.1.1 串行通信概述 302 11.1.2 单工、半双工和全双工的定义 305 11.1.3 同步传送与异步传送 306 11.1.4 串行通信协议 306 11.2 rs-232-c串口标准 309 11.2.1 rs-232-c标准 309 11.2.2 rs-232-c串行通信接线实例 312 11.3 rs-422/485串口标准 314 11.3.1 概述 314 11.3.2 rs-422与rs-485串行接口标准 315 11.3.3 rs-422与rs-485的网络安装注意要点 317 11.3.4 rs-232、rs422、rs485电气参数对比 318 11.4 串口调试注意事项 318 11.5 常用数据校验法 318 11.5.1 奇偶校验 318 11.5.2 循环冗余码校验 319 11.6 串口连接和tcp/ip连接对比 320 11.7 现场总线与rs-232、rs-485的本质区别 320 11.8 modem通信技术 320 11.8.1 modem的基本工作原理 320 11.8.2 modem的功能 322 11.8.3 modem的分类 322 11.8.4 modem的安装 324 11.8.5 modem v.92标准介绍 326 11.8.6 modem的速度 327 11.8.7 modem优化方法 328 11.8.8 modem命令/at命令 329 第12章 不占用串口串口数据捕捉 338 12.1 驱动程序的基本概念:vxd与wdm 338 12.1.1 虚拟设备驱动程序vxd 338 12.1.2 win32驱动程序模型wdm 340 12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd的commhook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录a turbo c说明 366 附录b ascii码表 376

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧