電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>帶有nRF5340 DK的虛擬皮帶

帶有nRF5340 DK的虛擬皮帶

2022-11-10 | zip | 0.01 MB | 次下載 | 2積分

資料介紹

描述

項(xiàng)目描述

項(xiàng)目由兩臺(tái)設(shè)備組成,其中一臺(tái)是控制設(shè)備(本例中是手機(jī)),另一臺(tái)是遠(yuǎn)程可穿戴設(shè)備。遠(yuǎn)程設(shè)備有 LED 指示它何時(shí)超出范圍。控制設(shè)備打開連接,并定期發(fā)送測量RSSI的數(shù)據(jù)包。

入門

項(xiàng)目所需的硬件是 Nordic Semiconductors 藍(lán)牙開發(fā)套件之一。以下所有步驟均在 nRF5340-DK 上完成。

在開始之前,最好遵循設(shè)置軟件環(huán)境的指南。

代碼是在 nRF Connect SDK v1.5.0 上開發(fā)的,帶有修補(bǔ)的 zephyr。該補(bǔ)丁是添加對(duì) LCD 顯示的支持所必需的,可在NordicPlayground github repo中找到。可能較新版本的 SDK 已經(jīng)支持板dts 文件中的 Arduino 標(biāo)頭定義。

首先,我們將通過簡單的步驟讓代碼運(yùn)行,然后我們將深入了解 SDK 細(xì)節(jié)。

編程 nRF5340-DK

  • 從 Nordic示例應(yīng)用補(bǔ)丁- 克隆項(xiàng)目,然后按照說明應(yīng)用補(bǔ)丁
  • 從 Github 克隆虛擬皮帶項(xiàng)目
  • 將項(xiàng)目導(dǎo)入 SEGGER Embedded Studio
  • 連接 nRF5340-DK
  • 將紅色 LED 連接到引腳 P0.30,將綠色 LED 連接到引腳 P0.31
  • 連接 Adafruit 2.8" LCD 顯示屏
  • 從“構(gòu)建”菜單中選擇“構(gòu)建并運(yùn)行”。

顯示屏應(yīng)顯示 RSSI 標(biāo)簽和 RSSI 圖形背景。

pYYBAGNr2MiAfkV0AABHSVPl70A694.png
外部電源和 LED 驅(qū)動(dòng)器原理圖
?

出于測試目的,LED 可以通過相當(dāng)大的 (>= 10k ohm) 限流電阻器直接連接到端口輸出。

安卓手機(jī)控制

  • 打開MIT App Inventor頁面
  • 下載并安裝最新BluetoothLE 擴(kuò)展。
  • 從項(xiàng)目存儲(chǔ)庫導(dǎo)入 virtual-leash/app-inventor/control-application.aia
  • 編譯 apk,或從 Play 商店安裝“MIT AI2 Companion”
  • 在手機(jī)上下載并運(yùn)行應(yīng)用程序
  • 按“掃描設(shè)備”
pYYBAGNr2MuAOpWXAAEyGpXJ9RI865.png
?
  • 選擇“Otown”設(shè)備——這就是 DK 通過藍(lán)牙做廣告的方式
  • 按“附加”
  • 綠色 LED 應(yīng)開始每秒閃爍一次

實(shí)施細(xì)節(jié)

在接下來的章節(jié)中,我們嘗試添加盡可能多的信息,以幫助其他人了解一切在幕后是如何運(yùn)作的。了解北歐設(shè)備的開發(fā)、使用 Zephyr OS 和使用藍(lán)牙本身是一段相當(dāng)長的旅程。

為了更容易理解,我們首先展示了工作代碼的描述,然后有一些或多或少成功的步驟引導(dǎo)我們找到了這個(gè)特定的解決方案。整體學(xué)習(xí)部分需要幾個(gè)星期的下班后實(shí)驗(yàn)才能開始。

配置項(xiàng)目、了解設(shè)備樹文件、覆蓋文件、了解藍(lán)牙參數(shù)等方面的學(xué)習(xí)曲線非常陡峭。我們不打算在此處提供有關(guān)這些主題的完整教程。

SDK 附帶的 Nordic 示例大多是開箱即用的。這是一個(gè)令人鼓舞的開始,但后來被 Arduino 寵壞了,我們認(rèn)為復(fù)制粘貼代碼足以將部分示例添加到我們的代碼中。這是第一個(gè)讓我們損失 2-3 周的錯(cuò)誤。僅復(fù)制源代碼是不夠的,還有項(xiàng)目配置文件,并且通常需要在示例代碼之上進(jìn)行大量自定義。

