陈炼大雕萌妹 发表于 2020-8-4 22:05

AT32F4系列外部时钟。

本帖最后由 muyichuan2012 于 2020-8-5 09:19 编辑

官方给的例程外部晶振默认为8M,若用户自行设计硬件采用25M晶振,代码中#define HSE_VALUE               ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */,如何倍频到240MHZ,倍频参数,分频参数在哪儿设置

084425 发表于 2020-8-4 23:15

本帖最后由 084425 于 2020-8-5 07:38 编辑

at32f403a吧,直接算拿库函数改改就是比如原来240/8=30,现在改为25MHz的话,类似操作就行,把hse除频后再倍频

陈炼大雕萌妹 发表于 2020-8-5 09:11

084425 发表于 2020-8-4 23:15
at32f403a吧,直接算拿库函数改改就是比如原来240/8=30,现在改为25MHz的话,类似操作就行,把hse除频后再 ...

我要问的是倍频系数在哪儿,分频系数在哪儿我只找到了具体到PLCK的分频,没到找晶振PLLM这些PLLQ这些

MENGYDNG 发表于 2020-8-5 09:23

RCC_CFG_PLLMULT60,就是60倍频的~

sheltonyu 发表于 2020-8-5 10:17

雅特力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 */
}
}

薄幸名的薄 发表于 2021-9-18 09:23

页: [1]
查看完整版本: AT32F4系列外部时钟。