附錄 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。