最終代碼是使用常規(guī)連接開發(fā)的,DK 作為“外圍”設(shè)備,電話作為“中央”設(shè)備。回想起來,我們可能會(huì)使用 BluetoothLE 的 Broadcaster-Observer 角色,因?yàn)榭焖僭推脚_(tái)(應(yīng)用程序發(fā)明者、flutter)對(duì)無連接數(shù)據(jù)傳輸?shù)闹С趾懿罨虿恢С帧?/font>

nRF5340-DK 上的藍(lán)牙配置詳細(xì)信息

第一個(gè)也是最困難的部分是找到正確的配置設(shè)置。設(shè)置我們最終啟用藍(lán)牙外圍設(shè)備:

# Incresed stack due to settings API usage
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048

CONFIG_BT=y
CONFIG_BT_DEBUG_LOG=y
CONFIG_BT_SMP=y
CONFIG_BT_SIGNING=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DIS=y
CONFIG_BT_ATT_PREPARE_COUNT=5
CONFIG_BT_PRIVACY=y
CONFIG_BT_DEVICE_NAME="Otown"
CONFIG_BT_DEVICE_APPEARANCE=833

配置保存在prj.conf. 這是迄今為止最神秘的部分,并且在剛開始使用 Zephyr 時(shí)文檔記錄很少。對(duì)我們有用的是從示例、文檔和 Zephyr 源代碼中復(fù)制的配置組合。

之后啟用和啟動(dòng)藍(lán)牙非常簡單,并且在所有示例中看起來基本相同。所有的魔法都發(fā)生在從配置設(shè)置自動(dòng)生成的代碼中。

int err = bt_enable(NULL);
if (err) {
    LOG_ERR("Bluetooth init failed (err %d)\n", err);
    return;
}

任何面向連接的藍(lán)牙鏈接的第一部分都是設(shè)置廣告細(xì)節(jié)。為此,Zephyr 中有一些非常復(fù)雜的宏。這是一個(gè)對(duì)我們有用的結(jié)構(gòu):

//Unique Universal ID of service
#define OTOWN_UUID BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x39342d62, 0x3932, 0x662d, 0x6538, 0x313134343332))

// Advertising details for just one service, and generally discoverable peripheral
static const struct bt_data advertising_data[] = {
    BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
    BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_128_ENCODE(0x39342d62, 0x3932, 0x662d, 0x6538, 0x313134343332)),
};

// Bluetooth connect and disconnect callbacks
static struct bt_conn_cb conn_callbacks = {
    .connected = connected,
    .disconnected = disconnected,
};

...

// register connect and disonnect callbacks
bt_conn_cb_register(&conn_callbacks);

// Pass structure to bt_le_adv_start method
err = bt_le_adv_start(BT_LE_ADV_CONN_NAME, advertising_data, ARRAY_SIZE(advertising_data), NULL, 0);

我們使用從許多在線生成器之一生成的 UUID。對(duì)于自定義通信通道,它們基本上可以是連接雙方都知道的隨機(jī)值。

在最基本的層面上,藍(lán)牙由服務(wù)組成,這些服務(wù)進(jìn)一步分解為可以讀取或?qū)懭氲奶匦浴?/font>

pYYBAGNr2M2AXBSoAABffknKyAg684.png
?

每個(gè)對(duì)象都有很多配置參數(shù)。在我們的項(xiàng)目中,我們使用了具有 2 個(gè)特征的單個(gè)服務(wù)。一種具有讀/寫方法,另一種是只寫。為簡單起見,訪問特征沒有加密或任何特殊配對(duì)要求。

#define REMOTE_RSSI_CHARACTERISTIC_UUID BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x63342d31, 0x3836, 0x372d, 0x3166, 0x306331633562))
#define DETACH_CHARACTERISTIC_UUID BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x1e086d95, 0x7faa, 0x4993, 0x984e, 0xcf234cec373b))

