有关STM32F103C8T6的超频
闲来无事突然对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的超频相关推荐
- STM32F103c8t6超频
STM32F103c8t6超频 STM32F103C8T6官方说的主频为72MHz.但为了好奇,我决定去网上买一个STM32f103最小系统进行超频.如下图所示: 像上图这种最小系统,一般都有一个LE ...
- 查看显卡显存_强力散热别浪费 显卡超频这样搞
点击上方电脑爱好者关注我们 小伙伴们有没有发现,现在的显卡经常是多个版本共用一套散热系统和PCB板,这样看起来有点浪费资源,其实对厂商来说是节约设计成本和时间的.看着那些顶着强力散热器的"低 ...
- linux cpu 超频,Linux 调整 cstate 实现cpu超频
Ubuntu 设置 与开机项有关的参数设置在 /etc/default/grub,可以对其进行调整 cat /etc/default/grub # If you change this file, r ...
- 十代i7前端总线频率_七彩虹Z490 Vulcan X主板体验+i7-10700K超频测试
十代酷睿正式推出,接口从LGA1151换成LGA1200,新U必须得配新板.伴随十代酷睿上市则是400系列芯片主板,七彩虹旗下iGame品牌的全新iGame Z490 Vulcan X主板如期而至.虽 ...
- cpu超频有什么坏处_电脑超频知多少,让电脑打鸡血,怎么搞定
哈喽大家好,IT阿坤又来和大家见面啦.今天我们聊的话题就是如何来让CPU超频,大家知道,有的主板可以支持超频设置,在BOSS的设置里面就可以直接设置超频,不过因为小编胆子小,怕一个设置不好资料没了我没 ...
- nVidia多显卡多GPU在Linux下的超频设置
nVidia的显卡是支持超频的,在Windows下各家都有工具,例如Afterburning之类的工具. 但是在Linux下就没有这样现成的工具了. 不过Coolbits的设置也还是非常简单的. 只需 ...
- 我的微型计算机,我的OC(超频)18年追忆!
超频这个DIY领域经久不衰的话题,让一代又一代的DIYer为它疯狂.这个早在DIY还未进入国内的上世纪90年代初就被海外媒体热炒的"玩家"话题,更是在90年代中期深刻地影响了中国的 ...
- delphi xls 线程_锐龙9 5950X怒超近6GHz!关键是16核心32线程全开-锐龙,锐龙9 5950X,超频 ——快科技(驱动之家旗下媒体)-...
Zen 3全新架构的锐龙5000系列还有两天才会解禁.上市,但除了各种性能偷跑,超频也来了,非常惊人. CPU-Z认证数据库中已经出现了超频极限玩家"Darklord"的好成绩,旗 ...
- a卡显存检测软件_科普小课堂,A卡玩家如何轻松超频?
超频一直以来是DIY玩家最为关注的话题,那什么是显卡超频?简单来说是通过提升显卡核心和显存的频率,使其在更高频率下运行并获得更好的性能. 现如今选购A卡的玩家是越多越多了,其中也不乏一些小白玩家,虽说 ...
最新文章
- mysql集群2台linux_安装配置基于两台服务器的MySQL集群(2)
- docker服务启动:service docker start和systemctl start docker两种命令有什么区别?
- m.2接口和nvme区别_M.2硬盘的分类和区别
- World Token官网钱包收益是骗人的吗?是传销吗?
- STL源码剖析 序列式容器|Vector
- 互联网晚报 | 1月25日 星期二 | 知乎首次举办上星晚会;微信视频号上线首个付费直播间;淘宝天猫“春节不打烊”活动正式上线...
- java转json数组对象_java对象转json、json数组 、xml | 学步园
- php鲜花销售管理系统论文,鲜花销售系统论文
- 原理图和PCB设计流程概述
- android 2个 微信,手机挂2个微信可以吗?安卓手机挂2个微信以上教程
- BZOJ3787 gty的文艺妹子序列 【树状数组】【分块】
- 前端进阶知识汇总(持续更新中)
- 记一次Linux 下磁盘分配和扩容操作
- 毕业设计 stm32智能运动计步器 - 物联网 嵌入式 单片机
- Unity+Vuforia+Hololens2 AR开发
- 华科学子连续三年入选华为 “天才少年” !毕业生获201万最高档年薪!
- UE4 Pak 文件格式
- 神经网络实现逻辑运算,神经网络 最小二乘法
- Rasbian系统 树莓派Python环境搭建
- 2021-2027全球与中国自然对流烤炉市场现状及未来发展趋势
热门文章
- 快捷键没有响应的处理办法
- RLC串联电路截止频率
- 如何辨别论文是不是SCI/EI?
- 流放者柯南自建服务器 linux,流放者柯南自建服务器教程一览服务器搭建方法介绍...
- cass简码大全_考考你......列出 南方cass 简码指令50个。
- linux 目录防篡改,Linux下的防篡改技巧
- Unity 判断两物体碰撞方向
- Disturbed People_CodeForces1077B
- 计算机房无管网消防中七氟丙烷的药剂用量
- ASP.NET增加微信公众号功能