OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3624|回复: 4

stm32F411RET6用HSI最高只有66M?

[复制链接]

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3464
金钱
3464
注册时间
2019-5-15
在线时间
258 小时
发表于 2020-8-8 01:26:43 | 显示全部楼层 |阅读模式
搞了半天了,用标准库最高配置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)
  {
  }
  }
}


梦想!是个神奇的东西!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3464
金钱
3464
注册时间
2019-5-15
在线时间
258 小时
 楼主| 发表于 2020-8-8 10:14:51 | 显示全部楼层
自己顶一下 难道没人出现过此问题吗?
梦想!是个神奇的东西!
回复 支持 反对

使用道具 举报

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3464
金钱
3464
注册时间
2019-5-15
在线时间
258 小时
 楼主| 发表于 2020-8-8 15:24:49 | 显示全部楼层
自己来结贴!问题已解决,13脚应接一个AVDD和VDD之间接一个100uH电感,30脚接一个4.7uF电容。本以为和STM32F103 pintopin兼容。结果搞了这么长时间。懒人浪费时间!早点看手册就好了![em06]
梦想!是个神奇的东西!
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2020-3-17
在线时间
15 小时
发表于 2020-11-15 20:43:55 | 显示全部楼层
CuiDaBo 发表于 2020-8-8 15:24
自己来结贴!问题已解决,13脚应接一个AVDD和VDD之间接一个100uH电感,30脚接一个4.7uF电容。本以为和STM32 ...

你好,问一下F407如何向F411移植呢?只改时钟吗?想求助一下,有偿
回复 支持 反对

使用道具 举报

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3464
金钱
3464
注册时间
2019-5-15
在线时间
258 小时
 楼主| 发表于 2020-11-15 21:34:39 | 显示全部楼层
qinhao3159687 发表于 2020-11-15 20:43
你好,问一下F407如何向F411移植呢?只改时钟吗?想求助一下,有偿

库文件 还是 程序?
梦想!是个神奇的东西!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-29 23:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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