你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f401 Nucleo的系统时钟的配置

[复制链接]
强仔00001 提问时间:2015-1-7 15:48 /
本帖最后由 强仔00001 于 2015-1-7 16:02 编辑

    在STM32中,有五个时钟源,为HSIHSELSILSEPLL 其实是四个时钟源,如下图所示(红色方框),PLL是由锁相环电路倍频得到PLL时钟。
如下图:
时钟源选择.png
 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz
  ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz
  ③、LSI是低速内部时钟,RC振荡器,频率为40kHz
  ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
  ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSIHSE。理论倍频,一般不要输出频率最大不要超过84MHz,本人测试可以将内核时钟频率超到144M,建议大家不要超得太大,否则锁相环倍频的过程会失败的,而且超过84M可能出现运行不稳定的情况,建议大家还是最大输出到84M,如果大家的项目对单片机的处理速度要求较高的,可以超频。但不要超得太高。
STM32F401的时钟系统结构图
时钟源选择1.png
时钟源选择2.png
          另外,STM32还可以选择一个时钟信号输出到MCO1(PA8)MCO2(PC9)上,可以选择为PLL输出的1~5分频、HSIHSE、或者系统时钟。
板子外部晶振的连接处默认是打断的,如下图画着红色方框的地方:
不提供晶振.png
外部晶振的位置.png
所以大家如果要用上外部高速晶体时,就要焊接上两个电容和两个0欧姆电阻。具体的位置如下图画着红色方框的地方,c33c34的地方是焊接电容的:
外部晶振怎样焊接.png
这里需要提醒一下电容的选择,电容最好选择20pf33pf,最好选择大一些的吧,以免在初始化时钟时外部晶振起不了振。这里我选择了电容是30pf,而那两个0欧姆的地方,我直接用焊锡连上了,大家懒的话就可以直接焊锡,因为这些电容,电阻的封装是0603的,这个比较难焊接,由于没有0603封装的电容,我这里就用了0805的来焊接。在晶振的地方,我焊接了圆孔的圆排母,这是为了以后方便更换晶振。下图就是我焊接好外部晶振的图:
外部晶振焊接.png
下面我就开始来介绍用st公司的库函数来配置时钟吧,我是用外部晶振通过PLL模块把时钟倍频到自己所需的频率。然后通过PA8输出外部晶振的频率,PC9输出系统时钟频率的二分频来验证时钟设置是否正确。
}在这里有点需要提醒大家的是,如果你接上晶振时,需要修改一下头文件stm32f4xx.h里的HSE_VALUE的值,我这里的晶振接的是12M的,所以这个数值我改成了12000000,以此来告诉编译器我选的晶振是12M的。

下面就是时钟输出的配置:
  1. void System_Clk_Output_Init()
  2. {
  3.                 GPIO_InitTypeDef GPIO_InitStructure;
  4.         
  5.                 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//使能GPIOC的时钟
  6.                
  7.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //选择管脚号
  8.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置管脚的速度
  9.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //设置管脚位复用功能
  10.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//设置管脚位推完输出
  11.     GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化管脚
  12.         
  13.                 GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_MCO);//打开GPIOC_Pin_9的MCO功能
  14.                 RCC_MCO2Config(RCC_MCO2Source_SYSCLK,RCC_MCO2Div_2);//设置GPIOC_Pin_9输出系统时钟频率的二分频
  15. }        

  16. void HSE_Clk_Output_Init()
  17. {
  18.                 GPIO_InitTypeDef GPIO_InitStructure;
  19.         
  20.                 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA的时钟
  21.                
  22.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //选择管脚号
  23.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;// 设置管脚的速度为100M
  24.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //设置管脚位复用功能
  25.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//设置管脚位推完输出
  26.     GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化管脚
  27.         
  28.                 GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_MCO);//打开GPIOA_Pin_9的MCO功能
  29.                 RCC_MCO1Config(RCC_MCO1Source_HSE,RCC_MCO2Div_1);//设置GPIOA_Pin_8输出外部高速晶振HSE的频率
  30.         
  31. }        
复制代码
以上这两个函数是配置PA8PC9管脚为MCO模块。

在主函数中直接调用函数就可以了。
  1. int main()
  2. {
  3.         //System_HSE_Init();
  4.         Clock_Config();
  5.         SystemCoreClockUpdate();
  6.         System_Clk_Output_Init();
  7.         HSE_Clk_Output_Init();
  8.         while(1)
  9.         {
  10.                
  11.         }
  12. }
复制代码
以下就是我仿真时通过SystemCoreClockUpdate();(刷新系统时钟的函数),可以看到时钟已经设置为84M
仿真的时钟值.png
以下就是我用PA8输出HSE的频率和PC9输出系统时钟频率的二分频,用示波器观察频率如下图:

stm32f401Necleo的管脚分布图
管脚图.png
HSE输出.jpg
84M一半输出.jpg
这个图是系统时钟频率超频到120M,然后用PC9输出系统时钟频率的二分频,用示波器观察:
超频到120一半输出.jpg
附上源代码:
stm32f401 Nucleo的系统时钟的配置库函数版.zip (76.48 KB, 下载次数: 35)
文件被锁了.png
文件解锁1.png
修改晶振的值.png
收藏 评论6 发布时间:2015-1-7 15:48

举报

6个回答
wamcncn 回答时间:2015-1-7 16:33:20
讲解的不错,有图有真像
木易-357428 回答时间:2015-1-7 16:35:20
恩  好 ,讲的不错
我是酱油哥 回答时间:2015-1-7 16:51:00
不愧是大神 ,讲的很好啊
强仔00001 回答时间:2015-1-7 16:56:31
wambob 发表于 2015-1-7 16:33
讲解的不错,有图有真像

必须的,不然的话,不直观
强仔00001 回答时间:2015-1-7 16:56:49
木易-357428 发表于 2015-1-7 16:35
恩  好 ,讲的不错

谢谢支持
强仔00001 回答时间:2015-1-7 16:57:11
我是酱油哥 发表于 2015-1-7 16:51
不愧是大神 ,讲的很好啊

我还有很多东西向你们学习

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版