Introduction
本文說明如何自動計算 PIC18 MCU 的 SPBRG (Baud Rate Generator)。
Highlights
本文討論下列項目:
- Baud Rate 計算公式
- 自動計算 SPBRG
- PICMultiCalc 工具
Baud Rate 計算公式
- USART 的 Baud rate 主要是由 SPBRGH (high byte) 和 SPBRG (low byte) 這兩個位元組決定
- BRGH (TXSTA<2>) 決定 High 或 Low speed baud rate, 將 BRGH 設為 1 可讓實際值更接近想要的 baud rate
- BRG16 (BAUDCON<3>) 用來決定 8-bit 或 16-bit mode, 當 BRG16 設為 1 時,就要搭配 SPBRGH 來設定 baud rate
- 設定 BRGH 或 BRG16 可以減少 baud rate error
Baud rate 計算公式表:
SPBRG 計算範例:
自動計算 SPBRG
既然知道計算方法,就可以寫成程式自動計算 SPBRG:
註:
-
按照 datasheet 的說法,原本 8-bit mode 下的 SPBRG 計算式應為 (((FOSC)/BAUD_RATE)/16 - 1),因為 C preprocessor 會無條件捨去小數位,115200bps 算得的 SPBRG 為 20 比用計算機算得的值少 1,錯誤率超過了 3%。後來我參考 Microchip TCP/IP Demo App 的寫法,將計算式改成 ((((FOSC)+8*BAUD_RATE)/BAUD_RATE)/16 - 1) 後,算出的 SPBRG 即為 21,錯誤率降至 1.36%。16-bit mode 則加上 32 * BAUD_RATE,至於 8*BAUD_RATE 或 32*BAUD_RATE 是怎麼算來的,原因不詳。
使用範例:
執行結果:
PICMultiCalc 工具
另一個替代方案:有網友寫了一支方便的工具 PICMultiCalc,可以用來計算 SPBRG。以 PIC452 為例,只要輸入 CPU 頻率 40MHz,並設定好想要的 baud rate 38400,PICMultiCalcu 便立刻算出適當的 SPBRG 值,接下來把算出的 SPBRG 值填到程式裏,Baud rate 的設定就完工了:
0 意見:
張貼留言