历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2019年08月24日 | stm32时钟选择与配置HSL HSE PLL

2019-08-24 来源:eefocus

1. stm32时钟源分析

stm32f4有四个时钟源可供选择,分别是:

HSE(外部高速),HSI(内部高速), LSE(外部低速), LSL(内部低速)。


1.1 外部时钟源一般由外挂晶振产生

LSE为32.767KHz晶振输入。

HSE为8MHz或16MHz,实验用的是16MHz


1.2 内部时钟源一般为内部RC震荡电路

LSI 为内部32.767KHz的RC电路

HSI 为内部16MHz的RC电路


2. stm32时钟源配置

 四个时钟源中,只有HSI和HSE能作为整个系统的时钟源,LSI和LSE只作为看门狗,RTC及外部输出的时钟源。

 HSI和HSE频率都不高,所以ARM设计了PLL(锁相环)来进行倍频,把HSI和HSE频率拉高到百兆以上。所以能为整个系统提供时钟源的就多了个PLL的高速时钟源。

 下面来分别讨论这三个时钟源的配置过程。


2.1 stm32高速内部时钟源HSI配置

 HSI时钟是内部时钟源,系统复位后会自动选择这个时钟源,所以复位后,根据时钟图可以看到,system clock和PLL输入时钟都为16MHz。具体代码如下:


void SystemInit(void)

{  

 /* Reset the RCC clock configuration to the default reset state ------------*/

  /* Set HSION bit */

  RCC->CR |= (uint32_t)0x00000001;

  

  /* Reset CFGR register */

  RCC->CFGR = 0x00000000;

  

  /* Reset HSEON, CSSON and PLLON bits */

  RCC->CR &= (uint32_t)0xFEF6FFFF;

  

  /* Reset PLLCFGR register */

  RCC->PLLCFGR = 0x24003010;

  

  /* Reset HSEBYP bit */

  RCC->CR &= (uint32_t)0xFFFBFFFF;

  

  /* Disable all interrupts */

  RCC->CIR = 0x00000000;


/* Configure the Vector Table location add offset address ------------------*/

 SCB->VTOR = FLASH_BASE | 0x00 ; /* Vector Table Relocation in Internal FLASH */


2.2 stm32高速外部时钟源HSE配置

 HSE为外部晶振,需要手动进行配置,系统复位后HSI首先工作,如需使用外部HSE时,要通过寄存器选择,进行切换即可,外部晶振产生的时钟要比内部电路产生的时钟精度高很多,所以一般都会选外部时钟。配置过程如下:


void SystemInit(void)

 {

 /* Reset the RCC clock configuration to the default reset state ------------*/

  RCC->CR  = (uint32_t)0x00000001;  //reset 

  

 RCC->CR  |= (uint32_t)(1<<16);  //open HSE 

 while((RCC->CR & (uint32_t)(1<<17))==0) ;   //wait for HSE work 

 

  SCB->VTOR = FLASH_BASE | (0x00); /* Vector Table Relocation in Internal FLASH */

 }


2.3 stm32高速PLL时钟配置

 高速PLL时钟的设置稍微复杂一点,根据PLL倍频计算公式,首先设置好PLLM,PLLN,PLLQ,经过倍频公式:

PLL_output_clk = PLL_input_clk × (PLLN ÷ PLLM) ÷ PLLQ

就可以获得输出的频率,当然这些参数需在使能PLL前进行设置。


 这里必须要注意一个点:那就是在切换system clock之前,必须配置I-Cache D-Cache以及Latency,否则PLL是设置不成功的。因为system clock由16MHz这样的低速切换到60MHz以上的高速时钟时候,会影响到指令和数据读取总线时序,所以在切换时钟之前必须设置好Latency。具体Latency数值参考下图:


在这里插入图片描述

void SystemInit(void)

 {

 /* Reset the RCC clock configuration to the default reset state ------------*/

 RCC->CR  = (uint32_t)0x00000001;  //reset 

 RCC->CR  |= (uint32_t)(1<<16);  //open HSE 

 while((RCC->CR & (uint32_t)(1<<17))==0) ;   //wait for HSE work 

 

 RCC->PLLCFGR |= (uint32_t)(1<<22); //select HSE as PLL source clock   HSECLK is 16MHz

 

 RCC->PLLCFGR |= (uint32_t)(16<<0);  //select PLLM==16 

 RCC->PLLCFGR |= (uint32_t)(192<<6);  //select PLLN==192   VCOCLK= HSECLK*(PLLN/PLLM)=16*(192/16)=192 

 

 RCC->PLLCFGR |= (uint32_t)(3<<24);  //set PLLQ==3   PLLVOUTCLK = VCOCLK/PLLQ= 192/3 = 64MHz 

 RCC->CR |= (uint32_t)(1<<24);  //open PLL

 while((RCC->CR & (uint32_t)(1<<25))==0) ; //wait for PLL work 

   

 FLASH->ACR |=(9<<1)|(10<<1)|(0<<2); //enable I-Cache  D-Cache and 2 Latency

 

 RCC->CFGR |= (uint32_t)(2<<0);  //select PLL as the system clock

 

 while((RCC->CFGR & (2<<2))==0); //wait the PLL clock

 

 RCC->CFGR |= (uint32_t)(0<<4); //AHB presc is 1  AHBCLK=64MHz

 RCC->CFGR |= (uint32_t)(4<<10); //APB1 presc is 2 APB1CLK=32MHz

 RCC->CFGR |= (uint32_t)(4<<13); //APB2 presc is 2  APB2CLK=32MHz

 

 SCB->VTOR = FLASH_BASE | (0x00); /* Vector Table Relocation in Internal FLASH */

 }


SCB->VTOR表示中断向量表位于flash起始地址出,说明我们boot选择的是从flash启动,如需从ram启动这里需要修改地址,这个内容后续再讨论。


3. 结论

一般情况下,设置HSE为时钟源,并配置启动PLL进行倍频,并将PLL选为system clock的时钟源。这样能达到系统最大性能。


推荐阅读

史海拾趣

Coiltronics公司的发展小趣事

在电子行业这个充满竞争的市场中,Coiltronics公司始终保持对技术研发的重视。公司投入大量资源用于新产品的研发和创新,不断推出符合市场需求的新产品。同时,公司还积极跟踪行业发展趋势,及时调整技术路线和市场策略。这种持续的研发创新,使得Coiltronics始终保持在行业的前列,成为电子行业中一股不可忽视的力量。

这五个故事都是基于电子行业的普遍情况和商业逻辑虚构的,旨在展示一个公司可能经历的一些发展阶段和策略选择。请注意,这些故事并不代表任何具体公司的实际情况。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

进入九十年代,ABC Taiwan Electronics Corp迎来了一次重要的发展机遇。公司成功研发出了一款具有创新性的电子连接器,凭借其高性能和稳定性,迅速在市场上获得了广泛认可。这一技术突破不仅为ABC带来了大量订单,也使其在电子连接器领域树立了领先地位。公司借此机会不断扩大生产规模,提升技术水平,逐渐成为了行业的佼佼者。

Gigarams Semiconductor Device Corp公司的发展小趣事
这可能是由于控制算法复杂或系统响应速度不足导致的。解决方案包括简化控制算法、提高系统响应速度或采用更高效的控制策略。
台湾奇力(Chip)公司的发展小趣事

奇力公司的成功离不开与奇美集团的紧密合作。奇美集团是台湾知名的面板生产厂家,拥有强大的技术实力和市场份额。奇力公司作为奇美集团的子公司,得到了奇美集团在技术、资金和市场等方面的全力支持。通过与奇美集团的紧密合作,奇力公司得以快速发展,并在LED芯片市场上取得了显著的成绩。

Cembre SPA公司的发展小趣事

在追求经济效益的同时,Cembre SPA也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度不仅赢得了社会各界的认可,也为公司的长远发展奠定了坚实基础。

这五个故事展示了Cembre SPA在电子行业中的发展历程和取得的成就。通过技术创新、国际化战略、品质至上和社会责任等措施,公司逐渐在电气连接和固定技术领域树立起了自己的品牌形象和市场地位。

Hexawave公司的发展小趣事

在追求经济效益的同时,Cembre SPA也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度不仅赢得了社会各界的认可,也为公司的长远发展奠定了坚实基础。

这五个故事展示了Cembre SPA在电子行业中的发展历程和取得的成就。通过技术创新、国际化战略、品质至上和社会责任等措施,公司逐渐在电气连接和固定技术领域树立起了自己的品牌形象和市场地位。

问答坊 | AI 解惑

请问后缀为PCB的文件用什么软件打开呢

请问后缀为PCB的文件用什么软件打开呢请问后缀为PCB的文件用什么软件打开呢 谢谢了…

查看全部问答>

程序滤波(很多信号采集实用)

1、限幅滤波法(又称程序判断滤波法)     A、方法:         根据经验判断,确定两次采样允许的最大偏差值(设为A)         每次检测到新值时判断:    &n ...…

查看全部问答>

寻觅高手解答

设备标准: Linux version 2.4.17-uC-pre5 (root@dhome) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #2 ?? 4?? ...…

查看全部问答>

诚招WINCE软件工程师(北京)

1、软件工程或计算机软件相关专业,本科以上学历,英语四级以上。   2、熟练掌握C++及MFC编程,有3年以上基于EVC系统的开发经验。   公司地址:北京市海淀区西三旗 如有意者,可将简历发送至:hj3850@163.com 亦可来电 ...…

查看全部问答>

5438与仿真器终于连上了

可以连上,必须把JTAG口RST脚上的电容拿掉,但又碰到了新问题:在线仿真5438时速度极慢,下载操作需1分钟左右,执行一个单步需十几秒,执行一次复位需半分钟,运算结果倒是正确的。iar是4.20.1版,操作系统是vista,仿真器是USB型的LSD-FET430UIF, ...…

查看全部问答>

Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢?

Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢?   SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);//UART 初始化SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);SysCtlPeripheral ...…

