Forum: Mikrocontroller und Digitale Elektronik STM32F103 USART mit falscher Baudrate


von Michael M. (eos400dman)


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

von holger (Gast)


Lesenswert?

Schnapp dir mal die Funktion

void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)

und lass dir mal das Ergebnis ausgeben.

von Michael M. (eos400dman)


Angehängte Dateien:

Lesenswert?

Ergibt dann das folgende:

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.