尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

基于Ch554单片机的USB双向协议桥接器设计与实现

基于Ch554单片机的USB双向协议桥接器设计与实现
📅 发布时间:2026/7/28 10:16:15

1. 项目概述:从“转接”到“桥接”的思维跃迁

“基于 Ch554 实现 USB 转 USB 设备”,这个标题乍一看有点绕,甚至可能让人产生疑问:USB 口本身不就是用来连接设备的吗,为什么还需要一个设备在中间“转”?这恰恰是这个项目的精妙之处。它不是一个简单的 USB 转串口线,也不是一个 USB HUB(集线器)。它的核心目标,是实现两个独立的 USB 设备之间的协议转换与数据桥接。你可以把它想象成一个精通两国语言的翻译官,站在两个只能讲各自母语的人中间,让他们能够流畅地对话。

Ch554 是沁恒微电子推出的一款高性价比、增强型的 8051 内核 USB 单片机。它内置了全速 USB 主机(Host)控制器和设备(Device)控制器,这意味着单颗芯片就能同时扮演“电脑”和“外设”两种角色。我们这个项目的本质,就是利用 Ch554 这颗芯片,构建一个双向的 USB 协议转换桥。一端作为 USB Host,去识别、连接并控制一个 USB 设备(比如 U 盘、USB 键盘、特定的 USB 传感器);另一端作为 USB Device,模拟成另一个 USB 设备(比如虚拟串口、HID 键盘、大容量存储设备),连接到电脑或另一台主机上。这样,原本无法直接通信的两个 USB 设备,通过 Ch554 这个“中间人”,就能实现数据的交换和功能的传递。

这个项目适合谁呢?首先是嵌入式开发者,尤其是那些需要为现有产品增加 USB 主机功能,或者需要实现特殊 USB 设备互联的工程师。其次是电子爱好者,想要深入理解 USB 协议栈的双向工作流程,亲手搭建一个比单纯点灯复杂得多的系统。最后,它也可能是一些特定应用场景的解决方案雏形,比如将老式的 USB 设备接入新型主机,或者为系统增加一个透明的数据记录、过滤通道。

2. 核心方案设计与芯片选型考量

2.1 为什么是 Ch554?—— 双角色 USB 控制器的优势

在嵌入式领域,要实现 USB 功能,常见的方案有几种:使用带 USB Device 功能的 MCU(如 STM32F103、CH552),外挂 USB Host 芯片(如 SL811HS、CH375),或者使用集成了 USB OTG(On-The-Go)功能的 MCU(如某些 STM32F4 系列)。Ch554 在这个项目中脱颖而出,关键就在于其单芯片集成了独立的 USB Host 和 USB Device 控制器。

从成本角度看,省去了一颗外置 Host 芯片及其周边电路,PCB 面积和 BOM 成本都得到优化。从复杂度看,所有的 USB 协议处理都在同一颗 MCU 内完成,数据交换可以通过内部存储器或 FIFO 直接进行,延时更低,软件架构也更简洁。从功能灵活性看,开发者可以完全掌控 Host 端和设备端的协议实现,可以定制枚举过程、数据格式和传输逻辑,这是使用现成桥接芯片(如某些专用的 USB 转接芯片)所无法比拟的。

Ch554 的 8051 内核虽然性能不算顶尖,但其主频最高可达 24MHz,并且针对 USB 操作有专门的硬件加速和缓冲区,处理全速 USB(12Mbps)的数据流绰绰有余。其内置的 16KB Flash 和 1KB+256B RAM,也足以运行一个双角色的 USB 协议栈。

2.2 系统架构与数据流设计

整个系统的核心架构是“Host-Device 桥”。我们需要在 Ch554 内部运行两套逻辑:一套是 USB Host 协议栈,负责管理下游端口(连接外部 USB 设备);另一套是 USB Device 协议栈,负责响应上游端口(连接电脑等主机)。

