找不到韌體工作之亡羊補牢專案-Part1

找不到韌體工作之亡羊補牢專案-Part1

由於面試不順利,決定來亡羊補牢,補點小專案
一次性加了那麼多東西,最好是組的起來 : )


專案規劃與準備清單

系列文章

以下都是目前幻想出來的

Part 8:Game Task:電子寵物狀態機
把 input 和 display 串起來,做寵物狀態、飢餓/心情/互動、簡單 animation。

Part 9:感測器整合:MPU-6050 與 BME280
I2C register driver、校正資料、週期性 sensor task、motion / environment event。timeout、> retry、bus error。

Part 10:通訊模組:BLE 與 NFC 互動
UART AT command、BLE RSSI / proximity、PN532 UID 讀取。NFC 走 UART / I2C / SPI 哪個比較適合。

Part 11:資料儲存:SPI Flash 與存檔格式
W25Q128 erase/write/read、CRC、A/B slot、防止寫到一半斷電。

Part 12:音效、震動與回饋系統
Timer PWM 蜂鳴器、震動馬達、非阻塞 feedback task。

Part 13:系統整合與 Debug 筆記
邏輯分析儀看 SPI/I2C/UART、log 格式、常見 bug、task 卡死、stack 不夠、priority 設錯。


目的

這個專案主要是為了補強 STM32 韌體開發能力,練習內容包含:

  • 使用 FreeRTOS 設計多任務架構,例如 input、display、game、BLE、NFC、sensor、storage、audio 與 haptic task
  • 使用 SPI 驅動 TFT 螢幕與外部 SPI Flash
  • 使用 I2C 整合 IMU 與環境感測器
  • 使用 UART 控制 BLE / NFC 模組,並保留 debug console
  • 使用 GPIO 處理按鍵、五向導航鍵與外部中斷
  • 使用 Timer / PWM 控制蜂鳴器音效、震動馬達回饋與可能的背光亮度
  • 練習各類周邊的 driver 開發、初始化流程、錯誤處理與 timeout / retry 機制
  • 使用邏輯分析儀驗證 SPI、I2C、UART 與 GPIO interrupt timing
  • 以一個接近產品原型的方式,整合顯示、輸入、感測、通訊、儲存、音效與觸覺回饋

這個專案會先使用 NUCLEO-F767ZI 完成 FreeRTOS 架構、周邊 driver 與系統整合;
未來如果功能穩定,再考慮移植到較小型或內建 BLE 的 STM32 平台,例如 STM32WB55,做成更接近可攜式產品的版本。


一個有趣的小目標

雖然這個專案一開始是因為想補強韌體開發能力,但我不想只是為了找工作或練習周邊,而硬湊一堆功能。
因此想做一個覺得有趣,而且每個功能都能自然整合進去的小裝置。

所以最後決定做一台 Game Boy 風格的互動電子寵物裝置。
可以顯示像素風寵物畫面,支援按鍵操作、BLE 靠近偵測、NFC touch 互動、感測器輸入、音效、震動回饋與資料儲存。

ChatGPT 生成的示意圖


為什麼從 STM32 開始

Arduino、ESP32、STM32 都有成熟的開發生態,也都可以做到 interrupt、timer、RTOS、UART / SPI / I2C、感測器控制與實機整合。ESP32 有 FreeRTOS,Arduino 也不是完全不能碰底層;同樣地,STM32 也可以透過不同系列或外部模組支援無線連線。

Arduino、ESP32、STM32 三者比較

Arduino

Arduino 的預設開發模式偏向快速驗證與高階封裝,很多硬體初始化、driver 細節與資源配置已經被 framework 處理掉。但容易停留在呼叫 library 完成功能,而不是完整理解底層初始化與硬體互動流程。

ESP32

ESP32 的功能整合度高,實務上常會同時接觸 FreeRTOS、Wi-Fi / BLE stack、dual-core、ESP-IDF 架構與平台特定 API。這些內容很有價值,但學習路線比較容易往連網 SoC、應用整合與 Espressif 生態

STM32

STM32 的開發流程則比較直接圍繞一般 MCU 韌體常見的核心主題,例如 clock tree、GPIO、interrupt、DMA、timer、UART / SPI / I2C、memory layout、RTOS integration,以及 driver layer。

以韌體工程師的角度

IC 設計公司的產品類型很多,不同公司的 firmware / driver 工作也不一樣,例如:

  • MediaTek 不只做 wireless chip,也有手機 SoC、IoT、TV、networking、automotive 與 ASIC 相關產品。
  • Realtek 不只做音效 IC,也有 Ethernet、Wi-Fi、Bluetooth、網通 IC、audio codec 與 multimedia SoC。
  • Novatek 主要在 display driver IC、TCON、TDDI、TV / display SoC。
  • PhisonSilicon Motion 則比較偏 NAND flash controller、SSD controller、eMMC / UFS storage controller。

所以從 IC 設計公司的角度來看,韌體工程師接觸的不是單一情境,而是依產品線不同,去設定與驗證不同的硬體 IP block,例如:

  • SoC:可能會碰到 clock、boot flow、power management、interrupt、DMA。
  • 網通晶片:可能會碰到 Ethernet / Wi-Fi / Bluetooth driver、MAC、PHY、queue、封包收發。
  • Display IC:可能會碰到 panel init sequence、display timing、MIPI command、gamma table。
  • Audio codec:可能會碰到 I2S / PCM、PLL、sample rate、audio path。
  • SSD controller:可能會碰到 NAND flash、ECC、FTL、wear leveling、bad block management 與 NVMe / SATA command flow。