/* Primary Service Declaration */
BT_GATT_SERVICE_DEFINE(otown_svc,               //create a struct with _name
    BT_GATT_PRIMARY_SERVICE(OTOWN_UUID),       //Main UUID
    BT_GATT_CHARACTERISTIC(REMOTE_RSSI_CHARACTERISTIC_UUID,
        BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE,   // Properties
        BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, // permissions read/write no security
        read_otown, write_otown, otown_value),  // Callback functions and value
    BT_GATT_CHARACTERISTIC(DETACH_CHARACTERISTIC_UUID,
        BT_GATT_CHRC_WRITE, // Properties
        BT_GATT_PERM_WRITE, // permissions write no security
        NULL, write_detach, detach_request),  //Callback functions and value
    BT_GATT_CCC(vnd_ccc_cfg_changed,            //Client Configuration Configuration
        BT_GATT_PERM_READ | BT_GATT_PERM_WRITE_ENCRYPT),
        );

處理這些特征的整個(gè)代碼是自動(dòng)生成的。

寫入和讀取特性通過回調(diào)函數(shù)發(fā)生。在這些回調(diào)中不要使用太多時(shí)間是非常重要的。在回調(diào)中更新 LCD 顯示會(huì)在幾秒鐘后導(dǎo)致連接不穩(wěn)定。日志輸出似乎是可以容忍的。

寫入時(shí),數(shù)據(jù)片段必須存儲(chǔ)在緩沖區(qū)中:

//Callback function of write command
static ssize_t write_otown(struct bt_conn *conn, const struct bt_gatt_attr *attr,
    const void *buf, uint16_t len, uint16_t offset,
    uint8_t flags) {
  uint8_t *value = attr->user_data;

  if (offset + len > sizeof(otown_value)) {
    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);
  }
  memcpy(value + offset, buf, len);

然后可以解析接收到的字符串并將其傳遞給主應(yīng)用程序。在這種情況下,使用了 Zephyr 消息隊(duì)列。

int value_int = atoi(value);

  k_msgq_put(&rssi_queue, &value_int, K_NO_WAIT);
  return len;
}

消息隊(duì)列是固定大小的循環(huán)緩沖區(qū),提供應(yīng)用程序線程之間的通信方式。這是一個(gè)簡單的例子:

// Queue for passing received RSSI values to main thread (4 elements)
K_MSGQ_DEFINE(rssi_queue, sizeof(int), 4, 4);
...
// write callback on Bluetooth thread
k_msgq_put(&rssi_queue, &value_int, K_NO_WAIT);
...
// main thread - get value from queue, and display on LCD
int rssi;
if(k_msgq_get(&rssi_queue, &rssi, K_NO_WAIT) == 0) {
  LOG_INF("RSSI = %d", rssi);
  gui_add_point_to_chart(rssi);
}

只是改變狀態(tài)的更簡單的方法不需要使用隊(duì)列。這是分離特征的寫回調(diào)代碼

#define DETACH_COMMAND "detach"

static ssize_t write_detach(...) {

...

  // compare received string against predefined command
  if(strncmp(value, DETACH_COMMAND, strlen(DETACH_COMMAND)) == 0) {
    ...
    detached_safely = true;
  }

  return len;
}

最后斷開回調(diào)負(fù)責(zé)檢查電話是否“安全”斷開連接

static void disconnected(...) {
  ...
  // turn on red leds if remote device did not detach safely before disconnecting
  if(!detached_safely) {
    gpio_set_red(true);
  }
}

使用 GPIO

必須在項(xiàng)目配置文件中啟用第一個(gè) GPIO 庫

CONFIG_GPIO=y

使用 GPIO 通常需要在電路板覆蓋文件中定義端口,但是有一個(gè)可用于原型設(shè)計(jì)的快捷方式

#define RED_LED_PIN 30

// "guess" that port 0 is named GPIO_0 on nRF boards
gpio = device_get_binding("GPIO_0");
if (gpio == NULL) {
  printk("error getting GPIO_0 device\n");
  return;
}
// configure pin 30 as an output
ret = gpio_pin_configure(gpio, RED_LED_PIN, GPIO_OUTPUT);
...
// set output
gpio_pin_set(gpio, RED_LED_PIN, true);

使用液晶顯示器

lvgl支持 Adafruit 2.8" LCD 顯示器(在適當(dāng)?shù)陌迮渲煤螅1M管在我們的項(xiàng)目中不是絕對(duì)必要的,但它很有趣,并提供了很好的調(diào)試機(jī)會(huì)。

