2013-03-26 117 views
0

現在我有一個stm32f4發現。我爲uart連接stm32f4做一個max232。我用usb-rs232連接max232。我希望我可以通過uart與stm32f4和PC進行通信。我在Linux中打開putty。但是我在設置uart波特率方面遇到了很大的問題。如果我設置相同的波特率,它將無法收到正確的信息。我用示波器觀察。最後,我設置了7680(stm32f4)和3200(膩子)。那麼我可以得到正確的信息。但我不知道爲什麼它可以用不同的波特率工作。誰能告訴我爲什麼?這是我的代碼,thx https://gitcafe.com/ctc8631/stm32f4-test-uartstm32f4 uart波特率設置?

回答

0

可能你在膩子上使用自動波特率。關閉自動波特率,然後重試。如果仍然有效,apb1/apb2總線頻率可能是錯誤的。您可以通過stm32f4xx_rcc.c編輯總線頻率

0

我有完全相同的問題。我在我的項目中使用了各種庫和包含文件。它們中的大部分都比ST提供的原始版本更新。這是我「升級」他們的動機,但我是一個很大的錯誤。

我的解決方案/解決方法是:

使用TRUEStudio。製作一個新的Embedded C應用程序。正確設置嚮導(這是明確的,但這是一個關於它的視頻:http://www.youtube.com/watch?v=mT5bAgpW3jU)。它將生成所有必要的文件並且設置好所有的東西(項目結構,調試接口等)。添加你自己的源代碼並修改必要的源代碼,並且USARTx將運行所需的波特率。

我想問題是外設時鐘速度設置錯誤,這就是爲什麼操作速度不匹配。只有我認爲我找不到問題的根源,但如果您使用的是不同的IDE,我建議將電路板特定庫更改爲原始版本。

3

您可能需要檢查您的時鐘設置。發現板上有一個8MHz晶振,而標準外設庫中的相關配置文件(Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c)似乎設置爲25Mhz晶振。它有這些定義

#define PLL_M  25 
#define PLL_N  336 
#define PLL_P  2 
#define PLL_Q  7 

產生從25MHz的168Mhz而對於發現董事會工作以太網例如發現斷網使用

#define PLL_M  8 
#define PLL_N  288 
#define PLL_P  2 
#define PLL_Q  6 

從8MHz的獲得144MHz的。

編輯:原來這樣做是不夠的,因爲stm32f4xx.h將「HSE_VALUE」定義爲25000000(25MHz),除非在包含該文件時已定義它。我查看的正確工作示例因此未定義,並在stm32f4xx_conf.h中將其重新定義爲8000000(8MHz)。但我想正確的做法是在編譯器命令行上定義它(如果使用IDE,則在某些屬性框中)。至少在IAR EWARM中工作得很好。

0

在文件stm32f4xx.h你需要修復

HSE_VALUE from 25000000 to 8000000 

然後在文件system_stm32f4xx.c 設置如下:

/* PLL_VCO = (HSE_VALUE or HSI_VALUE/PLL_M) * PLL_N */ 
#define PLL_M  8 
#define PLL_N  336 

/* SYSCLK = PLL_VCO/PLL_P */ 
#define PLL_P  2 

/* USB OTG FS, SDIO and RNG Clock = PLL_VCO/PLLQ */ 
#define PLL_Q  7