2017-04-16 61 views
0

從STM32F411發送字符到PC時它會讀取垃圾,但是當我做相反的操作時,MCU正確讀取字符發送時出現問題。STM32F4 USART1發送垃圾

我執行以下操作:

  1. 啓用GPIOA時鐘和配置銷9和10的複用功能。
  2. 啓用USART1,離開默認值M(消息長度),停止位,DMA
  3. 設置USARTDIV導致爲16MHz(HSI)9600波特*
  4. 配置USART發送空閒幀作爲第一傳輸

*我也嘗試了100Mhz APB2總線頻率,結果相同。

配置USART

// 1. Enable USART 
SET_BIT(USART1->CR1, USART_CR1_UE); 
// 5. Select the desired baud rate in BRR 
SET_BIT(USART1->BRR, 0x683);  // USARTDIV 
// 6. Set TE in CR1 to send an idle frame as first transmission 
SET_BIT(USART1->CR1, USART_CR1_TE); 

之後,我試圖用RealTerm2.0有以下配置來接受a字符:9600 8N1 None

字符由下面的代碼發送:

void SendChar_USART(char pChar) 
{ 
    // Transmitter 7, 8 
    // 7. Write the data to send in the DR register (this clears TXE) 
    USART1->DR = pChar; 
    while(!READ_BIT(USART1->SR, USART_SR_TXE)); 
} 

更新1

切換到USART2以絕對相同的配置解決了這個問題,它可以從串行終端恢復文本,但這個問題沒有答案:「爲什麼預期USART1不工作?」

+0

什麼都連接到,也許USART1被綁定到芯片上的USB串行或調試頁眉/ MCU。 –

+0

@old_timer我有一個發現板,根據數據表中的原理圖,它們連接到EMIF02(EMI濾波器)電源引腳和ID引腳。似乎沒有可能影響高頻信號的元素。 這可能是問題的原因,但仍然很有趣,爲什麼只有出站渠道中斷。這是我的錯誤,沒有檢查,首先。我現在應該刪除我的問題嗎? – hrust

+0

我不認爲你必須如果你不想讓它處於這種狀態,或者你可以回答自己的問題,我知道有一種方法可以做到這一點,或者是一段時間去做那些沒有冒犯性的事情(搜索周圍的答案到那)。看着我的代碼,我想我只使用了uart2,並沒有與uart1混淆,我知道這些主板中的一個我回應了其中一個uart出現的問題,並將迴路放在未連接stlink的那個上。 –

回答

0

在通往擴展連接器PA9引腳的路上有一個電容濾除USART1 TX。我想,彼得哈里森很好地解釋了這個問題。

http://www.micromouseonline.com/2013/05/05/using-usart1-on-the-stm32f4discovery/

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18251834) –