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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版