2017-04-16 8 views
0

Ich habe ein Problem beim Senden von char von STM32F411 zu PC liest es in Müll, aber wenn ich die umgekehrte Operation die MCU korrekt lesen Char gesendet.STM32F4 USART1 sendet Müll

I führen folgende Aktionen:

  1. GPIOA Taktfreigabe und Pins 9 und 10 alternative Funktion konfigurieren.
  2. aktivieren USART1, Standardwerte für M (Nachrichtenlänge) verlassen, Stoppbits, DMA
  3. USARTDIV Stellen in 9600 Baud mit 16MHz (HSI) *
  4. Configure USART führen Leerrahmen als erste Übertragung senden

* Ich habe auch mit 100Mhz APB2 Busfrequenz mit dem gleichen Ergebnis versucht.

Konfigurieren 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); 

Danach Ich versuche, einen a Charakter mit RealTerm2.0 mit folgenden Konfiguration zu übernehmen: 9600 8N1 None

Charakter durch folgenden Code gesendet wird:

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)); 
} 

Update 1

mit absolut gleicher Konfiguration USART2 Schalt löst das Problem und es ist möglich, Text von seriellem Terminal zu erholen, aber diese Frage unbeantwortet: „Warum USART1 funktioniert nicht wie erwartet?“

+0

was zu jedem verbunden sind, vielleicht USART1 auf ein On-Chip USB auf serielle oder eine Debug-Header/mcu gebunden ist. –

+0

@old_timer Ich habe eine Entdeckungskarte und nach den Schemata im Datenblatt sind sie mit EMIF02 (EMI-Filter) Versorgungsstift und ID-Pins verbunden. Es scheint, dass es keine Elemente gibt, die Signale auf hohen Frequenzen beeinflussen können. Das ist wahrscheinlich die Ursache des Problems, aber immer noch interessant, warum nur ausgehenden Kanal gestört ist. Es ist mein Fehler, der das überhaupt nicht überprüft hat. Soll ich meine Frage jetzt löschen? – hrust

+0

Ich glaube nicht, dass du es tun musst, wenn du es nicht in diesem Zustand lassen willst, oder du kannst deine eigene Frage beantworten, ich weiß, dass es einen Weg gibt, das zu tun, was nicht beleidigend ist dazu). Wenn ich meinen Code betrachte, nehme ich an, dass ich nur UART2 benutzt habe und nicht mit UART1 herumgespielt habe. Ich kenne eines dieser Boards. Ich habe geantwortet, was in dem einen kam und legte einen Loopback auf den nicht verbundenen. –

Antwort

0

Es gibt einen Kondensator auf dem Weg zum PA9-Pin des Erweiterungssteckers, der den USART1 TX herausfiltert. Peter Harrison erklärt das Thema sehr gut, denke ich.

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

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18251834) –