历史上的今天
今天是:2024年08月24日(星期六)
2019年08月24日 | 【STM32F103攻城笔记】内部晶振HSI倍频设置系统时钟
2019-08-24 来源:eefocus
首先说明,因为STM32芯片的型号不同,所以对于不同芯片有不同频率的限制,比如某些时钟频率不能大于多少,这是根据手册来设置的!但改变频率的寄存器都一样,只是我们设置频率大小要受芯片的限制!下面我用的芯片型号是STM32F103VBT6!它就限制了内部晶振的倍频不能大于64MHz(但其实我实验出来是52MHz)!
本文是利用内部晶振(HSI)来倍频,与外部晶振倍频区分开!
第一步:打开system_STM32f10x.c,找到函数void SystemInit (void){},把原有的都注释掉,将下面的代码复制进去:
/* 开启HSI 即内部晶振时钟 */
RCC->CR |= (uint32_t)0x00000001;
/*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2;
/*PLLCLK=8/2*13=52MHz 设置倍频得到时钟源PLL的频率*/
RCC->CFGR |= (uint32_t)RCC_CFGR_PLLMULL13;
/* PLL不分频输出 */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
/* 使能 PLL时钟 */
RCC->CR |= RCC_CR_PLLON;
/* 等待PLL时钟就绪*/
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
/* 选择PLL为系统时钟的时钟源 */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* 等到PLL成为系统时钟的时钟源*/
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
{
}
这段代码其实就是是HSI倍频成为PLL的时钟源,又使PLL成为系统时钟的时钟源,这样就相当于HSI倍频后给系统时钟了!
最后我用一个库函数RCC_GetClocksFreq() 它是用来获取各个时钟的频率的!他要先初始化,就在开始前利用RCC_ClocksTypeDef 来使他初始化,我们代码是RCC_ClocksTypeDef RCC_Clocks,这样RCC_Clocks.SYSCLK_Frequency就是系统时钟的频率了!我们串口输出就可以了!

主函数代码:
int main (void)
{
RCC_ClocksTypeDef RCC_Clocks; //初始化
SystemInit(); //调用刚才改过的函数
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Usart_Init(115200); //串口为了看数据而已
RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率
while(1)
{
printf("SYSCLK_Frequency %d rn",RCC_Clocks.SYSCLK_Frequency);
//printf("SYSCLK_Frequency %d rn",RCC_Clocks.SYSCLK_Frequency);
}
}
串口显示:(我的实验利用内部晶振最高只能倍频到52MHz)

史海拾趣
|
做了一段时间嵌入式,发现自己憔悴了很多 又研究硬件,看电路图,DATASHEET,又要搞代码,方案公司的代码长的不得了,有时候真想一头装死,还是舍不得。。。 真的太累啊[ … 查看全部问答> |
|
问题如标题。我需要用应用程序实现一个简单的客户端,需要调用winsnmp的API。但是我发现wince下打不开winsnmp.h头文件。有人在这下面用过吗?… 查看全部问答> |
|
在keilc51中我用c语言要写个精确的时间,怎么写?(不可以用中断) 在keilc51中我用c语言要写个精确的时间,怎么写?(不可以用中断) 如:12MHz晶振 void dalay() { uchar i,j,k; for(i=0;i… 查看全部问答> |
|
dsp builder7.2中altbus没有Node Type选项是怎么回事?给点思路就给分! 我装的是matlab r2007a quartus 7.2 dspbuilder 7.2 使用dspbuilder 时发现altbusaltbus没有Node Type选项,请问是怎么回事? 如果版本错了,问哪个版本合适,最好给个链接,不胜感激!… 查看全部问答> |
|
需要开发如下项目: 基本需求: 使用视频处理芯片处理两个信号: 其一,由摄像头获得的实时视频(模拟或数字信号) 其二,某一个预制好的两色BMP文件(黑白)。 将1和2叠加,叠加方法为将黑色部分保留,白色部分设置成透明的 白色地方就可以 ...… 查看全部问答> |
|
问题1.怎样在89C51 P0 口加入外部上拉装置,具体接法是怎样的? 2.请大家解释P1口内部上拉电阻和P0口没内部上拉电阻在单片机控制输出、输入应用的差别, 到底在接入负载如数码管的控制有何差别?? 书本的 ...… 查看全部问答> |
|
猜猜看,这是什么? 这个带有法拉利标志的头盔,实际上是一款咖啡机。将头盔的护目镜打开,就可以看到隐藏在其中的咖啡操作台。为了起到更好的装饰作用和隐蔽效果,咖啡机的操作按钮都隐藏在滑片之后。您可以将它 ...… 查看全部问答> |




