EAMCU 发表于 2021-3-20 20:04

请问我这段时钟配置程序错在哪里?

at32f415,我计划使用hsi配置时钟144mhz。但是使用了下面的程序后,usart波特率配置实际值高1倍。比如我把波特率设置成57600,但是上位机串口助手里必须设置成115200才能正确接收。请问我这段时钟配置程序错误在哪里?

      RCC_Reset();
      RCC_HSICmd(ENABLE);
      while (RCC_GetFlagStatus(RCC_FLAG_HSISTBL) == RESET)       
        {}

                        /* Enable Prefetch Buffer */
                        FLASH->ACR |= (FLASH_ACR_PRFTBE);
                        /* Flash wait state */
                        FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
                        FLASH->ACR |= (uint32_t)(FLASH_ACR_LATENCY_4);                        

                        RCC_AHBCLKConfig(RCC_SYSCLK_Div1);      //at32f415的AHB最高150M
                        RCC_APB1CLKConfig(RCC_AHBCLK_Div2);       //at32f415的APB1最高75M
                        RCC_APB2CLKConfig(RCC_AHBCLK_Div2);       //at32f415的APB2最高75M

                        RCC_PLLConfig(RCC_PLLRefClk_HSI_Div2, 36, RCC_Range_GreatThan_72Mhz); //hsi作为pll输入前,先经过了6分频
                        RCC_PLLFrefTableConfig(8000000);
                        RCC_PLLCmd(ENABLE);                        //启动PLL
                        while (RCC_GetFlagStatus(RCC_FLAG_PLLSTBL)==RESET){} //等待PLL启动完成                                                                 

                        RCC_StepModeCmd(ENABLE); //大于108MHz时,平滑功能开启                              
                        RCC_SYSCLKConfig(RCC_SYSCLKSelction_PLL);//配置系统时钟                       
                        while (RCC_GetSYSCLKSelction() != 0x08) {}      //检查是否将PLL作为系统时钟                       
                        RCC_StepModeCmd(DISABLE);

EAMCU 发表于 2021-3-21 09:06

找到原因了
36应该改成RCC_CFG_PLLMULT36或者RCC_PLLMult_36

double0 发表于 2021-3-21 11:53

EAMCU 发表于 2021-3-21 09:06
找到原因了
36应该改成RCC_CFG_PLLMULT36或者RCC_PLLMult_36

我平时都直接调用BSP里面封装好的函数,自己写的话容易出问题。
页: [1]
查看完整版本: 请问我这段时钟配置程序错在哪里?