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