附錄 A 建議 BOM

項目 規格 數量
開發板 NUCLEO-F429ZI(主線)或 F407G-DISC1 1
AI 進階板 STM32H747I-DISCO(路徑 B) 可選
語音模組 CI-03T / ASRPRO / Gravity 離線語音 1(路徑 A)
麥克風 INMP441 I2S 模組 1(路徑 B)
助理閘道 ESP32 DevKit(HomeSpan/fauxmo/Matter) 1(第 13 章)
LED + 電阻 5 mm,220 \(\Omega\)–1 k\(\Omega\) 3 + 3
蜂鳴器 主動、3.3 V 可驅 1
繼電器 5 V 光耦模組,低/高電平看標示 1
MOSFET 邏輯閘極 N 溝,加飛輪二極體 1
風扇 12 V 或改用 LED 模擬 1
舵機 SG90 + 5 V 獨立供电(共地) 1
感測 DHT22 或 SHT31 可選
線材 杜邦線、麵包板、USB —

供電:舵機與繼電器不要跟 MCU 搶 Nucleo 的 5 V 若電流 接近上限;外接 5 V 時共地。12 V 風扇電源與 MCU 隔離地線相連 即可。

附錄 A2 腳位建議(NUCLEO-F429ZI)

實際以你的 .ioc 為準,下表為教材韌體 pin_map.h 預設。

功能 腳 週邊
LD1 / LD2 / LD3 PB0 / PB7 / PB14 板上 LED
使用者按鍵 PC13 EXTI
VCP UART PD8 / PD9 USART3
ASR 模組 UART PG14 / PG9 USART6
助理閘道 UART 預設共用 USART6,或改 USART2 第 13 章
蜂鳴器 PF7 GPIO
繼電器 IN PF8 GPIO
燈 PWM PA6 TIM3_CH1
風扇 PWM PA7 TIM3_CH2
舵機 PWM PB8 TIM4_CH3
I2S 麥 依模組(SPI2/I2S2) 見 lab07
DHT22 PG1 GPIO 時序

附錄 B STM32 官方延伸

學員做完本課程後,建議依序閱讀(名稱以 ST 網站當年度為準):

  • X-CUBE-FREERTOS / CubeMX Middleware FREERTOS:官方移植、 CMSIS-RTOS v2、低功耗 tickless 範例。

  • X-CUBE-AI 與 STM32Cube.AI Developer Cloud:模型 分析、量化、RAM/Flash 報告。

  • FP-AI-NANOEDG1、音訊 KWS 應用筆記:特徵參數與 DMA 管線。

  • STM32H747I-DISCO 音訊與 AI 示範:雙核時可把推論放 M7、 控制放 M4(進階選修)。

  • X-CUBE-IAP-USART、各系列 AN(IAP / 雙 Bank):OTA 實作 細節與 Flash 擦寫時序。

  • UM1722(F4 HAL)、對應系列 Reference Manual:時鐘與 IWDG 公式的唯一權威。

  • Matter(CSA)與 esp-matter:跨 Siri、Alexa、Google 的 統一配網與裝置模型(第 13 章)。

  • HomeSpan(ESP32 上的 HomeKit HAP)、fauxmoESP (Alexa 區網模擬)、Home Assistant(HomeKit Bridge、 Alexa、Google Assistant 整合)。

本教材的任務切分刻意對齊這些範例:你把 Audio 任務換成官方 PDM 濾波、 把 |kws_infer| 換成官方 |ai_run|,產品狀態機可以不動。

附錄 C 常見錯誤速查

現象 先查什麼
下載成功但不跑 時鐘、Reset_Handler、是否停在 HardFault
HAL_Delay 卡死 SysTick 是否已被 FreeRTOS 占用卻仍呼叫 HAL_Delay
任務建立失敗 |configTOTAL_HEAP_SIZE|、堆疊單位是 word
DMA 永遠 0 緩衝在 CCM、沒開 DMA 時鐘、H7 cache
鮑率亂碼 APB 時鐘與 USART 設定、HSE 沒開卻當 8 MHz
I2S 雜訊 / 辨識差 PLLI2S 不準、WS 左右聲道、地迴路
繼電器狂跳 觸發電平反了、腳浮空、沒去抖
舵機抖動 5 V 不足、地未共、PWM 不是 50 Hz
餵狗仍復位 逾時太短、某任務心跳停、FAULT 位置 1
Stop 後醒來時鐘錯 沒有重新 |SystemClock_Config|
OTA 變磚 擦錯 Bank、沒 CRC、bootloader 跳到空區
助理能控但 App 不同步 |EVT_GW_DIRTY| 沒置位、狀態行欄位順序被改動
Alexa 找不到裝置 fauxmo 需 80 埠、與 Echo 同一區網、裝置名用英文

附錄 D FreeRTOSConfig 教學預設

#define configCPU_CLOCK_HZ 180000000 #define configTICK_RATE_HZ 1000 #define configMAX_PRIORITIES 7 #define configMINIMAL_STACK_SIZE 128 #define configTOTAL_HEAP_SIZE (40 * 1024) #define configUSE_PREEMPTION 1 #define configUSE_TIME_SLICING 1 #define configUSE_MUTEXES 1 #define configUSE_COUNTING_SEMAPHORES 1 #define configUSE_TIMERS 1 #define configTIMER_TASK_PRIORITY 3 #define configTIMER_QUEUE_LENGTH 8 #define configCHECK_FOR_STACK_OVERFLOW 2 #define configUSE_MALLOC_FAILED_HOOK 1 #define configASSERT(x) if((x)==0)taskDISABLE_INTERRUPTS();for(;;);

|vApplicationStackOverflowHook| 與 |vApplicationMallocFailedHook| 在 firmware/common/src/app_hooks.c:點燈 + 置位 FAULT。

附錄 E 課程評量建議

  • 週測驗(選擇 + 短答):NVIC vs 任務優先權、Queue vs Event Group、為何 ISR 禁用 printf。

  • 實驗簽核:每週 lab 的 UART 截圖或助教現場看一眼。

  • 期末:final 專案 3 分鐘 demo + 程式走讀 10 分鐘。

附錄 F 韌體目錄索引

firmware/common/ 型別、腳位、log、心跳、設備 API
lab01_blinky/ 第 2 章
lab02_gpio_devices/ 第 3 章
lab03_pwm_fan_motor/ 第 4 章
lab04_freertos_blinky/ 第 5 章
lab05_queue_semaphore/ 第 6 章
lab06_event_group/ 第 7 章
lab07_audio_capture/ 第 8 章
lab08_asr_module/ 第 9 章路徑 A
lab08_asr_edgeai/ 第 9 章路徑 B 接線
lab09_voice_controller/ 第 10 章
lab10_comms/ 第 11 章
lab11_watchdog_lpm_ota/ 第 12 章
lab12_assistant_gateway/ 第 13 章(含 ESP32 橋接與 HA 設定)
voice_home_final/ 總成
tools/ 序列埠腳本

編譯本教材:於 latex/ 目錄執行 latexmk -xelatex main.tex。