RCC->CR &= (uint32_t)0xFEF6FFFF;这行代码是什么意思?

103的工程模板改105的大体步骤和上一篇ZET6改C8T6的相差不大,只是改成105之后,问题就来了,发现它的 HSE_VALUE 默认定义为25MHz,WTF,板子都做回来了,晶振买的也是8MHz,搞个锤子

看了一下105的时钟树:那些主要的外设都是挂在SYSCLK上面,也就是来源于PLLCLK的时钟。
首先看一下官方的对于系统时钟的配置:为了方便起见,我把多余的代码删掉了

 
 
 
 

以上代码主要是为了对使能外部时钟并等待HSE稳定,当HSE时钟稳定之后,HSEStatus = (uint32_t)0x01;之后执行以下代码


 
 
 
 
 
 
 

之后最重要的配置来了,代码分析在注释中给出:


 
 
 
 
 

 
 
 
 
 

 
 
 

后面的这一些就只是使能PLLCLK时钟,然后等待PLLCLK时钟就绪,之后SW选择PLLCLK时钟作为SYSCLK时钟源,再确保PLLCLK已经作为SYSCLK的时钟源。
官方时钟配置代码讲解到这里,回到先前那个话题,如果外部时钟源是8MHz怎么办?如果继续按照官方的代码,回到标记1此时时钟配置明显错误。
以下给出两种配置为8MHz的方法。
方法一:对官方代码修改最少。当外部时钟HSE变为8MHz时,我们只需将PREDIV2设置为2分频,在将PLL2MUL配置为10倍频,此时我们就能得到PLL2CLK为40MHz,如下图所示:

方法二:PREDIV1SCR不选择PLL2CLK作为时钟源输入,直接使用外部时钟HSE作为时钟源输入,之后PREDIV1配置为1分频,此时进入PLLSCR的时钟源为8MHz,之后PLLMUL配置9倍频,照样可以得到PLLCLK==72MHz,如下图所示:

至此,stm32f105的时钟修改完毕。最后别忘了修改HSE_VALUE的值

———————————————— 版权声明:本文为CSDN博主「大文梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
}

我要回帖

更多关于 uint16_t范围 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信