CH559 的UART1最高波特率問題

芯片手冊(cè)P43有說明:

......

(1)、兼容 16C550 異步串口并且有所增強(qiáng);
(2)、支持 5、6、7 或者 8 個(gè)數(shù)據(jù)位以及 1 或者 2 個(gè)停止位;
(3)、支持奇、偶、無校驗(yàn)、空白 0、標(biāo)志 1 等校驗(yàn)方式;
(4)、可編程通訊波特率,支持 115200bps 以及最高達(dá) 3Mbps 的通訊波特率;


UART1可以支持高達(dá)3Mbps的波特率,基于官方的CH559EVT\EXAM\UART1 示例,將

主頻改為56M,波特率改為?921600 回環(huán)測(cè)試發(fā)現(xiàn)均是亂碼,改成460800,可以正常工作,

使用官方的公式

Fsys * 2 / SER1_DIV / 16 / 波特率

當(dāng)波特率為 921600時(shí),SER1_DIV設(shè)置為1,

那么需要填充的值為 56000000*2/1/16/921600 ≈ 7.6

那么經(jīng)四舍五入后,誤差為 (8-7.6)/7.6 * 100%= 5.2%,也是不滿足串口通信的最低波特率誤差的,


請(qǐng)問如何配置才能做到? 3Mbps 的通訊波特率?謝謝!


當(dāng)SER1_DIV設(shè)置為1,波特率除數(shù)設(shè)置為2時(shí),實(shí)際波特率為3.5M。在使用波特率時(shí)需要考慮分頻的理論誤差問題,通常MCU需要整數(shù)的時(shí)鐘,如果考慮一些特殊波特率可能要用到22.1184MHz、11.0592MHz作為時(shí)鐘來源。


@TECH5,是否可以理解為如果使用56M主頻(12M晶振),那么只能使用非標(biāo)準(zhǔn)的波特率,例如3.5M,而無法使用類似921600的波特率?如果要使用標(biāo)準(zhǔn)波特率,那么就要使用22.1184MHz、11.0592MHz晶振,那么USB的48MHz如何獲得?還是此時(shí)USB無法兼容使用?


僅就CH559來說,串口使用時(shí)的波特率還是要按照12M內(nèi)部時(shí)鐘源來考慮,并不太適合采用其他頻率時(shí)鐘源。類似我們的CH438,外掛的晶振是專門用于產(chǎn)生波特率的,這種情況下可以根據(jù)需要的波特率來搭配不同頻率的時(shí)鐘源。


我也遇到相同的問題。

主頻24M,需要產(chǎn)生9600,根據(jù)你的公式波特率誤差不到千分之二,但是通訊亂碼,修改為4800接收到了正確數(shù)據(jù)。

是不是公式有錯(cuò)誤,計(jì)算公式多除了個(gè)2?

559的官方代碼還有其它的錯(cuò)誤~~~不是很省心


樓上的朋友,如果最終波特率差了1倍,而配置的主頻是24M,芯片默認(rèn)主頻是12M,有沒有可能代碼中某個(gè)參與計(jì)算的宏定義參數(shù)沒有改過來?


樓上的說得對(duì),原始的程序是針對(duì)12M的,我改成下面這樣了,正常:

#defineUART1_DEFAULT_DIV12


SER1_LCR |= bLCR_DLAB; ? // DLAB位置1,寫DLL、DLM和DIV寄存器

SER1_DIV = UART1_DEFAULT_DIV; ? // 預(yù)分頻

x = 10 * FREQ_SYS / UART1_DEFAULT_DIV / 16 / baud;?

x2 = x % 10;

x /= 10;


559的demo都是在12M模式的。



只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频