2013-12-10 66 views
0

如何將USART波特率增加到2Mbps,3Mbps或4Mbps。我使用STM32L151RCT6A,我可以運行到921600.我已經設置PLL 32MHz的時鐘。在數據表上給出,這表明它是可能的,有沒有人曾經這樣做過?USART到4MBps!怎麼樣? STM32L151xx

+0

你想用什麼模式?一個USART可以做uart類型的東西,同步串行等,等等,而4Mbit/sec可能在所有模式下都是不可能的。 –

+0

我正在使用usart-RX/TX通過中斷,可能使用波特率計算公式,即使用pclk外設時鐘,但需要對此進行測試。 – Ishmeet

+3

在[參考手冊](http://www.st.com/web/en/resource/technical/document/reference_manual/CD00240193.pdf)的第26.3.4章中有詳細說明。當OVER8 = 1且USART_BRR = 1時,您達到4Mb。使*可靠*並跟上比特率是不平凡的。 –

回答

2

該數據表只概述了具體部分及其外圍設置和電氣特性。有關如何使用設備的信息,您需要Reference Manual。這給出了波特率以下等式:

的Tx/Rx波特= CK_APB1 /(8×(2 - OVER8)X USARTDIV)

哪裏USARTDIV是在USART_BRR寄存器編碼一個無符號的固定點數目。

  • 當OVER8 = 0時,小數部分是編碼在4個比特和編程爲通過所述 DIV_fraction [3:0]在USART_BRR位寄存器
  • 當OVER8 = 1時,小數部分3編碼位,並由USART_BRR寄存器中的 DIV_fraction [2:0]位進行編程,位DIV_fraction 3必須保留 清除。

USART在APB1總線上,參考手冊中的圖12是時鐘樹,它顯示了APB1時鐘是如何從PLL時鐘派生的。最大的APB1時鐘是32MHz。對於更高速度需要OVER8 = 1,給出:

baud = 32X10 /(USARTDIV x 8)。

所以USARTDIV = 32X10 /(波特×8)

對於因此4Mbps的,USARTDIV = 1(參照表138 S.No.12細節)。對於2Mps,USARTDIV = 2。要達到3Mbps,你必須將APB1時鐘減少到24MHz,並將USARTDIV設置爲1(見表131)。但請注意,所有其他APB1外設的時鐘速率也會發生變化。

正確編程USART波特率的最簡單方法是通過STM32L1xx standard peripheral library。同時爲了確定正確的外設時鐘設置(以及更多)並生成初始化代碼,可以使用STM的MicroXplorer工具。

+0

謝謝!好答案!我將嘗試兩個STM32L151RCT6A板之間的USART通信,我將使用非常小的線連接USART TXD和RXD,我看到了STM32L1xx標準庫,並且正在使用它。 – Ishmeet

+0

請注意,自寫這個答案以來,MicroXplorer已經被更全面的STM32CubeMX所取代 - 雖然我仍然會親自推薦使用CubeMX生成的代碼和HAL的StdPeriph庫,但它仍然是一個有用的時鐘計算器和引腳多路複用衝突檢查器。 – Clifford