数据流的设计是关键。假设我们的目标是实现一个“USB 串口设备转虚拟串口”的桥接器:

  1. 下行方向(Host 侧):Ch554 的 Host 控制器识别到一个真实的 USB 转串口芯片(如 CH340、CP2102),并为其加载对应的驱动程序(在 Ch554 内实现)。然后,Ch554 通过 Host 控制器向该串口芯片发送和接收数据,就像电脑在操作一个串口一样。
  2. 上行方向(Device 侧):Ch554 的 Device 控制器将自己枚举为一个新的“USB 转串口设备”(例如,使用 CDC/ACM 协议)。当电脑(上位机)向这个虚拟串口发送数据时,Ch554 的 Device 端收到数据。
  3. 桥接核心:Ch554 的内部程序需要建立一个数据通道。当 Device 端收到来自电脑的数据,立即通过 Host 端转发给真实的物理串口芯片;反之,当 Host 端从物理串口芯片读到数据,也立即通过 Device 端发送给电脑。这样,对电脑而言,它只是在操作一个普通的串口,而这个串口的另一端实际上连接着一个真实的串口设备。

这个架构可以灵活变种。例如,Host 端可以连接一个 USB 键盘,Device 端模拟成一个 HID 键盘,实现键盘指令的转换或宏功能。或者,Host 端连接一个 U 盘,Device 端模拟成大容量存储设备,实现 U 盘内容的加密或过滤。

注意:这种架构下,Ch554 需要处理两套独立的 USB 中断、描述符、端点配置和数据缓冲区。软件复杂度比单一角色高很多,必须精心设计状态机和缓冲区管理,避免数据丢失或死锁。

3. 硬件电路设计与关键细节

3.1 最小系统与 USB 接口电路

Ch554 的最小系统电路相对简单:需要外部晶振(通常 12MHz 或 24MHz,为 USB 提供精准时钟)、电源滤波电容、复位电路以及用于程序下载的接口。其工作电压为 5V 或 3.3V,USB 接口电平与之匹配即可。

核心在于两个 USB 接口的设计:

  • USB Host 端口(下行端口):需要一个 USB-A 母座或贴片接口。根据 USB 规范,Host 端需要提供 5V 电源。Ch554 的某个 GPIO(如 P3.4)可以控制一个 MOS 管(如 SI2301),来管理对下游设备的供电(VBUS)。这对实现热插拔和过流保护至关重要。D+ 和 D- 信号线需要串联 22Ω 的匹配电阻,并最好预留 ESD 保护器件(如 TVS 二极管)的位置。
  • USB Device 端口(上行端口):需要一个 Micro-USB 或 USB-C 母座。这里 Ch554 是作为设备被供电的,因此 VBUS 直接接入芯片的 V33 引脚(经过内部 LDO)。D+ 和 D- 信号线上同样需要串联 22Ω 电阻。一个极易忽略的细节是:Device 端的 D+ 线上需要接一个 1.5kΩ 的上拉电阻到 3.3V,以告诉主机这是一个全速设备。这个电阻通常由 Ch554 内部软件控制连接/断开,硬件上需要预留。

实操心得:在绘制 PCB 时,务必保证 USB 差分线(D+/D-)的走线等长、紧耦合,并远离高频噪声源。即使对于全速 USB,良好的布线也能显著提升通信稳定性,减少枚举失败的概率。电源部分,特别是给下游设备供电的 5V 路径,走线要足够宽,滤波电容要靠近端口放置。

3.2 电源管理与信号完整性

整个系统的电源设计需要仔细考量。如果上行端口(Device端)由电脑供电(5V VBUS),那么这颗 5V 电源可以直接用于 Ch554 的 VCC 以及通过 MOS 管供给下游 Host 端口。但需要注意电脑 USB 口的输出电流能力(通常 500mA)。如果下游连接了功耗较大的设备(如某些无线网卡),可能导致供电不足,引起系统复位或设备无法识别。

更稳妥的方案是采用外部电源供电。例如,用一个 5V/1A 的 DC 电源适配器为整个板子供电。此时,上行端口的 VBUS 可以断开(或通过二极管隔离),避免与外部电源冲突。Ch554 内部有 3.3V LDO,为内核和 I/O 供电。

