UART全稱Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器,是一種非常常見的異步收發(fā)協(xié)議,在嵌入式領(lǐng)域應(yīng)用十分廣泛。收發(fā)雙方按照約定好通訊波特率進(jìn)行配置,如果波特率不匹配會(huì)導(dǎo)致失敗。
2、分頻與波特率
使用單片機(jī)的朋友,經(jīng)常使用4800、9600、38400、115200等波特率。設(shè)計(jì)電路時(shí)經(jīng)常采用11.0592Mhz這樣“不規(guī)則”晶振,看起來不規(guī)則,實(shí)際上很規(guī)則,原因是可以精確分頻成常用波特率。
11.0592MHz=11059200=115200*96
11.0592MHz=11059200=57600*192
11.0592MHz=11059200=19200*576
有細(xì)心的朋友經(jīng)常采用11.0592Mhz晶體設(shè)計(jì)電路,調(diào)試完串口通訊之后更換為12MHz后單片機(jī)依然能夠正常通訊,并沒有出現(xiàn)通訊異常。可見波特率有少許誤差也是能夠容忍的。
3、串口如何采樣
串口接收方,在收到起始位后,延時(shí)1.5個(gè)位周期進(jìn)行第1位采樣,然后依次隔一個(gè)位周期采樣一位,直至把所有數(shù)據(jù)位采樣完成。如果接收方采樣位置正好在數(shù)據(jù)位的中間位置,那么采樣非常完美,不會(huì)出現(xiàn)問題。以下是8bit串口通訊數(shù)據(jù)格式示意圖。
注意,這里的采樣并不是只采樣一次,有些芯片會(huì)采樣多次,這里僅做示意。
4、誤差原因
如果接收方位周期略微大于發(fā)送方位周期,就會(huì)出現(xiàn)下圖所示的情況。采樣位置逐漸偏移數(shù)據(jù)位中心,bit7采樣位置偏移最嚴(yán)重。這就是波特率誤差。采樣點(diǎn)移位過多就會(huì)導(dǎo)致位錯(cuò)誤,導(dǎo)致通訊失敗。當(dāng)然如果接收方位周期略微小于發(fā)送方位周期,也是同樣道理。一般測特率誤差2%-3%是沒有問題的。
5、舉例
筆者正在使用的某款cortex-M3內(nèi)核芯片,需求的波特率是460800bps。串口時(shí)鐘頻率是36MHz。此款芯片波特率配置方法是串口時(shí)鐘頻率除以16,再除以分頻因子。計(jì)算出分頻因子(分頻因子只能是整數(shù)),然后寫入相應(yīng)寄存器即可。算來算去,無論如何計(jì)算都不能準(zhǔn)確分頻出460800bps。按照如下代碼計(jì)算出的分頻因子是4。然后反推出波特率是562500bps,整除失去了小數(shù)位,導(dǎo)致差距巨大,根本無法通訊。
// baud rate = (serial clock freq) / (16 * divisor).
tmpBaudRateDiv = (clocks.PCLK_Frequency / 16) / UART_InitStruct->UART_BaudRate;
于是乎做了個(gè)優(yōu)化,如下代碼,計(jì)算出的分頻因子是5。然后反推出波特率是450,000bps,差距比較小,測試了一下通訊性能沒問題。
// baud rate = (serial clock freq) / (16 * divisor).
tmpBaudRateDiv = ((clocks.PCLK_Frequency / 16) + UART_InitStruct->UART_BaudRate / 2) / UART_InitStruct->UART_BaudRate;
6、不建議串口高速使用
串口畢竟是一個(gè)低速的數(shù)據(jù)傳輸協(xié)議,這種異步傳輸,沒有時(shí)鐘同步信號(hào),在傳輸?shù)拿總€(gè)字節(jié)中采樣有誤差積累,不建議高速使用,筆者使用過幾種高波特率460800、921600、1500000等。原因是低端的單片機(jī)主頻速率較低,處理高速數(shù)據(jù)流效率低下,如需高速使用,可根據(jù)自己需求開啟串口FIFO、串口DMA、串口流控等。
-
嵌入式
+關(guān)注
關(guān)注
5045文章
18816瀏覽量
298442 -
晶振
+關(guān)注
關(guān)注
33文章
2728瀏覽量
67502 -
串口
+關(guān)注
關(guān)注
14文章
1533瀏覽量
75451 -
uart
+關(guān)注
關(guān)注
22文章
1199瀏覽量
100822 -
波特率
+關(guān)注
關(guān)注
2文章
290瀏覽量
33922
發(fā)布評論請先 登錄
相關(guān)推薦
評論