我的代码在等待状态以选择系统时钟为PLL时钟时会陷入评论数字7时陷入困境?

问题描述 投票:0回答:1
#define TIMEOUT 1000000  // Timeout value to avoid infinite loops
/* System Clock Configuration */
void cfg_sys_clock()
{
        uint32_t timeout;

        //select 8khz as MSI
        MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, _VAL2FLD(RCC_CR_MSIRANGE, 0x7)); 

        // 1. Enable MSI
        SET_BIT(RCC->CR, RCC_CR_MSION);

        // 2. Wait for HSI Ready
        timeout = TIMEOUT;
        while (!(READ_BIT(RCC->CR, RCC_CR_MSIRDY)) && --timeout);
        if (timeout == 0) while (1); // Hang in case of failure

        // 3. Configure PLL
        MODIFY_REG(RCC->PLLCFGR,
            RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN |RCC_PLLCFGR_PLLR,
        RCC_PLLCFGR_PLLSRC_MSI | _VAL2FLD(RCC_PLLCFGR_PLLM, 1) |
        _VAL2FLD(RCC_PLLCFGR_PLLN, 24) | _VAL2FLD(RCC_PLLCFGR_PLLR, 2)
        );

        // 4. Enable PLL
        SET_BIT(RCC->CR, RCC_CR_PLLON);

        // 5. Wait for PLL Ready
        timeout = TIMEOUT;
        while (!(READ_BIT(RCC->CR, RCC_CR_PLLRDY)) && --timeout);
        if (timeout == 0) while (1); // Hang in case of failure

        // 6. Set PLL as system clock
        MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_CFGR_SW_PLL);

        // 7. Wait until PLL is used as system clock
        timeout = TIMEOUT;
        while ((READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) && --timeout);
        if(timeout == 0) while (1); // Hang in case of failure

        // 8. Set AHB and APB prescalers (No division)
        MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_CFGR_HPRE_DIV1);
        MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_CFGR_PPRE1_DIV1); 
        MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, RCC_CFGR_PPRE2_DIV1); 
}
Flash Latenency正确设置为4W,并且使用的板是B-L4S5I-IOG01A STM32控制器-STM32L4S5VIT6,我的代码在等待系统时循环在第7次循环时会陷入困境,以将系统时钟选择为PLL时钟?

stm32 system-clock stm32ldiscovery
1个回答
0
投票
以阅读相关寄存器的内容(在RCC上也设置了Flash Waitstates之外)并检查其内容。

我的猜测是,您没有RCC_PLLCFGR.PLLENSET.

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.