STM32F103C8T6單片機內部執行原理及啟動流程詳解

引言:為什么深入理解STM32啟動流程很重要?

STM32F103C8T6作為嵌入式開發中最常用的單片機之一,其內部執行原理啟動流程是理解嵌入式系統底層運行機制的核心。無論是開發Bootloader、調試HardFault異常,還是優化系統啟動速度,都需要對這兩部分有深入掌握。本文將從硬件架構到軟件執行,全方位解析STM32F103C8T6的工作原理,配合代碼示例和實戰技巧,幫助你徹底搞懂單片機從"上電"到"運行main函數"的全過程。

一、STM32F103C8T6內部執行原理

1.1 核心架構:Cortex-M3內核與哈佛結構

STM32F103C8T6基于ARM Cortex-M3內核,采用哈佛架構Harvard Architecture?),將指令存儲和?數據存儲分離為兩條獨立總線:

? I-Code總線:專門用于取指(32位寬),可一次讀取兩條16位Thumb指令

? D-Code總線:專門用于數據訪問(32位寬),支持字節/半字/字操作

這種架構的優勢在于指令讀取和數據訪問可并行執行,大幅提升運行效率。相比傳統51單片機的馮·諾依?曼結構(指令和數據共享總線),哈佛結構在高主頻下的性能優勢尤為明顯。

1.2?三級流水線:?指令執行的"工廠流水線"

Cortex-M3內核采用三級流水線設計,將指令執行分為三個階段并行處理:

