STM32f042k6 - UART Kommunikation

OP #7023966
Lesenswert?
• ▲
▼
Guten Abend,

Vorgeschichte:

Ich versuche auf dem STM32f042 uC UART zu konfigurieren. Als erstes habe 
ich den USART2 genommen, doch ich bin auf das Problem gestoßen, dass die 
IDLE line immer aktiv war, obwohl ich den PI(PI und STM kommunizieren) 
noch gar nicht angeschlossen habe. Da das STM Board die ganze Zeit am 
USB Kabel hängt und somit wahrscheinlich mit dem USB Port verbunden ist, 
dachte ich OK, dann ergibt es ja auch Sinn dass die IDLE line immer 
aktiv ist, solange halt das Kabel angeschlossen ist. Das senden hat 
übrigens gut funktioniert mit dem USART2. Daher will ich es nun mit dem 
USART1 versuchen, welches NICHT mit dem USB Port verbunden ist.

Mein Problem:

Hier ist der Code auf dem STM32. Ich will eine ganz einfache UART 
Kommunikation(Asynchron) konfigurieren. 1 Start Bit, 1 Stop Bit und 8 
DB.

Die Probleme sind im Code in den Kommentaren zu sehen.

Ich programmiere mit dem mbed PlatformIO framework und auf 
Registerebene.
1
#include <mbed.h>
2
#include <stm32f042x6.h>
3

4
#define LED (1 << 3)
5

6
int main() {
7
  //enable HSI48 clk
8
  RCC->CR2 |= RCC_CR2_HSI48ON;
9
  //use HSI48 as sysclk
10
  RCC->CFGR |= 0b11;
11
  //enable peripherals
12
  RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
13
  RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
14

15
  //enable clock
16
  USART1->CR2 |= USART_CR2_CLKEN;
17

18
  //PA9 := TX, PA10 := RX
19

20
  //DEBUG LED zur Statusanzeige
21
  RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
22
  GPIOB->MODER |= (1 << 6);
23

24
  //sysclk for USART1
25
  RCC->CFGR3 |= 1;
26

27
  //alternate function mode
28
  GPIOA->MODER |= (0xaul << 18);
29
  //highspeed
30
  GPIOA->OSPEEDR |= (0xful << 18);
31
  //UART functionallity
32
  GPIOA->AFR[1] |= (0b10001ul << 4);
33

34
  //115200 Braudrate
35
  USART1->BRR = 0x1A1;
36

37

38
  //enable USART 
39
  USART1->CR1 |= USART_CR1_UE;
40

41
  //TX and RX enable
42
  USART1->CR1 |= USART_CR1_TE;
43
  USART1->CR1 |= USART_CR1_RE;
44

45
  //wait for IDLE line, then turn LED on
46
  while ((USART1->ISR & USART_ISR_IDLE) != USART_ISR_IDLE);
47
  GPIOB->ODR = LED;
48
  
49
  //warten bis eine IDLE line gefunden wird, dann die LED anschalten,
50
  //solange LED blinken lassen
51
  while ((USART1->ISR & USART_ISR_IDLE) != USART_ISR_IDLE) {
52
    for ( unsigned x = 0 ; x < 0x1ffff; ++x) {
53
      __NOP();
54
      __NOP();
55
    }
56
    GPIOB->ODR ^= LED;
57
  }
58

59
  //1. Problem -> LED geht an obwohl keine Spannung(IDLE line) anliegt.
60
  GPIOB->ODR = LED;
61

62
  while(1) {
63

64
   //2. Problem
65
   //LED geht nicht aus, wenn ich etwas an den RX pin mit den gleichen Einstellungen schicke(mit Oszilloskop geprüft)
66
   
67
/*
68
Das Problem ist, dass das RXNE (Receive buffer NOT EMPTY) anscheinend nicht geupdated wird. Also entweder liegt es daran, dass das Startbit nicht erkannt wird, oder es hat eine andere Urasache.
69
*/
70
    while((USART1->ISR & USART_ISR_RXNE) != USART_ISR_RXNE);
71
    GPIOB->ODR = 0; 
72
   //clear RXNE flag
73
    USART1->RQR |= USART_RQR_RXFRQ;
74
}

Seht ihr etwas bzw. kann mir jemand helfen?


PS: Komisch ist, wenn ich das Oszilloskop anschließe, dann reagiert 
(nur) die IDLE erkennung.

Liebe Grüße

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.