找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1808|回复: 2
打印 上一主题 下一主题
收起左侧

stm32F411RET6用HSI最高只有66M?

[复制链接]
跳转到指定楼层
楼主
ID:272602 发表于 2020-8-8 01:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞了半天了,用标准库最高配置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)
  {
  }
  }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:804115 发表于 2020-8-8 09:10 来自手机 | 只看该作者
用stm32cubemx图形化界面配置一下试试,分分钟出结果,记得芯片要选对。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:272602 发表于 2020-8-8 15:23 | 只看该作者
自己来结贴!问题已解决,13脚应接一个AVDD和VDD之间接一个100uH电感,30脚接一个4.7uF电容。本以为和STM32F103 pintopin兼容。结果搞了这么长时间。懒人浪费时间!早点看手册就好了!

评分

参与人数 1黑币 +5 收起 理由
1692483014 + 5 淡定

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表