這些產品線雖然不同,但都需要看硬體文件、理解 memory map、設定 register、處理 interrupt / DMA,並透過實機驗證硬體行為。STM32 不能直接模擬這些 IC 公司的晶片環境,但適合用來建立這些共通基本功。


為什麼選擇 FreeRTOS

這個專案雖然是做一台 Game Boy 風格的互動電子寵物裝置,但韌體架構不打算完全照以前 Game Boy 那種方式來設計。以前的 Game Boy 是一台硬體架構相對固定的遊戲主機,CPU、顯示控制、音效、按鍵輸入、記憶體映射與卡匣資料讀取都有明確分工。
遊戲程式通常會以主迴圈為核心,配合 VBlank interrupt、timer interrupt、按鍵掃描,以及固定時機的畫面資料更新,來完成輸入處理、遊戲狀態更新、畫面繪製與音效控制。
這種設計很適合當時的遊戲主機,因為它的主要任務很明確:根據每一個 frame 更新輸入、遊戲邏輯、畫面與音效。

但這次的專案目標不只是做一個像 Game Boy 的外觀或畫面,而是想把顯示、輸入、感測、BLE、NFC、儲存、音效與震動回饋都整合在同一個小系統裡。這些功能各自有不同的更新頻率與即時性需求,如果全部塞在同一個 bare-metal while loop 裡,後續很容易變成一堆狀態判斷、delay、flag 與 callback 互相交錯,程式架構會越來越難維護。

透過 FreeRTOS,可以練習 task priority、queue、semaphore、mutex、software timer,以及 interrupt 與 task 之間的資料同步。因為實際 firmware 開發常常需要處理多個模組同時運作、共享資源保護、事件通知、timeout 與錯誤恢復。


準備的物品

約花 TWD 4,000,其中 NUCLEO-F767ZI 約 TWD 830DSLogic Plus 邏輯分析儀約 TWD 2,100

類別 名稱與規格 技術 價格 連結
主開發板 STM32 Nucleo-144 NUCLEO-F767ZI 開發板,STM32F767ZIT6 MCU STM32、FreeRTOS、SPI、I2C、UART、GPIO、DMA NT$831 淘寶 / spec
顯示器 3.2 吋 ILI9341 TFT LCD,320×240,支援 SPI / 16-bit parallel 介面 SPI、TFT driver、bitmap、tilemap、sprite、DMA NT$316 淘寶 / spec
BLE 模組 E104-BT5032A-TB BLE 5.0 UART 模組,nRF52832 UART、AT command、BLE advertising、scanning、RSSI NT$287 淘寶 / spec
NFC 模組 PN532 NFC / RFID 讀寫模組 UART / I2C / SPI、NFC frame、UID 讀取 NT$93 淘寶 / spec
IMU 感測器 MPU-6050 / GY-521 六軸 IMU 模組,加速度計 + 陀螺儀 I2C、register driver、motion detect、EXTI NT$30 淘寶
環境感測器 BME280 3.3V 環境感測模組,溫度 / 濕度 / 氣壓 I2C、sensor calibration、週期性 sensor task NT$106 淘寶 / spec
外部 Flash W25Q128 SPI NOR Flash 模組,128 Mbit / 16 MB SPI、Flash erase/write、CRC、A/B save slot NT$20 淘寶
邏輯分析儀 DSLogic Plus 個人版,16 通道邏輯分析儀,最高 400 MS/s Protocol decode、timing debug、firmware validation NT$2,104 淘寶
震動回饋 微型直流震動馬達模組,GPIO 控制 GPIO / PWM、haptic task NT$24 淘寶
音效 無源蜂鳴器模組,低電位觸發 Timer PWM、audio task NT$6 淘寶
操作輸入 五向導航按鍵模組,方向鍵 + 中央確認鍵 GPIO、debounce、input event queue NT$17 淘寶
操作輸入 類比搖桿 / 遊戲輸入擴充模組 GPIO / ADC、按鍵事件 NT$32 淘寶
按鍵 12×12×7.3mm 直插式輕觸開關,方頭,20 顆 GPIO、debounce、short / long press NT$14 淘寶
按鍵配件 12×12mm 輕觸開關用圓形按鍵帽,白色,10 顆 按鍵手感、外觀原型 NT$2 淘寶
原型接線 MB-102 透明麵包板, 165×55mm,2 片 模組整合、快速測試、原型接線 NT$24 淘寶
原型接線 21cm 杜邦線組,40P 彩排線,母對母 / 公對公 / 母對公各 1 組 開發板、麵包板與模組接線 NT$58 淘寶

NUCLEO-F767ZI 接腳圖左
NUCLEO-F767ZI 接腳圖右
NUCLEO-F767ZI 接腳圖金屬左
NUCLEO-F767ZI 接腳圖右

找不到韌體工作之亡羊補牢專案-Part1

https://rebakery.net/posts/gb-project/part1/

Author

Bakery Chen

Posted on

2026-05-25

Updated on

2026-06-03

Licensed under

Comments