2017-04-16 1 views
0

Je rencontre un problème lors de l'envoi de char de STM32F411 à PC il lit dans la poubelle, mais quand je fais l'opération inverse, le MCU lit correctement char envoyé.STM32F4 USART1 envoie des ordures

j'effectuer des actions suivantes:

  1. Activer horloge GPIOA et configurer les broches 9 et 10 fonction alternative.
  2. Activer USART1, laisser les valeurs par défaut pour M (longueur du message), les bits d'arrêt, DMA
  3. Définir USARTDIV aboutir à 9600 bauds à 16Mhz (HSI) *
  4. Configurer USART pour envoyer trame de repos comme première transmission

* J'ai également essayé avec 100Mhz APB2 fréquence du bus avec le même résultat.

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

Après que je suis en train d'accepter un caractère a avec RealTerm2.0 avec la configuration suivante: 9600 8N1 None

Le caractère est envoyé par le code suivant:

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

Passage à USART2 avec la configuration même absolue permet de résoudre le problème et il est possible de récupérer le texte du terminal série, mais cette question sans réponse: « Pourquoi USART1 ne fonctionne pas comme prévu? »

+0

ce sont reliés chacun à, peut-être usart1 est lié à un sur usb puce serial ou un en-tête de débogage/mcu. –

+0

@old_timer J'ai une carte de découverte et selon les schémas de la fiche technique, ils sont connectés aux broches d'alimentation et d'identification EMIF02 (filtre EMI). Il semble qu'il n'y ait aucun élément susceptible d'influencer les signaux sur les hautes fréquences. C'est probablement la cause du problème, mais toujours intéressant pourquoi seul le canal sortant est perturbé. C'est mon erreur qui n'a pas vérifié cela en premier lieu. Devrais-je supprimer ma question maintenant? – hrust

+0

Je ne pense pas que vous devez si vous ne voulez pas peut le laisser dans cet état ou vous pouvez répondre à votre propre question, je sais qu'il ya un moyen de le faire ou un temps pour faire ce qui n'est pas offensant pour que). En regardant mon code, je suppose que je n'ai utilisé que uart2 et que je n'ai pas joué avec uart1, je connais l'un de ces conseils que j'ai écouté et j'ai mis un loopback sur celui qui n'est pas connecté au stlink. –

Répondre

0

Il y a un condensateur sur le chemin de la broche PA9 du connecteur d'extension filtrant l'USART1 TX. Peter Harrison explique très bien la question, je pense.

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

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'avis] (/ review/low-quality-posts/18251834) –