以9600 baud rate為例,每個位元週期 = 1/9600 = 104.16 us
因為 32kHz 當 LPUART clock source 時, 除頻後的 9600 baud rate 誤差偏大
每個位元週期 = 1/[32768/(1+2)] = 91.55 us
誤差率 = (104.16-91.55)/104.16*100% = 12.11% 已經大於 UART 規格可容許的誤差, 會導致無法正常通訊
M480 LPUART 硬體有增加 baud rate 正補償與負補償的功能,可以改善 baud rate 的誤差
M480 TRM 裡有詳盡的描述如何設置,如下範例 :
1. Baud rate 9600
UART 外設時鐘為 32.768K,波特率為9600,即每位 3.413 個外設時鐘
如果分頻值設為 1 (每位 3 個外設時鐘),則每位的誤差為 -0.413 個外設時鐘,BRCOMPDEC = 0
![](https://edit.wpgdadawant.com/uploads/news_file/blog/2019/814/tinymce/1575905794610.jpg)
因為 32kHz 當 LPUART clock source 時, 除頻後的 9600 baud rate 誤差偏大
每個位元週期 = 1/[32768/(1+2)] = 91.55 us
誤差率 = (104.16-91.55)/104.16*100% = 12.11% 已經大於 UART 規格可容許的誤差, 會導致無法正常通訊
M480 LPUART 硬體有增加 baud rate 正補償與負補償的功能,可以改善 baud rate 的誤差
M480 TRM 裡有詳盡的描述如何設置,如下範例 :
1. Baud rate 9600
UART 外設時鐘為 32.768K,波特率為9600,即每位 3.413 個外設時鐘
如果分頻值設為 1 (每位 3 個外設時鐘),則每位的誤差為 -0.413 個外設時鐘,BRCOMPDEC = 0
![](https://edit.wpgdadawant.com/uploads/news_file/blog/2019/814/tinymce/1575905794610.jpg)
所以 BRCOMP (UART_BRCOMP[8:0]) 可以設為 9'b010100101 = 0xa5.
2. Baud rate 4800
UART 外設時鐘為 32.768K,波特率為 4800,即每位 6.827 個外設時鐘
如果分頻值設為 5 (每位 7 個外設時鐘),則每位的誤差為 0.173 個外設時鐘,BRCOMPDEC = 1
![](https://edit.wpgdadawant.com/uploads/news_file/blog/2019/814/tinymce/1575905810702.jpg)
所以 BRCOMP (UART_BRCOMP[8:0]) 可以設為 9'b010000010 = 0x82.
UART 波特率補償寄存器 (UART_BRCOMP)
![](https://edit.wpgdadawant.com/uploads/news_file/blog/2019/814/tinymce/1575907307778.jpg)
評論