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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren