自己画了一块F405RG的板子,给的8M外部晶振,一开始跑发现USART1收发乱码,用示波器测了晶振输出只有7M,估计电容没匹配好?没改硬件,修改stm32f4xx.h和system_stm32f4xx.c后USART1工作正常。再调USART3发现收发还是乱码。考虑到USART1时钟来自APB2,USART3时钟来自APB1,尝试将APB1改成和APB2一样的配置(代码见下),之后USART3居然正常工作了。问题是根据时钟树配置,主频跑在144MHz,分频到APB2后为72MHz,如果APB1也跑这么快就超过手册上规定的42MHz上限了。如此又怎能解释USART3反而能正常工作了?Thx!
//system_stm32f4xx.c代码修改:
//SetSysClock(void)中如下代码
/* PCLK2 = HCLK / 2*/
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
/* PCLK1 = HCLK / 4*/
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
//改为
/* PCLK2 = HCLK / 2*/
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
/* PCLK1 = HCLK / 2*/
RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; |