在編寫這個(gè)項(xiàng)目時(shí),有用于屏幕布局的 GUI 設(shè)計(jì)器的概念證明,但是代碼生成器還沒有準(zhǔn)備好,可用的 GUI 組件很少。我們使用的代碼大部分是從 NordicPlayground 上的 Nordic 示例中復(fù)制而來的。

圖形組件的文檔不是很好,經(jīng)常需要查看源代碼。除此之外,有時(shí)設(shè)置組件屬性的順序很重要。在正面的觸摸屏上,顯示與 Nordic 和 Zephyr 示例代碼沒有問題。

我們必須在項(xiàng)目文件中設(shè)置一些配置選項(xiàng)以啟用 LVGL 支持

# LVGL DISPLAY
CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_MAIN_STACK_SIZE=4096

CONFIG_DISPLAY=y
CONFIG_DISPLAY_LOG_LEVEL_ERR=y

CONFIG_LVGL=y
CONFIG_LVGL_ANTIALIAS=y
CONFIG_LVGL_USE_LABEL=y
CONFIG_LVGL_USE_CONT=y
CONFIG_LVGL_USE_BTN=y
CONFIG_LVGL_USE_CHECKBOX=y
CONFIG_LVGL_USE_IMG=y
CONFIG_LVGL_USE_THEME_MATERIAL=y
CONFIG_LVGL_USE_ANIMATION=y
CONFIG_LVGL_USE_SHADOW=y
CONFIG_LVGL_USE_CHART=y
CONFIG_LVGL_CHART_AXIS_TICK_LABEL_MAX_LEN=256

CONFIG_NEWLIB_LIBC=y

具體顯示必須在CMakeLists.txt中選擇

set(SHIELD adafruit_2_8_tft_touch_v2)

所有組件配置代碼,包括 GUI 組件的一些實(shí)驗(yàn)都可以在gui.c

手機(jī)藍(lán)牙應(yīng)用(MIT App Inventor)

手機(jī)應(yīng)用程序非常簡單,功能僅限于掃描附近的藍(lán)牙設(shè)備,然后在附加到設(shè)備后發(fā)送帶有數(shù)據(jù)的字符串。

poYBAGNr2M-AFVHJAADHvnrqzzE006.png
?

定期測量連接設(shè)備的 RSSI 并將其寫入“RSSI”特性。這解決了 nRF SDK 上的問題,即一旦連接到中央設(shè)備,就無法在外圍設(shè)備上讀取 RSSI。

pYYBAGNr2NKAbJCbAABqrmE7Wbw675.png
?

按下分離按鈕將向“分離”特性發(fā)送“分離”命令。

poYBAGNr2NOAefqXAABBWJqYvYs075.png
?

一點(diǎn)歷史:項(xiàng)目的考慮因素

對(duì)于手機(jī)應(yīng)用程序,我們最初計(jì)劃使用 Flutter,因?yàn)樗哂性目缙脚_(tái)支持,但是,缺乏適當(dāng)?shù)?ble 庫導(dǎo)致我們?cè)诟唵蔚臇|西上進(jìn)行原型設(shè)計(jì)。起初,我們想使用 App Inventor 快速制作原型用于測試目的,雖然它一開始看起來很幼稚且不通用,但諷刺的是,它支持的 BLE 功能比任何可用的 Flutter BLE 庫都多(例如從一個(gè)已經(jīng)連接的設(shè)備),所以我們決定使用它。

另一個(gè)挫折是嘗試從連接的設(shè)備獲取 nRF SDK 中的 RSSI。RSSI 在掃描階段很容易獲得,但是在建立連接后無法獲取。在對(duì)網(wǎng)絡(luò)處理器代碼和 HCI 接口進(jìn)行修改時(shí),我們陷入了死胡同。我們嘗試使用 hci_pwr_ctrl 示例,其中藍(lán)牙控制器(在 DK 情況下為網(wǎng)絡(luò)核心)將 RSSI 值隧道傳輸?shù)降诙€(gè)核心上的應(yīng)用程序線程。不幸的是,我們沒有讓這個(gè)示例工作,因?yàn)?nRF 的 Zephyr SDK 中顯然存在一個(gè)已知錯(cuò)誤。對(duì)于初學(xué)者來說也太高級(jí)了。

最初,我們想使用 nRF5340-DK 作為中央設(shè)備,以及簡單的鑰匙查找器藍(lán)牙信標(biāo)

pYYBAGNr2NWAXZb3AAAfEdtEsB0686.png
?

