從STM32F411發送字符到PC時它會讀取垃圾,但是當我做相反的操作時,MCU正確讀取字符發送時出現問題。STM32F4 USART1發送垃圾
我執行以下操作:
- 啓用GPIOA時鐘和配置銷9和10的複用功能。
- 啓用USART1,離開默認值M(消息長度),停止位,DMA
- 設置
USARTDIV
導致爲16MHz(HSI)9600波特* - 配置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不工作?」
什麼都連接到,也許USART1被綁定到芯片上的USB串行或調試頁眉/ MCU。 –
@old_timer我有一個發現板,根據數據表中的原理圖,它們連接到EMIF02(EMI濾波器)電源引腳和ID引腳。似乎沒有可能影響高頻信號的元素。 這可能是問題的原因,但仍然很有趣,爲什麼只有出站渠道中斷。這是我的錯誤,沒有檢查,首先。我現在應該刪除我的問題嗎? – hrust
我不認爲你必須如果你不想讓它處於這種狀態,或者你可以回答自己的問題,我知道有一種方法可以做到這一點,或者是一段時間去做那些沒有冒犯性的事情(搜索周圍的答案到那)。看着我的代碼,我想我只使用了uart2,並沒有與uart1混淆,我知道這些主板中的一個我回應了其中一個uart出現的問題,並將迴路放在未連接stlink的那個上。 –