雅特力AT32F403A系列是支持HSE/2/3/4/5分频的,采用25 MHz外部晶振倍到240 MHz的话,HSE 5分频后再48倍频即可。240MHz = 25MHz / 5 * 48。
可以在BSP中system_at32f4xx.c文件中找到SetSysClockTo240M时钟配置函数,按如下加粗部分的修改
static void SetSysClockTo240M(void)
{
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
/* Enable HSE */
RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN);
/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL;
StartUpCounter++;
}
while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}
if (HSEStatus == (uint32_t)0x01)
{
/* HCLK = SYSCLK */
RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1;
/* PCLK2 = HCLK/2 */
RCC->CFG &= 0xFFFFC7FF;
RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2;
/* PCLK1 = HCLK/2 */
RCC->CFG &= 0xFFFFF8FF;
RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2;
RCC_HSEDivConfig(RCC_HSE_DIV_5);
/* PLL configuration: PLLCLK = HSE/5 * 48 = 240 MHz */
RCC->CFG &= RCC_CFG_PLLCFG_MASK;
RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT48 | RCC_CFG_PLLRANGE_GT72MHZ);
/* Enable PLL */
RCC->CTRL |= RCC_CTRL_PLLEN;
/* Wait till PLL is ready */
while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0)
{
}
RCC_StepModeCmd(ENABLE);
/* Select PLL as system clock source */
RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL));
RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL;
/* Wait till PLL is used as system clock source */
while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL)
{
}
RCC_StepModeCmd(DISABLE);
}
else
{
/* If HSE fails to start-up, the application will have wrong clock
configuration. User can add here some code to deal with this error */
}
}
|