摘要:基于開(kāi)發(fā)的軟件包導(dǎo)師汪禮超學(xué)員崔林威摘要騰訊物聯(lián)網(wǎng)操作系統(tǒng)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開(kāi)發(fā)的實(shí)時(shí)操作系統(tǒng),具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數(shù)處理進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊,并點(diǎn)擊。
TencentOS-Tiny software package based on STM32Cube MX
2021/11/10
導(dǎo)師:汪禮超
學(xué)員:崔林威
Email:1797878653@qq.com
https://github.com/OpenAtomFoundation/TencentOS-tiny
騰訊物聯(lián)網(wǎng)操作系統(tǒng)(TencentOS tiny)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開(kāi)發(fā)的實(shí)時(shí)操作系統(tǒng),具有低功耗,低資源占用,模塊化,可裁剪等特性。TencentOS
tiny提供了最精簡(jiǎn)的 RTOS 內(nèi)核,內(nèi)核組件可裁剪可配置,可靈活移植到多種終端
MCU上;基于RTOS內(nèi)核提供了COAP/MQTT/TLS/DTLS等常用物聯(lián)網(wǎng)協(xié)議棧及組件,方便用戶快速接入騰訊云物聯(lián)網(wǎng)通信IoT Hub;同時(shí),為物聯(lián)網(wǎng)終端廠家提供一站式軟件解決方案,方便各種物聯(lián)網(wǎng)設(shè)備快速接入騰訊云,可支撐智慧城市、智能穿戴、車聯(lián)網(wǎng)等多種行業(yè)應(yīng)用。
為了減少開(kāi)發(fā)人員移植TencentOS tiny到STM32系列單片機(jī)上的開(kāi)發(fā)時(shí)間,研究了STM32Cube MX軟件包的制作,基于STM32 PackCreator完成了TencentOS Tiny軟件包的封裝,并在STM32Cube IDE和MDK-ARM v5上完成了軟件包的移植測(cè)試,從而用戶在安裝本軟件包后,能夠使用pack在STM32Cube MX上直接生成適合不同MCU的TencentOS Tiny工程。
目錄
1、STM32 Cube MX軟件包介紹
1.1 軟件包簡(jiǎn)介
1.2 軟件包制作
1.2.1 軟件包開(kāi)發(fā)過(guò)程
1.2.2 PDSC文件的編寫
1.2.3 生成軟件包
2、TencentOS-tiny軟件包
2.1 軟件包內(nèi)容
2.2 軟件包安裝
3、軟件包測(cè)試
3.1 ARM內(nèi)核移植TencentOS tiny軟件包
3.2 STM32不依賴裸機(jī)工程移植
3.3 單片機(jī)裸機(jī)工程移植
4、總結(jié)
5、開(kāi)發(fā)參考
6、附錄-移植配置參考
6.1 MDK5.14版本移植到ARM內(nèi)核
6.1.1 Cortex-M0內(nèi)核移植
6.1.2 Cortex-M0+內(nèi)核移植
6.1.3 Cortex-M3內(nèi)核移植
6.1.4 Cortex-M4內(nèi)核移植
6.1.5 Cortex-M7內(nèi)核移植
6.2 MDK5.14版本移植到基于ARM內(nèi)核的芯片
6.2.1 移植到stm32f103c8芯片
6.2.2 移植到stm32f767igt芯片
6.3 MDK5.30和MDK5.35版本移植(Cortex-M0+、0、3、4、7內(nèi)核和芯片)
6.4 MDK5.30和MDK5.35版本移植(Cortex-M23、33)
6.4.1 Cortex-M23內(nèi)核移植
6.4.2 Cortex-M33內(nèi)核移植
在進(jìn)行嵌入式軟件開(kāi)發(fā)時(shí),ARM為我們提供了軟件包功能,能夠?qū)④浖惴ǖ饶K進(jìn)行集成封裝,從而方便第三方用戶使用。ARM軟件包能夠?yàn)槲⒖刂破髟O(shè)備和開(kāi)發(fā)板提供支持,包含軟件組件(Software
Component)如驅(qū)動(dòng)程序和中間件,還可以包含示例項(xiàng)目和代碼模板等,主要有以下類型的軟件包:
(1) 器件系列包(Device Family Pack):由硅供應(yīng)商或工具供應(yīng)商生成,為特定的目標(biāo)微控制器創(chuàng)建軟件應(yīng)用提供支持;
(2) 板級(jí)支持包(Board Support Pack):由電路板供應(yīng)商發(fā)布,為安裝在電路板上的外圍硬件提供軟件支持。
(3) CMSIS軟件包:由ARM提供,包括對(duì)CMSIS核心、DSP和RTOS的支持;
(4) 中間件包(Middleware
Pack):由芯片供應(yīng)商、工具供應(yīng)商或第三方創(chuàng)建;通過(guò)提供對(duì)常用軟件組件(如軟件堆棧、特殊硬件庫(kù)等)的軟件集成,從而減少開(kāi)發(fā)時(shí)間;(5) 內(nèi)部組件(In-house components):由工具用戶開(kāi)發(fā),用于內(nèi)部或外部分發(fā)。
軟件組件包括以下幾部分:
(1) 源代碼、庫(kù)、頭文件/配置文件和文檔;
(2) 完整的示例項(xiàng)目,展示了軟件組件的使用,可以下載并在評(píng)估硬件上執(zhí)行;
(3) 代碼模板,方便使用軟件組件。
一個(gè)完整的軟件包是一個(gè)ZIP文件,包含所有需要的軟件庫(kù)和文件,以及一個(gè)包含軟件包所有信息的包描述文件(PDSC文件),ARM軟件包的結(jié)構(gòu)是在CMSIS中定義的(http://www.keil.com/CMSIS/Pack)。
STM32 CubeMX是ST公司推出了專門用于生成STM32的HAL代碼的代碼生成軟件,可以通過(guò)可視化界面完成工程的配置,同時(shí)生成能夠在STM32 CubeMX、Keil等軟件中運(yùn)行的工程。STM32 Cube MX軟件包是在ARM軟件包的基礎(chǔ)上,結(jié)合ST公司提供的軟件包生成工具STM32 PackCreator制作的,利用這個(gè)軟件我們可以很方便地以圖形化界面的方式進(jìn)行軟件包的制作。
如下圖所示,使用STM32PackCreator需要我們的操作系統(tǒng)安裝Java? Runtime Environment (JRE)和JavaFX?,目前STM32CubeMX已經(jīng)更新到了6.3版本,但這個(gè)版本并沒(méi)有集成JavaFX,最為方便的方式是安裝STM32
CubeMX 6.2版本,省去了JavaFX的配置問(wèn)題。
圖1.1 STM32PackCreator使用要求
具體步驟如下:
(1)安裝STM32CubeMX6.2.0:STM32CubeMX - STM32Cube初始化代碼生成器 -
STMicroelectronics;
圖1.2 下載STM32CubeMX6.2.0
(2)雙擊安裝目錄下的STM32PackCreator,此時(shí)會(huì)提示需要安裝JRE,點(diǎn)擊確定,跳轉(zhuǎn)到https://java.com/zh-CN/download/,然后下載安裝。
圖1.3 STM32PackCreator使用前的配置
(3)然后再次雙擊打開(kāi)STM32PackCreator.exe,STM32 PackCreator的界面如下圖所示。
圖1.4 STM32 PackCreator界面
軟件包的開(kāi)發(fā)過(guò)程相當(dāng)于完成了一項(xiàng)產(chǎn)品的制作,因此引入產(chǎn)品生命周期管理(PLM)的概念,PLM包括以下四個(gè)階段:(1)概念的產(chǎn)生,基于軟件包需求進(jìn)行產(chǎn)品定義,并創(chuàng)建第一個(gè)功能原型;(2)設(shè)計(jì),根據(jù)技術(shù)特征和要求,進(jìn)行原型測(cè)試和產(chǎn)品的實(shí)施,通過(guò)廣泛的測(cè)試驗(yàn)證產(chǎn)品的功能與規(guī)格;(3)發(fā)布,產(chǎn)品被制造出來(lái)并推向市場(chǎng);(4)服務(wù),對(duì)產(chǎn)品的維護(hù),包括對(duì)客戶的支持,最后不斷優(yōu)化,結(jié)束產(chǎn)品的周期。
在制作軟件包時(shí),主要面臨以下幾個(gè)過(guò)程:
圖1.5 軟件包開(kāi)發(fā)流程
首先,根據(jù)特定組件生成軟件包即根據(jù)需求將相應(yīng)的頭文件、庫(kù)文件等軟件組件利用PDSC文件進(jìn)行組織,在組織完成后即可利用軟件包生成工具生成對(duì)應(yīng)版本的軟件包,然后對(duì)新生成的軟件包進(jìn)行測(cè)試,給出示例測(cè)試程序,再將其包含如PDSC文件中,最后經(jīng)測(cè)試完成后生成最終的軟件包。
STM32PackCreator能夠通過(guò)圖形化界面設(shè)計(jì)軟件包,省去了我們手動(dòng)編寫PDSC文件和軟件包生成腳本文件的步驟,使用起來(lái)非常方便快捷,以下是使用STM32PackCreator制作軟件包的步驟。
(1)打開(kāi)STM32 PackCreator后,點(diǎn)擊File-new project from scratch。
圖1.6 生成新軟件包
(2)進(jìn)行軟件包的配置,包括軟件包生成的文件夾、軟件包的vendor、name和description屬性。
圖1.7 軟件包初始配置
(3)配置完成后,可以看到有四個(gè)屬性欄,他們分別代表軟件包的基本配置、版本控制、組件內(nèi)容和附加文件,如圖1.7所示:
圖1.8 軟件包屬性欄
(4)如下為制作Tencent OS-tiny軟件包時(shí)的配置:
(a)基礎(chǔ)配置
(b)軟件包版本控制
圖1.9 軟件包配置
(5)制作軟件包的關(guān)鍵在于Pack
Details的配置,這里實(shí)際上就是手工編寫PDSC文件的圖形化界面顯示,我們按照ARM
PDSC文件的編寫規(guī)范設(shè)計(jì)condition、設(shè)計(jì)組件結(jié)構(gòu)、添加組件即可。
圖1.10 軟件包組件配置
(6)添加附件,在Additional Files中,我們需要添加上軟件包的說(shuō)明文件(README.md)、利用軟件包生成的示例工程(Projects)和STM32CubeMX文件夾,此時(shí)我們點(diǎn)擊File-Save and Generate Pack,可以在之前設(shè)定的路徑下看到軟件包。然后我們?cè)俅螌⑦@個(gè)軟件包也加入到Additional Files中,如圖1.11所示,我們?cè)俅吸c(diǎn)擊File-Save and Generate Pack,就可以生成一個(gè)完整的STM32CubeMX軟件包了。
圖1.11 STM32CubeMX文件夾
圖1.12 Additional Files界面
圖1.13 生成軟件包
(7)另外,STM32PackCreator提供了參數(shù)預(yù)先配置的功能,使得我們?cè)赟TM32 CubeMX生成工程時(shí),可以對(duì)軟件包的參數(shù)進(jìn)行提前配置。首先在圖1.13(a)中添加我們需要用戶提前配置的一系列參數(shù),然后在圖1.13(b)中制作一個(gè)模板文件,此處我設(shè)置為頭文件的形式,然后將之前設(shè)置的一系列參數(shù)添加過(guò)來(lái)并保存,這樣用戶在使用軟件包生成工程的時(shí)候就可以預(yù)先配置參數(shù),并在生成工程時(shí)自動(dòng)生成名為tos_config的文件。
圖1.14 軟件包參數(shù)配置
結(jié)合TencentOS tiny的算法架構(gòu),本文設(shè)計(jì)的軟件包包括如表2-1所示的內(nèi)容:
表2-1 軟件包內(nèi)容
內(nèi)容 | 功能 | |
---|---|---|
arch | 包括TencentOS-tiny/arch/arm下內(nèi)核為Cortex-M0+、Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33的arch文件 | |
kernel | 包括TencentOS-tiny/kernel下的core、hal路徑中的文件、tos_config文件 | |
cmsis_os | 對(duì)應(yīng)TencentOS-tiny/osal/cmsis_os的文件 | |
helloworld_main | 用于測(cè)試軟件包的main文件 | |
example | mcu_it.c | 移植軟件包時(shí)需要按照該文件對(duì)中斷函數(shù)進(jìn)行修改 |
mcu_platform.h | 用戶可在此文件在添加對(duì)應(yīng)單片機(jī)的頭文件 |
軟件包具有以下功能:
(1)軟件包針對(duì)ARMCortex-M0+、Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23和Cortex-M33內(nèi)核進(jìn)行了TencentOS tiny軟件的封裝,用戶在安裝軟件包后能夠快速將TencentOS tiny相應(yīng)內(nèi)核的Keil工程中;
(2)軟件包能夠自動(dòng)適應(yīng)用戶所選的內(nèi)核,arch文件能夠根據(jù)內(nèi)核自動(dòng)顯示,從而方便用戶使用;
(3)用戶在勾選一個(gè)組件時(shí),軟件包會(huì)自動(dòng)提示還需要勾選其他模塊,并可利用界面中的Resolve一鍵勾選,防止遺漏;
(4)用戶可在STM32CubeMX上修改tos_config文件中的參數(shù),對(duì)TencentOS tiny的功能進(jìn)行裁剪。
接下來(lái)介紹Tencent.TencentOS-tiny軟件包的安裝,首先打開(kāi)STM32 Cube
MX軟件,如圖2.1(a)所示,點(diǎn)擊INSTALL/REMOVE,然后將軟件包拖進(jìn)來(lái),點(diǎn)擊I agree to
all the terms of the preceding License
Agreement,再點(diǎn)擊next進(jìn)行安裝,安裝完成界面如圖2.1(b)所示。
(a)
(b)
圖2.1 軟件包安裝
安裝好的軟件包可以在安裝路徑中查看內(nèi)容,路徑在Help-Updater Settings中查看。
(a)安裝路徑
(b) 軟件包安裝查看
圖2.2 軟件包安裝
移植步驟如下:
(1)點(diǎn)擊ACCESS TO MCU SELECTOR:
圖3.1 打開(kāi)MCU選擇的界面
(2)選擇STM32F407ZGTx,點(diǎn)擊Start Project:
圖3.2 選擇MCU
(3)點(diǎn)擊紅框中選項(xiàng)
圖3.3 選擇軟件包
(4)此時(shí)生成使用STM32
CubeIDE編譯的工程,首先選擇gcc版本的arch(如果是MDK-ARM版本的話就點(diǎn)擊armcc版本的arch),然后點(diǎn)擊黃色感嘆號(hào),再點(diǎn)擊Resolve。之后手動(dòng)添加helloworld_main和cmsis_os,并選擇對(duì)應(yīng)MCU版本的mcu_platform。最后點(diǎn)擊ok完成配置。
圖3.4 軟件包配置
(5)點(diǎn)擊Software Packs,打勾,并在下方進(jìn)行軟件包的參數(shù)配置。
圖3.5 軟件包參數(shù)配置
(6)注釋掉中斷函數(shù)PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進(jìn)行了配置。
圖3.6 中斷函數(shù)處理
(7)進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊GENERATE CODE,并點(diǎn)擊Open
Project。
圖3.7 工程生成配置
(8)在tos_config頭文件中加入頭文件:#include
“mcu_platform_M4.h”,點(diǎn)擊Build All,如下界面所示,編譯通過(guò),完成軟件包的移植。
圖3.8 工程配置與編譯
(1)點(diǎn)擊ACCESS TO BOARD SELECTOR,選擇Board為NUCLEO-F401RE,點(diǎn)擊Start Project:
圖3.9 Board選擇
(2)點(diǎn)擊紅框中選項(xiàng)
圖3.10 選擇軟件包
(3)此時(shí)生成使用MDK-ARM編譯的工程,首先選擇armcc版本的arch(如果是STM32 CubeIDE版本的話就點(diǎn)擊gcc版本的arch),然后點(diǎn)擊黃色感嘆號(hào),再點(diǎn)擊Resolve。之后手動(dòng)添加helloworld_main和cmsis_os,并選擇對(duì)應(yīng)MCU版本的mcu_platform。最后點(diǎn)擊ok完成配置。
圖3.11 軟件包配置
(4)點(diǎn)擊Software Packs,打勾,并在下方進(jìn)行軟件包的參數(shù)配置。
圖3.12 軟件包參數(shù)配置
(5)注釋掉中斷函數(shù)PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進(jìn)行了配置。
圖3.13 中斷函數(shù)處理
(6)進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊GENERATE CODE,并點(diǎn)擊Open Project。
圖3.14 工程生成配置
(8)打開(kāi)main_example.c,跳轉(zhuǎn)到tos_config頭文件,在其中加入頭文件:#include “mcu_platform_M4.h”,點(diǎn)擊Build All,如下界面所示,編譯通過(guò),完成軟件包的移植。
圖3.15 移植編譯
對(duì)單片機(jī)開(kāi)發(fā)板進(jìn)行測(cè)試,以正點(diǎn)原子探索者STM32F407ZGT6為例介紹TencentOS-tiny軟件包的移植。
(1)點(diǎn)擊ACCESS TO MCU SELECTOR:
圖3.16 打開(kāi)MCU選擇的界面
(2)選擇STM32F407ZGTx,點(diǎn)擊Start Project:
圖3.17 選擇MCU
(3)點(diǎn)擊紅框中選項(xiàng)
圖3.18 選擇軟件包
(4)此時(shí)生成使用MDK-ARM編譯的工程,首先選擇armcc版本的arch(如果是STM32 CubeIDE版本的話就點(diǎn)擊gcc版本的arch),然后點(diǎn)擊黃色感嘆號(hào),再點(diǎn)擊Resolve。之后手動(dòng)添加cmsis_os,并選擇對(duì)應(yīng)MCU版本的mcu_platform。最后點(diǎn)擊ok完成配置。
圖3.19 軟件包配置
(5)點(diǎn)擊Software Packs,打勾,并在下方進(jìn)行軟件包的參數(shù)配置。
圖3.20 軟件包參數(shù)配置
(6)注釋掉中斷函數(shù)PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進(jìn)行了配置,然后我們還需要對(duì)串口、下載等模塊進(jìn)行修改,如下:
(a)中斷函數(shù)處理
(b)中斷優(yōu)先級(jí)配置
(c)RCC配置
(d)SYS配置
(e)串口1配置
(f)時(shí)鐘樹(shù)配置
圖3.21 模塊配置
(7)進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊右上角GENERATE CODE,生成工程后點(diǎn)擊Open Project。
圖3.22 工程配置
(8)打開(kāi)tos_config頭文件,在其中加入頭文件:#include "mcu_platform_M4.h"
,然后使用如下的main文件:
/* USER CODE BEGIN Includes */#include "cmsis_os.h"/* USER CODE END Includes *//* USER CODE BEGIN 0 *///task1#define TASK1_STK_SIZE 512void task1(void *pdata);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);//task2#define TASK2_STK_SIZE 512void task2(void *pdata);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);void task1(void *pdata){ int count = 1; char buffer[64] = {0}; while(1) { snprintf(buffer, sizeof(buffer), "task 1 %04d/r/n", count++); HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 0xFFFF); osDelay(2000); }}void task2(void *pdata){ int count = 1; char buffer[64] = {0}; while(1) { snprintf(buffer, sizeof(buffer), "task 2 %04d/r/n", count++); HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 0xFFFF); osDelay(1000); }}/* USER CODE END 0 */int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ osKernelInitialize(); //TOS Tiny kernel initialize osThreadCreate(osThread(task1), NULL);// Create task1 osThreadCreate(osThread(task2), NULL);// Create task2 osKernelStart(); //Start TOS Tiny /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}
(9)編譯,然后使用ST-LINK下載到正點(diǎn)原子探索者單片機(jī)中
圖3.23 編譯、下載程序
(10)使用串口助手查看,兩個(gè)任務(wù)的延時(shí)設(shè)置不一樣,運(yùn)行效果也不一樣:
圖3.24 串口查看界面
1、騰訊物聯(lián)網(wǎng)操作系統(tǒng)網(wǎng)址https://github.com/OpenAtomFoundation/TencentOS-tiny
2、ST官方教程How to develop a STM32Cube Expansion Package - stm32mcu (stmicroelectronics.cn)
4、(1)STM32 CubeMX軟件包的制作—STM32PackCreator的使用_linwei_Cui的博客-CSDN博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/123563.html
摘要:利用可視化界面來(lái)進(jìn)行的相關(guān)配置,所以時(shí)鐘滴答定時(shí)器串口等就不用根據(jù)數(shù)據(jù)手冊(cè)去操作標(biāo)準(zhǔn)庫(kù)甚至是寄存器了,可以通過(guò)軟件直接生成。 使用STM32CubeMX初始化ST...
摘要:總線掛載的外設(shè)有等。外設(shè)地址映射片上外設(shè)區(qū)分為三條總線,根據(jù)外設(shè)速度的不同,不同總線掛載著不同的外設(shè),掛載低速外設(shè),和掛載高速外設(shè)。 第二章 STM32資源介紹 2...
摘要:?jiǎn)纹瑱C(jī)入門指南本文基于常神文章基礎(chǔ)上將單片機(jī)入門部分進(jìn)行細(xì)化盡可能細(xì)節(jié)做到可實(shí)施性先引用一下常神的文章首先假設(shè)大家已經(jīng)對(duì)高中物理的電路部分有所了解。單片機(jī),如,是一種根據(jù)程序控制引腳高低電平的可編程器件,有些場(chǎng)合又將這種行為稱作嵌入式。 ...
摘要:電源控制狀態(tài)寄存器中的用來(lái)表明是高于還是低于的電壓閥值。當(dāng)下降到閥值以下或上升到閥值之上時(shí),通過(guò)外部中斷線上升或下降邊沿觸發(fā)設(shè)置,產(chǎn)生中斷。在中斷處理函數(shù)中做相應(yīng)的保護(hù)措施。 在單片機(jī)低功耗的應(yīng)用中,我們常常需要使用外部中斷,在無(wú)中斷的情況下進(jìn)行休眠,這里講解一下使用STM32 Stm32Cube配置外部IO中斷,將io口...
摘要:灰度傳感器利用不同顏色的檢測(cè)面對(duì)光的反射程度不同的原理進(jìn)行顏色深淺檢測(cè)。這就是我們用的數(shù)字量灰度傳感器。數(shù)字量的灰度傳感器如果加入的是單片機(jī)處理數(shù)據(jù),那么可以把得到的原始數(shù)據(jù)加入濾波算法數(shù)據(jù)混合算法得到一個(gè)波動(dòng)小適應(yīng)環(huán)境強(qiáng)的數(shù)字傳感器。 文章目錄 引言 1.尋跡傳感器工作原理介紹 2.使用方...
閱讀 3163·2023-04-25 18:22
閱讀 2398·2021-11-17 09:33
閱讀 3319·2021-10-11 10:59
閱讀 3243·2021-09-22 15:50
閱讀 2815·2021-09-10 10:50
閱讀 865·2019-08-30 15:53
閱讀 455·2019-08-29 11:21
閱讀 2919·2019-08-26 13:58