cancel
Showing results for 
Search instead for 
Did you mean: 

Usart1 BRR register seems strange when using STM32H743 with stm32cubeh7 1.12.1

zsk
Associate

Dear all,

    I have encountered an strange issue. I set Usart1 Baud Rate to 115200, however, Usart1 BRR[15:4]==0x0082, which corresponds to 57600.(57600 == 120Mhz/(16*0x82)). 

zsk_0-1744456105237.png

zsk_1-1744456165980.png

  I also noticed that HAL_RCC_GetPCLK2Freq() returns a wrong pclk value 0x0E4E1C00(240M), but it should be 120M.

zsk_2-1744456280160.png

 

The Usart1 Config and Rcc config are as follows :

zsk_3-1744456347637.png

zsk_4-1744456394429.pngzsk_5-1744456411825.png

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
TDK
Guru

This has been an issue in the past. Is your STM32H7 package fully updated? If so, can you include your IOC file here?

 

The relevant fix was made 4 months ago. (Might not be this exact change.)

TDK_0-1744462165390.png

 

If you feel a post has answered your question, please click "Accept as Solution".

View solution in original post

5 REPLIES 5
TDK
Guru

This has been an issue in the past. Is your STM32H7 package fully updated? If so, can you include your IOC file here?

 

The relevant fix was made 4 months ago. (Might not be this exact change.)

TDK_0-1744462165390.png

 

If you feel a post has answered your question, please click "Accept as Solution".
Pavel A.
Evangelist III

The relevant fix was made 4 months ago

This line with D1CorePrescalerTable array has not been changed recently. 

I am sure it's the lastest version 1.12.1. But the details remain the same as 1.12.0. I guess the 1.12.1 release missed this problem.

zsk_1-1744507691953.png

 

 

Pavel A.
Evangelist III

Can you compare the generated code, especially for SystemClock_Config?

 

Works for me on a new project, updated tools. Nucleo H743 board. USART1.

printf("HAL_RCC_GetHCLKFreq() = %u\n", (unsigned)HAL_RCC_GetHCLKFreq()); printf("HAL_RCC_GetPCLK2Freq() = %u\n", (unsigned)HAL_RCC_GetPCLK2Freq()); printf("USART1->BRR = %u\n", (unsigned)USART1->BRR); printf("baud = %.6g\n", (unsigned)HAL_RCC_GetPCLK2Freq() / (float)USART1->BRR); printf("main loop started!\n");

Output:

HAL_RCC_GetHCLKFreq() = 240000000 HAL_RCC_GetPCLK2Freq() = 120000000 USART1->BRR = 1042 baud = 115163

 

If you feel a post has answered your question, please click "Accept as Solution".