STM32F4077未启动PLL(未设置PLLRDY位)

STM32F4077未启动PLL(未设置PLLRDY位),stm32,infinite-loop,Stm32,Infinite Loop,我尝试用HSE源初始化时钟系统,但PLL没有准备好(PLLRDY位未设置),在调试过程中,我发现在这种情况下有一个无限循环 while(!(RCC->CR&RCC_CR_PLLRDY)) 但代码实际上很好,我的群组伙伴编写并检查了它。以防万一,写在下面 #include "stm32f4xx.h" // Device header void MCO_Init(void); int main(void) {

我尝试用HSE源初始化时钟系统,但PLL没有准备好(PLLRDY位未设置),在调试过程中,我发现在这种情况下有一个无限循环
while(!(RCC->CR&RCC_CR_PLLRDY))
但代码实际上很好,我的群组伙伴编写并检查了它。以防万一,写在下面

#include "stm32f4xx.h"                  // Device header
    
    void MCO_Init(void);
    
    int main(void)
{
    FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY;

    RCC->CR |= RCC_CR_HSEON; //????? (8)
    while(!(RCC->CR & RCC_CR_HSERDY));

    RCC->CFGR &= ~RCC_CFGR_PPRE2_Msk;
    RCC->CFGR |= 0b100 << RCC_CFGR_PPRE2_Pos; //APB2 AHB/2
    RCC->CFGR &= ~RCC_CFGR_PPRE1_Msk;
    RCC->CFGR |= 0b101 << RCC_CFGR_PPRE1_Pos; //APB1 AHB/4

    RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC; //HSE —- PLL
    RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLM_Msk;
    RCC->PLLCFGR |= 8 << RCC_PLLCFGR_PLLM_Pos; // /8
    RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLN_Msk;
    RCC->PLLCFGR |= 336 << RCC_PLLCFGR_PLLN_Pos;// *336
    RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLQ_Msk;
    RCC->PLLCFGR |= 2 << RCC_PLLCFGR_PLLQ_Pos; // /2 PLL = 168

    RCC->CR |= RCC_CR_PLLON;
    while(!(RCC->CR & RCC_CR_PLLRDY));

    RCC->CFGR |= RCC_CFGR_SW_1;
    RCC->CFGR &= ~RCC_CFGR_SW_0; // PLL —- AHB
    while(!((RCC->CFGR & RCC_CFGR_SWS_1) && (RCC->CFGR |= RCC_CFGR_SW_0)));


    RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;                            //Enable Clock for PORTD

    GPIOD->MODER |= GPIO_MODER_MODE15_0;                            //Outpet Mode
    GPIOD->OTYPER &=~ GPIO_OTYPER_OT15;                                 //Push-Pull
    GPIOD->OSPEEDR |= GPIO_OSPEEDR_OSPEED15_0;                        //Medium Speed
    
    GPIOD->MODER |= GPIO_MODER_MODE13_0;                              //Output Mode
    GPIOD->OTYPER &=~ GPIO_OTYPER_OT13;                               //Push-Pull
    GPIOD->OSPEEDR |= GPIO_OSPEEDR_OSPEED13_0;                      //Medium Speed
    while (1)
    {
            GPIOD->BSRR |= GPIO_BSRR_BS15;
            for (int i = 0; i < 2000000; i ++);
            GPIOD->BSRR |= GPIO_BSRR_BR15;

            GPIOD->BSRR |= GPIO_BSRR_BS13;
            for (int i = 0; i < 2000000; i ++);
            GPIOD->BSRR |= GPIO_BSRR_BR13;

    }
}
#包括“stm32f4xx.h”//Device头
无效MCO_Init(无效);
内部主(空)
{
FLASH->ACR=FLASH_ACR_PRFTEN | FLASH_ACR_延迟;
碾压混凝土->碾压混凝土=碾压混凝土
而(!(RCC->CR&RCC_-CR_-HSERDY));
RCC->CFGR&=~RCC\u CFGR\u PPRE2\u Msk;
RCC->CFGR |=0b100 CFGR&=~RCC\u CFGR\u PPRE1\u Msk;
RCC->CFGR |=0b101 PLLCFGR |=RCC_PLLCFGR_PLLSRC;//HSE--PLL
RCC->PLLCFGR&=~RCC\u PLLCFGR\u PLLM\u Msk;
RCC->PLLCFGR |=8 PLLCFGR&=~RCC_PLLCFGR_PLLN_Msk;
RCC->PLLCFGR |=336 PLLCFGR&=~RCC_PLLCFGR_PLLQ_Msk;
RCC->PLLCFGR |=2 CR |=RCC | CR | PLLON;
而(!(RCC->CR&RCC_CR_PLLRDY));
RCC->CFGR |=RCC_CFGR_SW_1;
RCC->CFGR&=~RCC\u CFGR\u SW\u 0;//PLL--AHB
而(!((RCC->CFGR&RCC\U CFGR\U SWS\U 1)和&(RCC->CFGR\124;=RCC\U CFGR\U SWS\U 0));
RCC->AHB1ENR |=RCC_AHB1ENR_GPIODEN;//为端口D启用时钟
GPIOD->MODER |=GPIO_MODER_MODE15_0;//输出模式
GPIOD->OTYPER&=~GPIO\u OTYPER\u OT15;//推拉
GPIOD->ospeder |=GPIO_ospeder_OSPEED15_0;//中速
GPIOD->MODER |=GPIO_MODER_MODE13_0;//输出模式
GPIOD->OTYPER&=~GPIO\u OTYPER\u OT13;//推拉
GPIOD->ospeder |=GPIO_ospeder_OSPEED13_0;//中速
而(1)
{
GPIOD->BSRR |=GPIO_BSRR_BS15;
对于(int i=0;i<2000000;i++);
GPIOD->BSRR |=GPIO_BSRR_BR15;
GPIOD->BSRR |=GPIO_BSRR_BS13;
对于(int i=0;i<2000000;i++);
GPIOD->BSRR |=GPIO_BSRR_BR13;
}
}

有人能帮我找出解决方法吗?((

您使用的是哪种STM32?您是否确实满足PLL的工作条件(输入频率、VCO频率等)?我使用的是f407和discovery Light。我实际上使用的是一个代码,可以在另一个f407上工作,但不能在我的f407上工作。一个问题自己解决了。我什么也没做,只是有一天它开始工作。)