AVR單片機(jī)串口的波特率設(shè)置
可是實(shí)際測試才發(fā)現(xiàn),就算出的值根本不能用。也就是說,用算出的值發(fā)出的波特率根本不是想要的波特率。百思不得其解,只好上網(wǎng)搜搜看有沒有收獲。果然,網(wǎng)上有個(gè)仁兄的癥狀和我一樣,也是波特率不對??戳撕竺娴幕卮?,覺得有一個(gè)挺靠譜的,大概是說,在用了AVR的內(nèi)部RC振蕩器的情況下,實(shí)際波特率會(huì)和計(jì)算值有偏差。因?yàn)樾酒膬?nèi)部RC振蕩器頻率不像外部晶振的頻率那么穩(wěn)定。
在不增加外部晶振的情況下,如何解決問題呢?在網(wǎng)沒有找到什么方法,只好自己用笨方法了。上示波器,看單片機(jī)發(fā)出的波形的寬度,和標(biāo)準(zhǔn)的波特率的寬度對比,再一點(diǎn)點(diǎn)的在UBRR的計(jì)算值的基礎(chǔ)上修正,直到單片機(jī)發(fā)出的波形正確為止。
以下是我測試出的一組UBRR的實(shí)際值,希望對有需要的朋友有用。
注:
芯片型號(hào):ATmega8L 使用模式:異步倍速模式(U2X = 1) 時(shí)鐘源:內(nèi)部RC振蕩器 時(shí)鐘頻率:8Mhz
波特率寄存器(UBRR)計(jì)算公式:UBRR = f / (8*BAUD) - 1 (其中BAUD為期望波特率的值,f為時(shí)鐘頻率的值)
波特率 | UBRR實(shí)際值 | UBRR計(jì)算值 |
9600 | 96 | 103.16 |
14400 | 64 | 68.44 |
19200 | 48 | 51.08 |
28800 | 31 | 33.72 |
38400 | 22 | 25.04 |
56000 | 15 | 16.85 |
57600 | 15 | 16.36 |
115200 | 未測試 | 7.68 |
128000 | 未測試 | 6.81 |
評論