STM32 串列埠讀取教學
用 Keil 與 STM32F103 開發板快速驗證 ANROT UART 資料流,適合 MCU 端 bring-up 與韌體整合。
- stm32
- mcu
- uart
- tutorial
STM32 讀取 ANROT UART 資料
協議支援
| 協議 / frame | 支援狀態 | 這份 example 的處理方式 |
|---|---|---|
0x91 IMUSOL | 支援 | 單機 float frame,輸出到 receive_imusol 並由 dump_data_packet() 列印。 |
0x62 GWSOL | 支援 | Gateway float collection,遍歷 receive_gwsol.receive_imusol[]。 |
0x63 GWSOL Compact | 不支援 | STM32 decoder 沒有 compact gateway 分支。 |
0x90, 0xA0, 0xB0, 0xB1, 0xC0, 0xD0, 0xD1 | 支援 | 可解析單欄位輸出模式。 |
0xF0 Pressure | 略過 | 程式只跳過 pressure item,沒有保存或列印 pressure。 |
這份範例使用 STM32F103 與 Keil uVision 讀取 ANROT UART 封包,適合 MCU 端第一次 bring-up。範例會在 USART2 接收資料,解析後透過開發板的 USB_232 口輸出到電腦端序列埠除錯助手。
下載範例
瀏覽器下載並解壓縮: demo-stm32-en.zip
主要結構:
CH_demo_stm32/
├── app/
│ ├── inc/packet.h
│ ├── inc/imu_data_decode.h
│ └── src/packet.c, imu_data_decode.c
├── USER/
│ ├── main.c
│ └── imu_decode.uvprojx
└── STM32F10x_FWLib/
測試環境
- Windows 10 x64。
- Keil uVision V5.28。
- STM32F103ZET6 開發板。
- ANROT UART TTL 輸出產品。
硬體接線
ANROT UART 為 TTL 電位。若產品端為 RS232 或 RS485,需先轉成 TTL 再接 STM32。
| ANROT PIN | STM32F103 |
|---|---|
| RXD | PA2 / USART2_TX |
| TXD | PA3 / USART2_RX |
| 3.3V | 3V3 |
| GND | GND |
接線後,使用 USB 線連接開發板的 USB_232 口到電腦。
編譯與下載
- 開啟
CH_demo_stm32/USER/imu_decode.uvprojx。 - 確認 target 與晶片型號符合開發板。
- Build 專案。
- 將程式下載到 STM32。
範例預設 UART baud rate 為 115200。若產品端已改成其他波特率,請同步修改 USER/main.c 與 USART 初始化設定。
觀察輸出
開啟序列埠除錯助手,選擇開發板對應的 COM port,baud rate 設為 115200。成功後會看到:
Device ID: 0
Frame Rate: 100Hz
Acc(G): 0.010 0.010 1.003
gyr(deg/s): -0.08 0.05 -0.03
eul(R P Y): -0.51 0.58 3.86
quat(W X Y Z): 0.999 0.005 -0.004 0.034
程式整合重點
USART2_IRQHandler()每收到一個 byte 就呼叫packet_decode(ch)。imu_data_decode_init()必須在主迴圈開始前呼叫一次。- 解碼後的單機資料在
receive_imusol。 - Gateway / 多節點資料在
receive_gwsol.receive_imusol[]。
常見問題
沒有資料輸出
確認 TX/RX 是否交叉連接、GND 是否共地、產品波特率是否為 115200。
資料亂碼或解析不到
通常是波特率不一致或電位不相容。先用 USB-UART 在電腦端驗證產品輸出,再接到 STM32。