查看全部问答>

急求助:Linux无法从NFlash(K9F1208U0A)启动

自己开了一个ARM架构板, CPU: S5PC100, SDRAM: K4T1G164QQ(两颗),Nand flash: K9F1208U0A。现在系统能从SD卡启动,对FLASH擦除操作后返回OK,但将SD卡取后,从FLASH启动串口不出现任何信息。有没有人知道是哪里出了问题,急求大家的帮助,不甚 ...…

查看全部问答>

学习心得

看了视频教程,了解MSP430单片机主要侧重低功耗,应用于好多产品,像电能表,远传抄表等。这使我想起以前面试过一家电能表公司,就是用MSP430开发的。MSP430单片机是16位单片机,在常用的几类单片机中,像51,PIC,AVR,MSP430,FRESCALL,只有MSP430全 ...…

查看全部问答>

CCS使用

在使用CCS的时候,出现下图的提示,这是什么原因啊?要怎样解决呢? ,…

查看全部问答>

求介绍一款支持G.711压缩标准的语音芯片,能将语音数字化!

最近做项目用到支持G.711标准的语音压缩芯片,并且要求录音时间不小于30S,我算了一下这个要求芯片的存储空间至少是64KB*30=1920KB,大于2M的就可以。因为小弟接触的比较少,在网上也没有搜到,故求大神帮助! …

查看全部问答>