标题: stm32F411RET6用HSI最高只有66M? [打印本页]

作者: thinkingpadcui    时间: 2020-8-8 01:26
标题: stm32F411RET6用HSI最高只有66M?
搞了半天了,用标准库最高配置66M,hal库都配最高只能配置到64M,难道和STM32F103一样?
标准库配置如下:
static void SetSysClock(void)                               
{
                               
     __IO uint32_t HSIStartUpStatus = 0;
                // 把RCC外设初始化成复位状态
    RCC_DeInit();
                //使能HSI, HSI=16M                               
     RCC_HSICmd(ENABLE);
                        // 等待 HSI 就绪
     HSIStartUpStatus = RCC->CR & RCC_CR_HSIRDY;
                        // 只有 HSI就绪之后则继续往下执行
                        if (HSIStartUpStatus == RCC_CR_HSIRDY) {

                                // 如果要超频就得在这里下手啦
                        // 设置PLL来源时钟,设置VCO分频因子m,设置VCO倍频因子n,
                                //  设置系统时钟分频因子p,设置OTG FS,SDIO,RNG分频因子q
                                RCC_PLLConfig(RCC_PLLSource_HSI, 16, 264, 4, 7);
                                // 使能PLL
                                RCC_PLLCmd(ENABLE);
                                // 等待 PLL稳定
                                while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
                                /*-----------------------------------------------------*/
                                //开启 OVER-RIDE模式,以能达到更高频率
//                                 PWR->CR |=PWR_CR_VOS;
//                                while ((PWR->CSR & PWR_CSR_ODRDY) == 0) { }
//                                PWR->CR |= PWR_CR_ODSWEN;
//                                while ((PWR->CSR & PWR_CSR_ODSWRDY) == 0) {}
                                // 配置FLASH预取指,指令缓存,数据缓存和等待状态
                                FLASH->ACR = FLASH_ACR_PRFTEN
                               
                      | FLASH_ACR_ICEN
                               
                      |FLASH_ACR_DCEN
                               
                      |FLASH_ACR_LATENCY_3WS;
                                /*-----------------------------------------------------*/                               
         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
                                // 读取时钟切换状态位,确保PLLCLK被选为系统时钟
                                while (RCC_GetSYSCLKSource() != 0x08) {}
                                                        // 调压器电压输出级别配置为1,以便在器件为最大频率
                        // 工作时使性能和功耗实现平衡
                         RCC->APB1ENR |= RCC_APB1ENR_PWREN;
                                PWR->CR |= PWR_CR_VOS;
                                // HCLK = SYSCLK / 1
                                RCC_HCLKConfig(RCC_SYSCLK_Div1);
                                // PCLK2 = HCLK / 2
                                RCC_PCLK2Config(RCC_HCLK_Div2);
                                // PCLK1 = HCLK / 4
                                RCC_PCLK1Config(RCC_HCLK_Div4);
                               
     } else {
                                // HSI启动出错处理
                        while (1) {}
                               
     }
                               
}

hal库配置如下:
void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();

  /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

  /* Enable HSI Oscillator and activate PLL with HSI as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 0x10;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 16;
  RCC_OscInitStruct.PLL.PLLN = 384;
  RCC_OscInitStruct.PLL.PLLP = 6;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
      while(1)
  {
  }
  }

  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;  
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
  if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
  {
      while(1)
  {
  }
  }
}


作者: 1692483014    时间: 2020-8-8 09:10
用stm32cubemx图形化界面配置一下试试,分分钟出结果,记得芯片要选对。
作者: thinkingpadcui    时间: 2020-8-8 15:23
自己来结贴!问题已解决,13脚应接一个AVDD和VDD之间接一个100uH电感,30脚接一个4.7uF电容。本以为和STM32F103 pintopin兼容。结果搞了这么长时间。懒人浪费时间!早点看手册就好了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1