闲来无事突然对32的超频来了兴趣。其实是学校有个实训,给的单片机是STM32F1做,想着能弄的更好点就想着把F1超频一下,感觉能完成更多的事情吧。

平台是淘宝上通用的ST32F103C8T6最小系统板。

看了正点原子的论坛之后感觉,虽然很多大佬都超频过,但是具体超频的方法好像没有路子,我查了好久是没有查到。可能太简单了,大佬们都懒得写。一开始确实是无从下手,不过弄懂之后也感觉确实是不难。不过我感觉我改的有点弄巧成拙,确实不是很好,各位大佬如果有更好的方法也可以指出,小弟虚心求教。而且我似乎是只改了主频,还有外设等等一堆频率没有动,我感觉这个东西应该是牵一发而动全身,所以说暂时应该也只是一个半成品。

首先是查了《STM32不完全手册_库函数版本_V3.1》这个PDF,上面虽然说得简单,但是都是对的而且给了我一个大概的方向。然后又认真看了遍时钟树,但是还是很懵,英文差的一塌糊涂。

言归正传,开始说方法。主要就是system_stm32f10x.c这个文件。对这个文件稍加修改就可以了。这个文件里面采用了大量的条件编译,就是给使用者选择频率的,文件里面最大的频率是72M。红色部分是我自己添加的一点代码。

#ifdef SYSCLK_FREQ_HSE。

#ifdef SYSCLK_FREQ_HSE。
  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_CHAOPIN  
  uint32_t SystemCoreClock         = SYSCLK_FREQ_CHAOPIN;     
#else /*!< HSI Selected as System Clock source */
  uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */
#endif

static void SetSysClock(void);

static void SetSysClock(void);

#ifdef SYSCLK_FREQ_HSE
  static void SetSysClockToHSE(void);
#elif defined SYSCLK_FREQ_24MHz
  static void SetSysClockTo24(void);
#elif defined SYSCLK_FREQ_36MHz
  static void SetSysClockTo36(void);
#elif defined SYSCLK_FREQ_48MHz
  static void SetSysClockTo48(void);
#elif defined SYSCLK_FREQ_56MHz
  static void SetSysClockTo56(void);  
#elif defined SYSCLK_FREQ_72MHz
  static void SetSysClockTo72(void);
#elif defined SYSCLK_FREQ_CHAOPIN
  static void SetSysClockToCHAOPIN(void);
#endif

static void SetSysClock(void)

static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
  SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
  SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
  SetSysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz
  SetSysClockTo72();
#elif defined SYSCLK_FREQ_CHAOPIN 
    SetSysClockToCHAOPIN();
#endif
 
 /* If none of the define above is enabled, the HSI is used as System clock
    source (default after reset) */ 
}

频率设置宏定义

#else   //频率设置宏定义在这里
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */ 
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
//#define SYSCLK_FREQ_72MHz  72000000
#define SYSCLK_FREQ_CHAOPIN  120000000    //在这里修改频率
#endif

又在#elifdefined SYSCLK_FREQ_72MHz后面加了一个#elif defined SYSCLK_FREQ_CHAOPIN

#elif defined SYSCLK_FREQ_CHAOPIN
/**
  * @brief  Sets System clock frequency to nMHz and configure HCLK, PCLK2 
  *          and PCLK1 prescalers. 
  * @note   This function should be used only after reset.
  * @param  None
  * @retval None
  */
static void SetSysClockToCHAOPIN(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
  /* Enable HSE */    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }

if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer */
    FLASH->ACR |= FLASH_ACR_PRFTBE;

/* Flash 2 wait state */
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;

/* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

#ifdef STM32F10X_CL
    /* Configure PLLs ------------------------------------------------------*/
    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
        
    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  
    /* Enable PLL2 */
    RCC->CR |= RCC_CR_PLL2ON;
    /* Wait till PLL2 is ready */
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }
    
   
    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ 
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
                            RCC_CFGR_PLLMULL9); 
#else    
    /*  PLL configuration: PLLCLK = HSE * n = 8*n MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL15);    //修改乘积倍数
#endif /* STM32F10X_CL */

/* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

/* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
    
    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

/* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */
  }
}

#endif

大概是修改了这么多内容

个人理解是每次超频应该都是8MHz的倍数,因为晶振是8M的,后面经过不断的倍频产生各种的频率。

RCC_CFGR_PLLMULL15这个是一个宏定义,打开后是一堆数字,不用管那么多,基本上最后两个数字15代表了对8M15倍频的意思,然后对应的8M*15=120000000 修改到#define SYSCLK_FREQ_CHAOPIN  120000000 这条语句上面就可以了

然后是对结果的验证

本人采用了__NOP();这个函数,因为这个函数的执行速度全部却决于主频。

LED0=1;
        for(i=0;i<5000000;i++)__NOP();
        LED0=0;
        for(i=0;i<5000000;i++)__NOP();

主函数里面循环让灯闪

拍视频手机的延迟比较大,所以就不拍了。

第一次灯闪的时候按下秒表,至第三次灯闪的时候停止,在72M下耗时10.01s,在120M下耗时6.02s。

10.01/6.02和120/72应该是差不多的。

