STM32F103 USART mit falscher Baudrate

OP #3750498
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hab gerade damit begonnen den USART des STM32 zu benutzen. 
Allerdings läuft dieser lauf Terminal mit einer Baudrate von 14400 
anstelle von 9600.
Wahrscheinlich ist es nur eine Kleinigkeit auf die ich nicht kommen.

Mein Code:
1
void InitializeUSART()
2
 {
3
     USART_InitTypeDef usartConfig;
4

5
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 |
6
                            RCC_APB2Periph_GPIOB |
7
                            RCC_APB2Periph_AFIO, ENABLE);
8
     USART_Cmd(USART1, ENABLE);
9

10
     usartConfig.USART_BaudRate = 9600;
11
     usartConfig.USART_WordLength = USART_WordLength_8b;
12
     usartConfig.USART_StopBits = USART_StopBits_1;
13
     usartConfig.USART_Parity = USART_Parity_No;
14
     usartConfig.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
15
     usartConfig.USART_HardwareFlowControl =
16
          USART_HardwareFlowControl_None;
17
     USART_Init(USART1, &usartConfig);
18

19
     GPIO_InitTypeDef gpioConfig;
20

21

22
     GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
23

24
     //PA9 = USART1.TX => Alternative Function Output
25
    gpioConfig.GPIO_Mode = GPIO_Mode_AF_PP;
26
     gpioConfig.GPIO_Pin = GPIO_Pin_6;
27
     gpioConfig.GPIO_Speed = GPIO_Speed_50MHz;
28
     GPIO_Init(GPIOB, &gpioConfig);
29

30
     //PA10 = USART1.RX => Input
31
     gpioConfig.GPIO_Mode = GPIO_Mode_IN_FLOATING;
32
     gpioConfig.GPIO_Pin = GPIO_Pin_7;
33
     GPIO_Init(GPIOB, &gpioConfig);
34
 }

Der STM32 läuft mit einem 8Mhz-Quarz und die PLL steht auf 
Multiplikation mit 9 => 72MHz Systemtakt:
1
void RCC_Configuration(void)
2
{
3
    RCC_DeInit(); // RCC system reset(for debug purpose)
4

5
    RCC_HSEConfig(RCC_HSE_ON); // Enable HSE
6

7
    while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); // Wait till HSE is ready
8

9
    RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK
10

11
    RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK
12

13
    RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2
14

15
    FLASH_SetLatency(FLASH_ACR_LATENCY_2); // Flash 2 wait state
16

17
    FLASH_PrefetchBufferCmd(ENABLE);
18

19
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLLCLK = 8MHz * 9 = 72 MHz
20

21
    RCC_PLLCmd(ENABLE); // Enable PLL
22

23
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  // Wait till PLL is ready
24

25
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Select PLL as system clock source
26

27
    while(RCC_GetSYSCLKSource() != 0x08); // Wait till PLL is used as system clock source
28
}

Ich weiß nun nicht wie die Abweichung zustande kommt. Wäre nett wenn mir 
jemand kurz helfen würde. Vielen Dank im Voraus.

Viele Grüße Michael Mayer

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.