1. 取指(Fetch從Flash或指令緩存讀取指令,由預取單元(Prefetch Unit)完成,支持指令預取緩沖

2. 解碼(Decode解析指令操作碼和操作數,生成控制信號

3. 執行(Execute由ALU(算術邏輯單元)、乘法器等執行運算,訪問寄存器或存儲器

流水線工作時序

? 時鐘周期1:指令1取指

? 時鐘周期2:指令1解碼,指令2取指

? 時鐘周期3:指令1執行,指令2解碼,指令3取指

這種并行處理使Cortex-M372MHz主頻下可實現1.25 DMIPS/MHz的性能(約90?DMIPS?)。

1.3?存儲器系統:?Flash?RAM與地址映射

STM32F103C8T6的存儲器資源如下:

? Flash:64KB(地址范圍:0x08000000~0x0800FFFF),用于存儲程序代碼和常量

? SRAM:20KB(地址范圍:0x20000000~0x20004FFF),用于存儲變量和堆棧

存儲器映射規則

Cortex-M3支持4GB地址空間,STM32將其劃分為多個區域:

? 0x00000000~0x1FFFFFFF:代碼區(Flash/系統存儲器/SRAM,通過啟動模式映射)

? 0x20000000~0x3FFFFFFF:SRAM區

? 0x40000000~0x5FFFFFFF:外設寄存器區(APB1/APB2/AHB外設)

? 0xE0000000~0xE00FFFFF:?內核外設區(NVIC、SysTick等)

1.4?總線架構:AHBAPB總線矩陣

STM32采用多級總線架構,通過總線矩陣( Bus?Matrix?)協調各主設備( CPU?DMA)對從設備?Flash?SRAM、外設)的訪問:

??AHB總線(Advanced High-performance Bus最高72MHz,連接高性能外設(Flash、SRAM、?DMA、LCD控制器等)

??APB1總線:最高36MHz,連接低速外設(USART2/3、I2C、SPI2等)

??APB2總線:最高72MHz,連接高速外設(GPIO、USART1、SPI1、ADC等)

1.5?時鐘系統:?從晶振到外設的"?時間管理者"

STM32的時鐘系統是最復雜也最核心的部分之一,支持5種時鐘源:

? HSI:內部高速RC振蕩器(8MHz,精度±1%)

? HSE:外部高速晶振(4~16MHz,通常接8MHz)

? LSI:內部低速RC振蕩器(40kHz,用于獨立看門狗)

? LSE:外部低速晶振(32.768kHz,用于RTC)

? PLL:鎖相環倍頻器(輸入可接HSI/2、HSE或HSE/2,倍頻2~16倍,最高輸出72MHz)

典型時鐘樹配置HSE=8MHz?):

HSE →?PLL輸入(不分頻)?PLL倍頻9??PLL輸出72MHz → 作為SYSCLK(系統時鐘)

? AHB分頻1?→ HCLK=72MHz(CPU主頻)

? APB1分頻2?→ PCLK1=36MHz

? APB2分頻1?→ PCLK2=72MHz

二、?STM32F103C8T6啟動流程詳解

2.1?啟動模式:?BOOT引腳如何決定程序從哪里啟動?

STM32的啟動模式由BOOT0BOOT1引腳的電平決定,共三種模式:

BOOT1

BOOT0

啟動模式

映射地址

用途

X

0

主Flash啟動

0x08000000

正常運行用戶程?序(默認模式)

0

1

系統存儲器啟動

0x1FFFF000

通過串口下載程?序(ISP模式)

1

1

SRAM啟動

0x20000000

調試臨時程序

(掉電不保存)

關鍵細節

? 復位時BOOT引腳電平被鎖存,修改后需復位生效

? 主Flash啟動時,0x00000000地址被映射到0x08000000(Flash首地址)

? 系統存儲器啟動時,執行ST出廠預置的Bootloader(支持USART1下載)

2.2?復位序列:?上電后CPU首先做什么?

STM32上電或復位( NRST引腳拉低)后,硬件自動執行以下步驟:

1. 初始化狀態寄存器:清除中斷標志,設置默認優先級

2. 讀取向量表前兩項

? 從0x00000000讀取MSP初始值(棧頂指針)

? 從0x00000004讀取復位向量(Reset_Handler函數地址)

3. 跳轉執行Reset_Handler:CPU將PC指針設置為復位向量地址,開始執行啟動代碼

2.3?啟動文件解析:?startup_stm32f10x_md.s的秘密

啟動文件(匯編編寫)是連接硬件復位和C語言環境的橋梁,以 ?startup_stm32f10x_md?.s?

(中等容量?設備)為例,主要完成以下工作:

2.3.1?堆棧定義

Stack_Size      EQU     0x00000400  ; 棧大小1KBAREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size  ; 分配棧空間
__initial_sp    ; 棧頂地址(棧從高地址向低地址生長)Heap_Size       EQU     0x00000200   ; 堆大小512BAREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base     ; 堆起始地址
Heap_Mem        SPACE   Heap_Size   ; 分配堆空間
__heap_limit    ; 堆結束地址

?

2.3.2?中斷向量表

AREA    RESET, DATA, READONLYEXPORT  __VectorsEXPORT  __Vectors_EndEXPORT  __Vectors_Size__Vectors       DCD     __initial_sp               ; 0: 棧頂指針DCD     Reset_Handler              ; 1: 復位中斷DCD     NMI_Handler                ; 2: NMI中斷DCD     HardFault_Handler          ; 3: 硬件錯誤中斷; ... 其他中斷向量(共68個)
__Vectors_End__Vectors_Size  EQU     __Vectors_End - __Vectors  ; 向量表大小

2.3.3?復位處理函數( Reset_Handler

復位后執行的第一個函數,負責初始化硬件和C環境:

Reset_Handler   PROCEXPORT  Reset_Handler             [WEAK]IMPORT  SystemInit                ; 引入系統初始化函數IMPORT  __main                    ; 引入C庫初始化函數; 1. 設置棧指針(已由硬件讀取__initial_sp完成); 2. 初始化數據段(.data)ldr     r0, =_sdata               ; 數據段目標地址(RAM)ldr     r1, =_edata               ; 數據段結束地址ldr     r2, =_sidata              ; 數據段源地址(Flash)movs    r3, #0
LoopCopyDataInit:cmp     r0, r1                    ; 復制未完成?ittt    ltldrlt   r4, [r2], #4              ; 從Flash讀取數據strlt   r4, [r0], #4              ; 寫入RAMblt     LoopCopyDataInit          ; 循環復制; 3. 初始化BSS段(清零)ldr     r2, =_sbss                ; BSS段起始地址ldr     r4, =_ebss                ; BSS段結束地址movs    r3, #0
LoopFillZerobss:cmp     r2, r4                    ; 清零未完成?itt     ltstrlt   r3, [r2], #4              ; 寫入0blt     LoopFillZerobss           ; 循環清零; 4. 調用SystemInit配置系統時鐘bl      SystemInit; 5. 調用__main初始化C庫,最終跳轉到main函數bl      __mainENDP

關鍵步驟解析

? 數據段(.data)復制:將Flash中存儲的已初始化全局變量復制到RAM

? BSS段清零:將未初始化全局變量在RAM中清零

? SystemInit:配置系統時鐘(默認使用HSI,可修改為HSE+PLL=72MHz)

??__main:C庫函數,初始化堆和棧,調用全局構造函數(C++),最終跳轉到用戶

2.4?SystemInit函數:?時鐘配置的核心

SystemInit函數(位于system_stm32f10x.c)負責系統時鐘初始化,默認配置如下:

void SystemInit(void) {/* 復位RCC寄存器到默認狀態 */RCC->CR |= 0x00000001U;                  // 使能HSIRCC->CFGR &= 0xF8FF0000U;                // 復位時鐘配置寄存器RCC->CR &= 0xFEF6FFFFU;                  // 關閉HSE、CSS、PLLRCC->CR &= 0xFFFBFFFFU;                  // 關閉HSE旁路RCC->CFGR &= 0xFF80FFFFU;                // 復位PLL配置/* 配置向量表偏移(默認在Flash) */
#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; // 向量表在SRAM
#elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;// 向量表在Flash(0x08000000)
#endif
}

默認時鐘:HSI(8MHz)作為系統時鐘,未啟用PLL,如需72MHz需修改SetSysClock函數:

static void SetSysClockTo72(void) {RCC->CR |= RCC_CR_HSEON;                 // 使能HSEwhile((RCC->CR & RCC_CR_HSERDY) == 0);   // 等待HSE就緒RCC->CFGR |= RCC_CFGR_PLLSRC_HSE;        // PLL輸入=HSERCC->CFGR |= RCC_CFGR_PLLMULL9;          // PLL倍頻9倍(8MHz*9=72MHz)RCC->CR |= RCC_CR_PLLON;                 // 使能PLLwhile((RCC->CR & RCC_CR_PLLRDY) == 0);   // 等待PLL就緒FLASH->ACR |= FLASH_ACR_PRFTBE;          // 使能Flash預取FLASH->ACR &= ~FLASH_ACR_LATENCY;FLASH->ACR |= FLASH_ACR_LATENCY_2;       // Flash等待周期=2(72MHz時)RCC->CFGR |= RCC_CFGR_SW_PLL;            // 系統時鐘=PLL輸出while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // 等待切換完成
}

三、代碼示例與實戰解析

3.1?啟動流程驗證:?通過LED觀察啟動階段

硬件連接?LEDPC13(低電平點亮)

代碼實現

// main.c
#include "stm32f10x.h"// 延時函數
void Delay(__IO uint32_t nCount) {while(nCount--) {}
}int main(void) {// 使能GPIOC時鐘(APB2外設)RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;// 配置PC13為推挽輸出GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13);GPIOC->CRH |= GPIO_CRH_MODE13_0;  // 輸出模式,最大速度10MHzwhile (1) {GPIOC->ODR ^= GPIO_ODR_ODR13;   // 翻轉PC13電平Delay(0xFFFFF);                 // 延時}
}

啟動階段分析

1. 上電后LED不亮(系統初始化階段)

2. SystemInit執行完畢后,LED開始閃爍(main函數執行)

3. 若LED不閃爍,可能是時鐘配置錯誤或啟動文件選擇不當(需使用 ?startup_stm32f10x_md?.s

3.2?中斷向量表重映射:?RAM啟動時的配置

當使用SRAM啟動或IAP升級時,需將向量表重映射到RAM

// 在SystemInit或main中配置
void VectorTableRemap(void) {// 將Flash中的向量表復制到RAM(0x20000000)uint32_t *pSrc = (uint32_t*)0x08000000;    // Flash向量表起始地址uint32_t *pDest = (uint32_t*)0x20000000;   // RAM向量表起始地址uint32_t i;for(i = 0; i < 68; i++) {                  // 復制68個中斷向量pDest[i] = pSrc[i];}// 配置VTOR寄存器(向量表偏移)SCB->VTOR = 0x20000000;                    // 向量表基地址=RAM起始地址
}

3.3?啟動時間優化:?72ms15ms的實戰技巧

默認啟動時間:約72ms(含Flash擦寫、C庫初始化等)

優化方法

1. 關閉不必要的外設時鐘

在SystemInit中僅使能必要外設時鐘(如GPIO、USART)

2. 優化Flash訪問

使能預取緩沖區(FLASH_ACR_PRFTBE=1),設置正確等待周期(72MHz時=2)

3. 跳過C庫初始化

若不使用全局構造函數,可在啟動文件中直接跳轉到main:

; 在Reset_Handler中替換bl __main為bl main
bl SystemInit
bl main        ; 直接調用main,跳過__libc_init_array

4. 使用HSI快速啟動

若對時鐘精度要求不高,使用HSI(8MHz)可避免HSE晶振啟動延時

四、常見問題與調試技巧

4.1?啟動失敗排查清單

現象

可能原因

解決方案

程序無反應

BOOT0引腳接高電平(進入?ISP模式)

將BOOT0接地,復位芯片

HardFault異常

棧溢出或非法內存訪問

增大棧大小(Stack_Size),?查指針操作

現象

可能原因

解決方案

時鐘配置后死機

PLL倍頻過高(超過72MHz)

重新計算PLL參數,確保輸出?≤72MHz

全局變量初始化失敗

.data或.bss段地址配置錯誤

檢查鏈接腳本( .ld)中的RAM?地址和大小

4.2?使用ST-Link調試啟動過程

1. 查看寄存器狀態

復位后暫停,查看??SP?是否等于?___initial_sp, ?PC?是否指向??Reset_Handler?

2. 設置斷點

在 ?Reset_Handler?SystemInitmain?函數設置斷點,觀察執行流程

3. 查看內存

檢查 ?0x20000000(RAM起始地址)是否已復制.data段數據,.bss段是否清零

總結與擴展

本文詳細解析了STM32F103C8T6的內部執行原理(哈佛架構、三級流水線、存儲器映射、時鐘系統)和啟動流程(復位序列、啟動模式、啟動文件、SystemInit),并通過代碼示例展示了實戰應用。掌握這些知識后,你可以:

  1. 開發自定義Bootloader,實現IAP固件升級
  2. 優化系統啟動速度,滿足實時性要求
  3. 快速定位HardFault等底層異常

推薦擴展閱讀:

  1. 《STM32F103參考手冊(RM0008)》:深入了解寄存器配置
  2. 《Cortex-M3權威指南》:理解內核架構和異常處理
  3. STM32CubeMX:圖形化配置時鐘和外設,自動生成初始化代碼

如果覺得本文對你有幫助,歡迎點贊+關注,后續將帶來更多STM32底層開發實戰內容!如有疑問,可在評論區留言討論~?

附錄:關鍵地址速查表

名稱

地址范圍

用途

Flash

0x08000000~0x0800FFFF

程序代碼存儲

SRAM

0x20000000~0x20004FFF

變量和堆棧

向量表(默認)

0x08000000~0x08000107

中斷服務函數地址數組

RCC寄存器

0x40021000~0x400213FF

時鐘控制寄存器

GPIO寄存器

? ? ? ? ? ?0x40010800~0x40010BFF?(GPIOC)

GPIO控制寄存器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88401.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python 常用的數學科學/計算機視覺等工具】

當然有&#xff01;在科學計算、機器學習、圖像處理等領域&#xff0c;scikit-learn、scikit-image&#xff08;skimage&#xff09;、SciPy、OpenCV 是非常重要的庫&#xff0c;但它們不是唯一的。以下是一些與它們類似或互補的項目&#xff0c;按照用途分類列出&#xff1a; …

LUMP+NFS架構的Discuz論壇部署

一、配置準備 每臺主機都安裝mysql、nfs、php、mysql 對每臺主機都進行關閉防火墻、上下文等&#xff0c;減少阻礙[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安裝插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基礎概念deque和vector一樣都是對元素的操作&#xff0c;不同點&#xff1a;vector對元素增刪后元素會往前或往后移&#xff0c;如果數據不大沒有太多影響&#xff0c;如果數據很大效率會變低&#xff1b;deque對元素增刪不會使元素位置改變&#xff0c;所有效率會變高。二.…

字節跳動高質量聲音克龍文字轉語音合成軟件MegaTTS3整合包

MegaTTS3是抖音團隊聯合國內其他大學研發的一款語音合成及聲音克龍應用&#xff0c;可實現零樣本語音克龍及富有情感的自然語音合成。我基于當前最新版制作了免安裝一鍵啟動整合包。 MegaTTS3介紹 MegaTTS 3 是字節跳動&#xff08;ByteDance&#xff09;與浙江大學聯合開發的…

RPC:遠程過程調用機制

目錄 1、概念 2、RPC架構 2.1 RPC的四個核心組件 2.2 訪問流程 3、關鍵概念 3.1 接口定義語言 (IDL - Interface Definition Language) 3.2 序列化與反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 網絡傳輸 (Transport) 3.4 服務發…

EPLAN 電氣制圖(六):電機正反轉副勾主電路繪制

一、項目背景&#xff1a;為什么繪制電機正反轉主電路&#xff1f; 在多功能天車系統中&#xff0c;電機正反轉控制是核心功能之一。通過 EPLAN 繪制主電路&#xff0c;不僅能清晰展示電源分配、換相邏輯和線纜連接&#xff0c;還能為后續 PLC 控制設計奠定基礎。本次以西門子設…

JAVA JVM對象的實現

jvm分配內存給對象的方式1. 內存分配的總體流程對象內存分配的主要步驟&#xff1a;類加載檢查&#xff1a;確認類已加載、解析和初始化。內存分配&#xff1a;根據對象大小&#xff0c;從堆中劃分內存空間。內存初始化&#xff1a;將分配的內存空間初始化為零值&#xff08;不…

CVE-2023-41990/CVE-2023-32434/CVE-2023-38606/CVE-2023-32435

CVE-2023-41990&#xff08;GitLab 命令注入漏洞&#xff09;漏洞原理CVE-2023-41990是GitLab CE/EE&#xff08;社區版/企業版&#xff09;中項目導出功能的一個命令注入漏洞。具體原理如下&#xff1a;①GitLab在導出項目時&#xff0c;會調用git命令生成項目存檔&#xff08…

RAG實戰指南 Day 8:PDF、Word和HTML文檔解析實戰

【RAG實戰指南 Day 8】PDF、Word和HTML文檔解析實戰 開篇 歡迎來到"RAG實戰指南"系列的第8天&#xff01;今天我們將深入探討PDF、Word和HTML文檔解析技術&#xff0c;這是構建企業級RAG系統的關鍵基礎。在實際業務場景中&#xff0c;80%以上的知識都以這些文檔格式…

【AXI】讀重排序深度

我們以DDR4存儲控制器為例&#xff0c;設計一個讀重排序深度為3的具體場景&#xff0c;展示從設備如何利用3級隊列優化訪問效率&#xff1a;基礎設定從設備類型&#xff1a;DDR4存儲控制器&#xff08;支持4個存儲體Bank0-Bank3&#xff09;讀重排序深度&#xff1a;3&#xff…

牛馬逃離北京(回歸草原計劃)

豐寧壩上草原自駕游攻略&#xff08;半虎線深度版&#xff09; &#x1f697; 路線&#xff1a;北京/承德 → 豐寧縣城 → 半虎線 → 大灘鎮&#xff08;2天1夜&#xff09; &#x1f3af; 核心玩法&#xff1a;免費草原、高山牧場、日落晚霞、牧群互動、星空煙花&#x1f33f;…

【前端】【Echarts】ECharts 詞云圖(WordCloud)教學詳解

效果ECharts 詞云圖&#xff08;WordCloud&#xff09;教學詳解 詞云圖是一種通過關鍵詞的大小、顏色等視覺差異來展示文本數據中詞頻或權重的圖表。它直觀、形象&#xff0c;是數據分析和內容展示中的利器。 本文將帶你從零開始&#xff0c;學習如何用 ECharts 的 WordCloud 插…

【arXiv 2025】新穎方法:基于快速傅里葉變換的高效自注意力,即插即用!

一、整體介紹 The FFT Strikes Again: An Efficient Alternative to Self-AttentionFFT再次出擊&#xff1a;一種高效的自注意力替代方案圖1&#xff1a;FFTNet整體流程&#xff0c;包括局部窗口處理&#xff08;STFT或小波變換&#xff0c;可選&#xff09;和全局FFT&#xff…

通過vue如何利用 Three 繪制 簡單3D模型(源碼案例)

目錄 Three 介紹 創建基礎3D場景 創建不同類型的3D模型 1. 球體 2. 圓柱體??????? 3. 平面??????? 加載外部3D模型 添加交互控制 創建可交互的3D場景 Three 介紹 Three.js是一個強大的JavaScript 3D庫&#xff0c;可以輕松地在網頁中創建3D圖形。下面我…

云蝠智能 Voice Agent 落地展會邀約場景:重構會展行業的智能交互范式

一、行業痛點與 AI 破局在會展行業數字化轉型的浪潮中&#xff0c;傳統展會邀約模式面臨多重挑戰&#xff1a;人工外呼日均僅能處理 300-500 通電話&#xff0c;且無效號碼占比高達 40% 以上&#xff0c;導致邀約效率低下。同時&#xff0c;個性化邀約話術設計依賴經驗&#xf…

idea如何打開extract surround

在 IntelliJ IDEA 中&#xff0c;"Extract Surrounding"&#xff08;提取周圍代碼&#xff09;通常指 ?將一段代碼提取到新的方法、變量或類中&#xff0c;但更常見的操作是 ??"Surround With"&#xff08;用代碼結構包圍&#xff09;?。以下是兩種場景…

window顯示驅動開發—XR_BIAS 和 BltDXGI

Direct3D 運行時調用驅動程序的 BltDXGI 函數&#xff0c;以僅對XR_BIAS源資源執行以下操作&#xff1a;復制到也XR_BIAS的目標未修改的源數據的副本可接受點樣本的拉伸旋轉由于 XR_BIAS 不支持 MSAA) (多個示例抗鋸齒&#xff0c;因此驅動程序不需要解析XR_BIAS資源。核心規則…

web網頁開發,在線%ctf管理%系統,基于html,css,webform,asp.net mvc, sqlserver, mysql

webform,asp.net mvc。數據庫支持mysql,sqlserver經驗心得 每次我們寫crud沒啥技術含量&#xff0c;這沒法讓咱們進入大廠&#xff0c;剛好這次與客戶溝通優化方案建議&#xff0c;咱們就把能加的幫他都加上去。一個ctf管理系統基本crud&#xff0c;并進行不同分層開發&#xf…

面試技術問題總結一

MySQL的幾種鎖機制一、從鎖的粒度角度劃分表級鎖機制&#xff1a;它是對整張表進行鎖定的一種鎖。當一個事務對表執行寫操作時&#xff0c;會獲取寫鎖&#xff0c;在寫鎖持有期間&#xff0c;其他事務無法對該表進行讀寫操作&#xff1b;而當事務執行讀操作時&#xff0c;會獲取…

π0.5的KI改進版——知識隔離:讓VLM在不受動作專家負反饋的同時,繼續輸出離散動作token,并根據反饋做微調(而非凍結VLM)

前言 過去的一個月(25年6.4-7.4)&#xff0c;我司「七月在線」具身長沙分部為沖刺一些為客戶來現場看的演示項目&#xff0c;基本都用lerobot的那套框架 比如上周五(7.4日)晚上&#xff0c;通過上周五下午新采的第五波數據做『耳機線插入耳機孔』的任務&#xff0c;推理十次之…