有关STM32F103C8T6的超频相关推荐

  1. STM32F103c8t6超频

    STM32F103c8t6超频 STM32F103C8T6官方说的主频为72MHz.但为了好奇,我决定去网上买一个STM32f103最小系统进行超频.如下图所示: 像上图这种最小系统,一般都有一个LE ...

  2. 查看显卡显存_强力散热别浪费 显卡超频这样搞

    点击上方电脑爱好者关注我们 小伙伴们有没有发现,现在的显卡经常是多个版本共用一套散热系统和PCB板,这样看起来有点浪费资源,其实对厂商来说是节约设计成本和时间的.看着那些顶着强力散热器的"低 ...

  3. linux cpu 超频,Linux 调整 cstate 实现cpu超频

    Ubuntu 设置 与开机项有关的参数设置在 /etc/default/grub,可以对其进行调整 cat /etc/default/grub # If you change this file, r ...

  4. 十代i7前端总线频率_七彩虹Z490 Vulcan X主板体验+i7-10700K超频测试

    十代酷睿正式推出,接口从LGA1151换成LGA1200,新U必须得配新板.伴随十代酷睿上市则是400系列芯片主板,七彩虹旗下iGame品牌的全新iGame Z490 Vulcan X主板如期而至.虽 ...

  5. cpu超频有什么坏处_电脑超频知多少,让电脑打鸡血,怎么搞定

    哈喽大家好,IT阿坤又来和大家见面啦.今天我们聊的话题就是如何来让CPU超频,大家知道,有的主板可以支持超频设置,在BOSS的设置里面就可以直接设置超频,不过因为小编胆子小,怕一个设置不好资料没了我没 ...

  6. nVidia多显卡多GPU在Linux下的超频设置

    nVidia的显卡是支持超频的,在Windows下各家都有工具,例如Afterburning之类的工具. 但是在Linux下就没有这样现成的工具了. 不过Coolbits的设置也还是非常简单的. 只需 ...

  7. 我的微型计算机,我的OC(超频)18年追忆!

    超频这个DIY领域经久不衰的话题,让一代又一代的DIYer为它疯狂.这个早在DIY还未进入国内的上世纪90年代初就被海外媒体热炒的"玩家"话题,更是在90年代中期深刻地影响了中国的 ...

  8. delphi xls 线程_锐龙9 5950X怒超近6GHz!关键是16核心32线程全开-锐龙,锐龙9 5950X,超频 ——快科技(驱动之家旗下媒体)-...

    Zen 3全新架构的锐龙5000系列还有两天才会解禁.上市,但除了各种性能偷跑,超频也来了,非常惊人. CPU-Z认证数据库中已经出现了超频极限玩家"Darklord"的好成绩,旗 ...

  9. a卡显存检测软件_科普小课堂,A卡玩家如何轻松超频?

    超频一直以来是DIY玩家最为关注的话题,那什么是显卡超频?简单来说是通过提升显卡核心和显存的频率,使其在更高频率下运行并获得更好的性能. 现如今选购A卡的玩家是越多越多了,其中也不乏一些小白玩家,虽说 ...

最新文章

  1. mysql集群2台linux_安装配置基于两台服务器的MySQL集群(2)
  2. docker服务启动:service docker start和systemctl start docker两种命令有什么区别?
  3. m.2接口和nvme区别_M.2硬盘的分类和区别
  4. World Token官网钱包收益是骗人的吗?是传销吗?
  5. STL源码剖析 序列式容器|Vector
  6. 互联网晚报 | 1月25日 星期二 | 知乎首次举办上星晚会;微信视频号上线首个付费直播间;淘宝天猫“春节不打烊”活动正式上线...
  7. java转json数组对象_java对象转json、json数组 、xml | 学步园
  8. php鲜花销售管理系统论文,鲜花销售系统论文
  9. 原理图和PCB设计流程概述
  10. android 2个 微信,手机挂2个微信可以吗?安卓手机挂2个微信以上教程
  11. BZOJ3787 gty的文艺妹子序列 【树状数组】【分块】
  12. 前端进阶知识汇总(持续更新中)
  13. 记一次Linux 下磁盘分配和扩容操作
  14. 毕业设计 stm32智能运动计步器 - 物联网 嵌入式 单片机
  15. Unity+Vuforia+Hololens2 AR开发
  16. 华科学子连续三年入选华为 “天才少年” !毕业生获201万最高档年薪!
  17. UE4 Pak 文件格式
  18. 神经网络实现逻辑运算,神经网络 最小二乘法
  19. Rasbian系统 树莓派Python环境搭建
  20. 2021-2027全球与中国自然对流烤炉市场现状及未来发展趋势

热门文章

  1. 快捷键没有响应的处理办法
  2. RLC串联电路截止频率
  3. 如何辨别论文是不是SCI/EI?
  4. 流放者柯南自建服务器 linux,流放者柯南自建服务器教程一览服务器搭建方法介绍...
  5. cass简码大全_考考你......列出 南方cass 简码指令50个。
  6. linux 目录防篡改,Linux下的防篡改技巧
  7. Unity 判断两物体碰撞方向
  8. Disturbed People_CodeForces1077B
  9. 计算机房无管网消防中七氟丙烷的药剂用量
  10. ASP.NET增加微信公众号功能