我們找不到一個(gè)好的參數(shù)組合來保持與信標(biāo)的連接。我們嘗試了多個(gè)安全/配對(duì)參數(shù),但在短暫的協(xié)商階段后連接幾乎立即斷開。錯(cuò)誤代碼不是很有幫助,因此路徑被刪除了。

BluetoothLE 無連接廣播者-觀察者角色非常有前途。我們基于 Zephyr 示例在 nRF5340-DK 和 nRF52840 加密狗之間進(jìn)行了簡單的廣告設(shè)置,但是我們無法輕松傳輸任何有意義的數(shù)據(jù)。所有修改都導(dǎo)致代碼失敗。可能擁有 2 個(gè)完整的開發(fā)套件會(huì)更容易。手機(jī)應(yīng)用程序原型設(shè)計(jì)框架中缺乏對(duì)這些角色的支持也導(dǎo)致了這條路的放棄。

一旦我們找到一些時(shí)間對(duì)其進(jìn)行重新測試和清理,其中一些實(shí)驗(yàn)的代碼將在 GitHub 存儲(chǔ)庫中提供。

提示與技巧

在學(xué)習(xí) Zephyr 時(shí),我們?yōu)?MAX6675 熱電偶 ADC 開發(fā)了一個(gè)簡單的 SPI 驅(qū)動(dòng)程序。作為 Zephyr 2.4.99 的補(bǔ)丁提供(隨 nRF SDK 1.5.0 提供)。

從 Play 商店獲取nRF Connect應(yīng)用程序非常有幫助。它非常適合獲取有關(guān)外圍設(shè)備的詳細(xì)信息。非常穩(wěn)定且功能豐富的藍(lán)牙連接調(diào)試。然而,我們無法確定是否可以將其用作 Brodcaster 或 Observer。

pYYBAGNr2NeAH7GHAAAgHOopejw596.png
?

在帶有外部 TTL 到 USB 轉(zhuǎn)換器的 nRF52840 加密狗上獲得調(diào)試接口取得了一些成功。

poYBAGNr2NqAGu9_AAHCrrPF-kQ121.png
?

默認(rèn)情況下調(diào)試輸出被禁用。要將其重定向到串行端口(默認(rèn)情況下,引腳 0.20 上的 TX,引腳 0.24 上的 RX)在項(xiàng)目配置中啟用 SERIAL 和 UART_CONSOLE。

配置用于調(diào)試的 USB 接口最初看起來很簡單,但最終它只適用于 Zephyr USB 日志記錄示例。當(dāng)配置和代碼被復(fù)制粘貼到我們的應(yīng)用程序時(shí),它在第一個(gè)日志記錄宏上失敗了。

這是一些我不記得它來自哪里的隨機(jī)注釋,但是在從 Zephyr 為 nRF52840 加密狗構(gòu)建藍(lán)牙示例時(shí)它非常重要:

啟用 FLASH 設(shè)置。要控制藍(lán)牙設(shè)備名稱,請(qǐng)啟用設(shè)置和 NVS。然后可以更改設(shè)備名稱。

在 AppInventor 方面:確保您沒有使用 2019 年以來過時(shí)的 BLE 插件,較新的 android 設(shè)備無法在其上運(yùn)行,因?yàn)?a href='http://www.ttokpm.com/v/tag/527/' target='_blank' class='arckwlink_none'>操作系統(tǒng)受到更多限制,但它已通過 2020 年 12 月插件修復(fù)。

有時(shí)應(yīng)用程序會(huì)弄亂手機(jī)上的藍(lán)牙子系統(tǒng),顯示一堆錯(cuò)誤。關(guān)閉應(yīng)用程序和禁用->啟用周期有助于讓事情重回正軌。

原型圖片

poYBAGNr2OaABuyRAAVnOUmYwDA242.png
電池、電源、LED 驅(qū)動(dòng)板和 nRF5340-DK。實(shí)際 LED 超出框架。
?
poYBAGNr2OqAMl-eAAOycYouMgU455.png
DC-DC 轉(zhuǎn)換器的底部,以及激光切割丙烯酸頂部的 3D 打印框架中的 LED 驅(qū)動(dòng)器
?
pYYBAGNr2PSABCGlAAM-06xtFLc687.png
“電纜”方面。兩根電纜連接到 RGB LED 燈條,一根電纜連接到 nRF5340-DK
?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)