对于信号完整性,除了差分线规则,还需注意:

  1. 晶振:尽量靠近芯片,时钟线下面不要走其他信号线,用地平面包围。
  2. 去耦电容:在 Ch554 的每个电源引脚(VCC、V33)附近,放置一个 0.1uF 的陶瓷电容,高频回流路径要短。
  3. 接地:采用完整的接地平面,为高速信号提供清晰的返回路径。

4. 固件开发:双协议栈的协同与数据调度

4.1 开发环境与基础工程搭建

沁恒官方提供了 Ch554 的评估板和丰富的示例代码,这是最好的起点。开发环境可以使用 Keil C51 或 SDCC。建议从官方的“USB Host”和“USB Device”两个独立的示例工程开始研究。

我们的任务是将两者融合。创建一个新的工程,需要包含以下关键模块:

  • CH554 硬件抽象层(HAL):包含 GPIO、时钟、中断、定时器的初始化代码。
  • USB Host 协议栈:主要文件是USBHost.C和USBHost.H。它实现了主机控制器的驱动、设备枚举、传输事务管理等功能。
  • USB Device 协议栈:主要文件是USBDevice.C和USBDevice.H。它实现了设备控制器的驱动、标准请求处理、端点配置等功能。
  • 应用层主程序:这是大脑,负责初始化两个协议栈,并实现它们之间的数据桥接逻辑。

首先,分别编译和测试两个独立的示例,确保你理解了 Host 如何检测设备,以及 Device 如何被电脑识别。然后开始尝试合并。最大的挑战在于中断冲突,因为两个 USB 控制器可能共用或使用不同的中断向量。

4.2 双协议栈初始化与中断管理

Ch554 的 USB Host 和 Device 控制器有各自的中断标志位,但可能共享一个中断入口。在void USB_IRQHandler(void)这个中断服务函数中,你需要首先判断中断来源。

