问答

汇集网友智慧,解决技术难题

21ic问答首页 - AT32F421K8U7怎么配置HSI为48MHz???

hz rc PLL se

AT32F421K8U7怎么配置HSI为48MHz???

7947555962021-01-29
我直接在固件库里做了修改,不知道为何不行

static void SetSysClockTo48M(void)
{
         __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

       

        // 把RCC外设初始化成复位状态,这句是必须的
  RCC_Reset();

  //使能HSI
        RCC_HSICmd(ENABLE);
       

       
        // 只有 HSI就绪之后则继续往下执行
  if (RCC_GetFlagStatus(RCC_FLAG_HSISTBL ))
  {
//----------------------------------------------------------------------//
     FLASH->ACR = FLASH_ACR_DEFAULT(FLASH_ACR_LATENCY_1);
//----------------------------------------------------------------------//

    // AHB预分频因子设置为1分频,HCLK = SYSCLK
    RCC_AHBCLKConfig(RCC_SYSCLK_Div1);

    // APB2预分频因子设置为1分频,PCLK2 = HCLK
    RCC_APB2CLKConfig(RCC_AHBCLK_Div1);

    // APB1预分频因子设置为1分频,PCLK1 = HCLK
    RCC_APB1CLKConfig(RCC_AHBCLK_Div1);
               

    // 设置PLL时钟来源为HSE,设置PLL倍频因子
                // PLLCLK = 4MHz * pllmul
                RCC_PLLConfig(RCC_PLLRefClk_HSI_Div2, 12,RCC_Range_LessEqual_72Mhz);
//------------------------------------------------------------------//

    // 开启PLL
    RCC_PLLCmd(ENABLE);

    // 等待 PLL稳定
    while (RCC_GetFlagStatus(RCC_FLAG_PLLSTBL) == RESET)
    {
    }

    // 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK
    RCC_SYSCLKConfig(RCC_SYSCLKSelction_HSI);

    // 读取时钟切换状态位,确保PLLCLK被选为系统时钟
    while (RCC_GetSYSCLKSelction() != 0x08)
    {
    }
  }
  else
  {
    while (1)
    {
               
    }
  }
回答 +关注 18
1454人浏览 2人回答问题 分享 举报
2 个回答

您需要登录后才可以回复 登录 | 注册