void USB_IRQHandler(void) interrupt INTERRUPT_USB { if (UIF_TRANSFER) { // 传输完成中断 // 进一步判断是 Host 端传输完成还是 Device 端传输完成 if (UI_H_RESULT) { // 处理 Host 端传输完成事件 USB_Host_ProcessTrans(); } // Device 端的中断判断逻辑类似,具体标志位需查手册 if (...){ // 处理 Device 端传输完成事件 USB_Device_ProcessTrans(); } UIF_TRANSFER = 0; // 清除公共传输中断标志 } // 处理其他 USB 中断,如复位、挂起等 if (UIF_BUS_RST) {...} ... }

初始化顺序也很重要。通常建议先初始化 Device 协议栈,让自己先被上位机识别为一个基础设备(比如一个自定义的 Vendor-Specific 设备)。然后再初始化 Host 协议栈,开始检测下游设备。这样可以避免在 Host 端枚举设备时,Device 端因未就绪而导致上位机通信异常。

4.3 核心桥接逻辑的实现

桥接逻辑的核心是一个状态机加上数据缓冲区。我们以“USB转串口桥”为例,描述其核心流程:

  1. 枚举阶段:

    • Device 端:将自己枚举为 CDC/ACM 设备(虚拟串口)。电脑会为其安装标准驱动,并创建一个 COM 端口。
    • Host 端:检测到下游设备插入后,开始枚举。根据插入设备的 PID/VID,加载对应的“驱动程序”。对于标准 CDC 设备或 FTDI/CH340 等常见串口芯片,我们需要在 Ch554 的 Host 协议栈中实现相应的类驱动(Class Driver)。这是一个难点,因为你需要模拟主机去正确解析设备的描述符并配置它。
  2. 数据转发阶段:

    • 为 Device 端的批量输入(IN)和输出(OUT)端点分配缓冲区。
    • 为 Host 端与下游设备通信的管道(Pipe)分配缓冲区。
    • 下行数据(电脑 -> 物理串口):当电脑通过虚拟串口发送数据,会触发 Device 端 OUT 端点传输完成中断。中断服务程序将数据从 USB 缓冲区复制到一个应用层的“下行 FIFO”中。主循环检测到这个 FIFO 有数据,则通过 Host 协议栈的Host_WritePipe()函数,将数据写入下游串口设备的批量 OUT 端点。
    • 上行数据(物理串口 -> 电脑):主循环定期(或通过 Host 中断)轮询下游串口设备的批量 IN 端点是否有数据。如果有,则通过Host_ReadPipe()读取数据,放入“上行 FIFO”。当 Device 端 IN 端点空闲且上行 FIFO 有数据时,主循环调用Device_WriteEndpoint()将数据发送给电脑。
// 伪代码示例:主循环中的桥接逻辑 void main(void) { USB_Init(); // 初始化两个 USB 控制器 FIFO_Init(&down_fifo); // 初始化下行缓冲区 FIFO_Init(&up_fifo); // 初始化上行缓冲区 while(1) { // 1. 检查并处理下行数据 (Device OUT -> Host Write) if (!FIFO_IsEmpty(&down_fifo)) { len = FIFO_Read(&down_fifo, temp_buf, MAX_PACKET_SIZE); if (host_channel_busy == FALSE) { host_channel_busy = TRUE; Host_WritePipe(BULK_OUT_PIPE, temp_buf, len); } } // 2. 检查并处理上行数据 (Host Read -> Device IN) if (host_channel_busy == FALSE) { // 启动一个异步读取 Host_ReadPipe(BULK_IN_PIPE, temp_buf, MAX_PACKET_SIZE); host_channel_busy = TRUE; } // Host 读取完成会在中断中处理,将数据放入 up_fifo // 3. 将上行数据发送给电脑 if (!FIFO_IsEmpty(&up_fifo) && device_in_ready) { len = FIFO_Read(&up_fifo, temp_buf, MAX_PACKET_SIZE); device_in_ready = FALSE; Device_WriteEndpoint(EP1_IN, temp_buf, len); } // 处理其他任务,如 LED 指示、按键扫描等 ... } }

注意事项:缓冲区(FIFO)的大小需要仔细权衡。太小容易丢包,太大会增加内存占用和传输延迟。对于串口应用,可以根据波特率计算。例如,115200bps 的波特率,理论上每秒最多传输约 11520 字节。如果主循环每秒能运行几百次,那么一个 256 字节的 FIFO 通常就足够了。关键在于确保数据生产和消费的速度匹配。

5. 协议处理与设备枚举的深层解析

5.1 Host 端:如何“驱动”下游设备

这是本项目最具挑战性的部分之一。Ch554 作为 Host,需要为连接的下游设备提供“驱动”。对于标准设备类(如 HID、CDC、MSC),你需要实现相应的类驱动。

以识别一个 CH340 USB 转串口芯片为例:

  1. 设备检测与地址分配:Host 控制器检测到设备插入,发出复位信号,然后给设备分配一个唯一的地址(1-127)。
  2. 获取描述符:Host 通过控制传输(端点0),依次获取设备描述符、配置描述符、接口描述符、端点描述符。你需要解析这些描述符。
  3. 识别设备:从设备描述符中获取厂商 ID(VID)和产品 ID(PID)。如果是 CH340(VID=1A86, PID=7523),则进入 CH340 的初始化流程。
  4. 加载类驱动:对于 CH340,它可能使用厂商自定义的协议。你需要查阅 CH340 的技术手册,了解其初始化需要发送哪些特定的控制请求(Vendor Request)。例如,可能需要设置波特率、数据位、停止位等参数的控制传输。这些请求需要你通过 Host 协议栈的Host_CtrlTransfer()函数来发送。
  5. 配置端点:根据端点描述符,配置 Host 端用于数据通信的管道(Pipe)。CH340 通常使用两个批量端点(Bulk IN 和 Bulk OUT)进行数据收发。你需要调用Host_ConfigPipe()来建立这些管道。

整个过程需要你对 USB 协议有深入的理解,并且有能力阅读和分析第三方芯片的 USB 通信协议。一个取巧的方法是,可以先从支持标准 CDC/ACM 协议的设备入手(如某些 CP2102 型号),因为 Windows/Linux 有标准驱动,Ch554 作为 Host 只需要遵循标准的 CDC 类请求即可,相对简单。

5.2 Device 端:如何完美模拟目标设备

Device 端的任务相对标准,但要求精确。你需要根据想要模拟的设备类型,精心构造一套描述符。

例如,模拟一个 CDC/ACM 虚拟串口:

  • 设备描述符:声明设备类、子类、协议,以及 VID/PID。你可以使用沁恒的 VID,或者申请一个测试用的 VID/PID。
  • 配置描述符集合:这是一个复合结构,包含:
    • 配置描述符本身。
    • 通信接口类(CDC)描述符:这是一个抽象控制接口,通常包含一个中断 IN 端点,用于通知线路状态变化。
    • 数据接口类描述符:这是一个数据接口,包含两个批量端点(IN 和 OUT),用于实际的数据传输。
  • 字符串描述符:提供厂商名、产品名、序列号等可读信息。

在代码中,你需要将这些描述符以常量数组的形式定义好。当上位机请求时,Device 协议栈会自动返回它们。此外,你还需要实现 CDC 类的特定请求处理,比如设置线路编码(波特率、停止位等)。对于虚拟串口,这些请求可以只做应答,而不实际执行,因为真正的串口参数由下游的物理设备决定。

6. 调试技巧与问题排查实录

开发此类项目,调试是重中之重。问题可能出在硬件、Host 端、Device 端或桥接逻辑。

6.1 硬件级调试

  1. 供电问题:首先用万用表测量 Ch554 的 VCC 和 V33 引脚电压是否稳定。下游设备不识别?检查 Host 端口 VBUS 的 MOS 管开关是否正常打开,电压是否为 5V,电流是否足够。
  2. 信号问题:使用示波器或逻辑分析仪观察 USB 差分信号。插入设备时,D+ 或 D- 线上应该能看到明显的复位和高速脉冲。如果信号幅度小、波形畸变,检查串联电阻值、走线以及是否虚焊。
  3. 枚举失败:如果电脑完全无法识别 Device 端,首先检查 1.5kΩ 上拉电阻是否正常连接到了 D+。可以尝试用 USB 分析仪(如 Beagle USB 12)抓取总线上的数据包,这是最强大的调试手段,能直接看到描述符请求和响应过程。

6.2 软件与逻辑调试

  1. 分步测试:绝对不要一开始就写完整的桥接代码。先分别测试:
    • 仅 Device 模式:烧写一个最简单的 CDC 设备例程,确保电脑能正确识别出虚拟 COM 口,并能用串口助手收发数据。
    • 仅 Host 模式:烧写一个 Host 例程,连接一个已知良好的 USB 设备(如 U 盘),确保 Ch554 能正确识别并读取其基本信息(如通过串口打印设备描述符)。
  2. 利用调试信息:充分利用 Ch554 的串口(UART)或 GPIO 灯来输出调试信息。例如,在每一个关键的枚举步骤(发送描述符、设置地址、设置配置)后,通过串口打印一条信息。用不同的 LED 闪烁模式表示 Host 端或 Device 端的不同状态(枚举中、就绪、错误)。
  3. 缓冲区溢出与死锁:这是桥接逻辑中最常见的软件问题。确保你的 FIFO 操作是线程安全的(虽然 8051 是单线程,但中断和主循环会竞争资源)。在读写 FIFO 前,可以暂时关闭中断。仔细检查 Host 和 Device 的传输完成中断处理函数,确保它们能正确释放“忙”标志,并触发主循环进行下一步操作。

6.3 常见问题速查表

现象可能原因排查思路
电脑无法识别 Device 端1. 硬件连接问题(VBUS, D+/D-)
2. 1.5kΩ 上拉电阻未连接或失效
3. Device 描述符错误
4. 芯片未正确进入 USB 模式
1. 检查硬件连线与焊接。
2. 测量 D+ 线电压(应约 3.3V)。
3. 使用 USB 分析仪抓包,看描述符请求是否响应。
4. 检查程序初始化代码,确认 USB 时钟和模式配置正确。
Host 端无法检测到下游设备1. 下游设备供电不足或未开启
2. Host D+/D- 信号线问题
3. Host 协议栈初始化失败
4. 下游设备不兼容(耗电大、枚举慢)
1. 测量下游端口 VBUS 电压,确保 MOS 管导通。
2. 用示波器看差分信号。
3. 单步调试 Host 初始化代码。
4. 尝试连接一个简单的 USB 设备(如鼠标)。
桥接后数据丢失或乱码1. 缓冲区(FIFO)大小不足
2. 数据转发逻辑有 bug,导致覆盖
3. 两端波特率等参数不匹配
4. USB 传输未考虑数据包大小(最大 64 字节)
1. 增大 FIFO 大小,并加入溢出标志。
2. 在数据复制关键点加入校验或打印。
3. 确保虚拟串口和下位机串口参数一致。
4. 检查 Host/Device 的传输函数是否正确处理了短包(长度<最大包长)作为传输结束标志。
系统运行一段时间后死机1. 中断服务程序处理时间过长,导致其他中断丢失
2. 内存泄漏或缓冲区管理错误导致堆栈溢出
3. 看门狗未喂
1. 优化中断服务程序,只做最必要的操作(如置标志),复杂处理放到主循环。
2. 检查所有数组和指针操作是否越界。
3. 如果使能了看门狗,确保在主循环中定期喂狗。

7. 性能优化与扩展思路

当基础功能实现后,可以考虑优化和扩展。

7.1 性能优化点

  1. 中断优化:USB 中断频率较高。确保中断服务函数尽可能短小精悍。可以将数据搬运等耗时操作放到主循环中基于标志位进行。
  2. 双缓冲与乒乓操作:对于数据吞吐要求高的场景,可以为每个端点或管道实现双缓冲。当一个缓冲区正在被 USB 控制器使用(DMA)时,应用程序可以处理另一个缓冲区,实现并行,最大化带宽利用率。
  3. 协议简化:如果桥接的双方都是你可控的设备,可以定制简化协议。例如,在 Host 和 Device 端都使用相同的自定义批量传输格式,避免复杂的标准类驱动解析,提高效率。

7.2 功能扩展方向

  1. 多协议支持:在你的固件中集成多种设备的 Host 端驱动(如 HID 键盘鼠标、MSC U盘、CDC 串口)。通过按键或上位机命令,动态切换桥接模式。
  2. 数据加工与过滤:在桥接通道中加入处理逻辑。例如,实现一个“键盘记录器”或“宏键盘”,将 Host 端读取的普通键盘信号,经过转换后从 Device 端输出为复杂的组合键序列。或者,在 USB 存储桥接中,对传输的文件进行实时加密/解密。
  3. 状态监控与配置接口:让 Device 端除了桥接功能外,再额外模拟一个 HID 或 CDC 接口,用于传输调试信息和接收配置命令。这样,你可以通过上位机软件实时查看桥接状态、数据流量,并动态配置下游设备的参数。
  4. 无线化桥接:将 Ch554 的桥接数据,通过其 UART 或 SPI 接口,发送给一个蓝牙(如 HC-05)或 WiFi(如 ESP-01S)模块,实现 USB 设备的无线接入,这构成了一个无线 USB 适配器的雏形。

实现这个项目的过程,是对 USB 协议一次非常深刻的实践。你会被迫去理解主机如何枚举设备,设备如何响应请求,以及数据如何通过管道流动。当你的 Ch554 成功地将一个 USB 键盘的信号转换并输入到另一台电脑时,那种成就感远非点亮一个 LED 可比。它打通了两种 USB 角色之间的壁垒,为你打开了一扇自定义 USB 互联世界的大门。

相关新闻

  • 2026郑州黄金回收市场乱象,警惕虚高报价引流陷阱 - 生活商业速报
  • MCP协议:降低大模型开发门槛的标准化交互方案
  • 3步掌握IwaraDownloadTool:浏览器脚本视频下载工具的完整指南

最新新闻

  • 5分钟快速上手:MouseClick鼠标连点器终极使用指南
  • 从Demo到落地:揭秘企业Agent与开放式Agent架构差异,解决AI应用难题!
  • 无VR一体机高效开发指南:Unity模拟环境搭建与核心交互实现
  • 终极解决方案:LinkSwift网盘直链下载助手全解析
  • 从XSS到RCE:Electron应用安全攻防实战与加固指南
  • 物联网设备低功耗设计:NBM7100A与TM4C123的电源管理优化

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号