历史上的今天
返回首页

历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2018年10月13日 | STM32时钟源时钟系统配置

2018-10-13 来源:eefocus

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

①HSI是高速内部时钟,RC振荡器,频率为8MHz。

②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

③LSI是低速内部时钟,RC振荡器,频率为40kHz。

④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:

①对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
②对于少于100脚的产品,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能;第2种:分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面)节省2个外部电阻。

三、用HSE时钟,程序设置时钟参数流程:
01、将RCC寄存器重新设置为默认值   RCC_DeInit;
02、打开外部高速时钟晶振HSE    RCC_HSEConfig(RCC_HSE_ON);
03、等待外部高速时钟晶振工作    HSEStartUpStatus = RCC_WaitForHSEStartUp();
04、设置AHB时钟         RCC_HCLKConfig;
05、设置高速AHB时钟     RCC_PCLK2Config;
06、设置低速速AHB时钟   RCC_PCLK1Config;
07、设置PLL              RCC_PLLConfig;
08、打开PLL              RCC_PLLCmd(ENABLE);
09、等待PLL工作   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
10、设置系统时钟        RCC_SYSCLKConfig;
11、判断是否PLL是系统时钟     while(RCC_GetSYSCLKSource() != 0x08)
12、打开要使用的外设时钟    RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

四、下面是STM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振)

 

void RCC_Configuration(void)

{

  

  RCC_DeInit();

 

  

  RCC_HSEConfig(RCC_HSE_ON);   //RCC_HSE_ON——HSE晶振打开(ON)

 

  

  HSEStartUpStatus = RCC_WaitForHSEStartUp();

 

  if(HSEStartUpStatus == SUCCESS)        //SUCCESS:HSE晶振稳定且就绪

  {

   

    RCC_HCLKConfig(RCC_SYSCLK_Div1);  //RCC_SYSCLK_Div1——AHB时钟= 系统时钟

 

   

    RCC_PCLK2Config(RCC_HCLK_Div1);   //RCC_HCLK_Div1——APB2时钟= HCLK

 

       

RCC_PCLK1Config(RCC_HCLK_Div2);   //RCC_HCLK_Div2——APB1时钟= HCLK / 2

 

   

    FLASH_SetLatency(FLASH_Latency_2);    //FLASH_Latency_2  2延时周期

   

  

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);       // 预取指缓存使能

 

   

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);     

// PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9

   

  

    RCC_PLLCmd(ENABLE);

 

       

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)      

       {

       }

 

   

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟

 

   

    while(RCC_GetSYSCLKSource() != 0x08)        //0x08:PLL作为系统时钟

       {

       }

     }

 

   

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

RCC_APB2Periph_GPIOC , ENABLE);

//RCC_APB2Periph_GPIOA    GPIOA时钟

//RCC_APB2Periph_GPIOB    GPIOB时钟

//RCC_APB2Periph_GPIOC    GPIOC时钟

//RCC_APB2Periph_GPIOD    GPIOD时钟

}

五、时钟频率

STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。目前TI的M3系列芯片最高频率可以达到80M。

在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。

文件开头就有一个这样的定义:
//#define SYSCLK_FREQ_HSE    HSE_Value
//#define SYSCLK_FREQ_20MHz 20000000
//#define SYSCLK_FREQ_36MHz 36000000
//#define SYSCLK_FREQ_48MHz 48000000
//#define SYSCLK_FREQ_56MHz 56000000
#define SYSCLK_FREQ_72MHz 72000000

ST 官方推荐的外接晶振是 8M,所以库函数的设置都是假定你的硬件已经接了 8M 晶振来运算的.以上东西就是默认晶振 8M 的时候,推荐的 CPU 频率选择.在这里选择了:
#define SYSCLK_FREQ_72MHz 72000000
也就是103系列能跑到的最大值72M

然后这个 C文件继续往下看
#elif defined SYSCLK_FREQ_72MHz
const uint32_t SystemFrequency         = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_SysClk = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_AHBClk = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_APB1Clk = (SYSCLK_FREQ_72MHz/2);
const uint32_t SystemFrequency_APB2Clk = SYSCLK_FREQ_72MHz;

这就是在定义了CPU跑72M的时候,各个系统的速度了.他们分别是:硬件频率,系统时钟,AHB总线频率,APB1总线频率,APB2总线频率.再往下看,看到这个了:
#elif defined SYSCLK_FREQ_72MHz
static void SetSysClockTo72(void);

这就是定义 72M 的时候,设置时钟的函数.这个函数被 SetSysClock ()函数调用,而
SetSysClock ()函数则是被 SystemInit()函数调用.最后 SystemInit()函数,就是被你调用的了

所以设置系统时钟的流程就是:
首先用户程序调用 SystemInit()函数,这是一个库函数,然后 SystemInit()函数里面,进行了一些寄存器必要的初始化后,就调用 SetSysClock()函数. SetSysClock()函数根据那个#define SYSCLK_FREQ_72MHz 72000000 的宏定义,知道了要调用SetSysClockTo72()这个函数,于是,就一堆麻烦而复杂的设置~!@#$%^然后,CPU跑起来了,而且速度是 72M. 虽然说的有点累赘,但大家只需要知道,用户要设置频率,程序中就做的就两个事情:

第一个: system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000
第二个:调用SystemInit()


推荐阅读

史海拾趣

DC Components公司的发展小趣事

DC Components公司成立于1992年,总部位于台湾台中市。公司自创立之初,就专注于二极管桥式整流器的研发与生产。在创立初期,公司面临着资金、技术和市场的诸多挑战。然而,凭借对技术的执着追求和对市场的敏锐洞察,DC Components公司逐渐在二极管桥式整流器领域树立了专业形象,为未来的发展奠定了坚实基础。

Etron公司的发展小趣事

进入21世纪,电子行业的竞争日益激烈,钰创科技意识到必须不断进行技术创新才能保持竞争优势。公司加大了研发投入,成功开发出了一系列先进的内存芯片和系统芯片技术。这些技术突破不仅提升了产品的性能和质量,也帮助公司赢得了更多国际客户的认可和信任。

无锡友达公司的发展小趣事

面对电子行业的快速发展和智能化趋势,无锡友达积极响应,加快智能化转型和升级。公司不仅在产品设计和生产上引入智能化技术,还通过建立智能化管理系统,提升企业的运营效率和产品质量。此外,无锡友达还积极参与各类行业展会和交流活动,与业界同行共同探讨智能化转型的未来趋势。

Bipolarics Inc公司的发展小趣事

在快速发展的过程中,Bipolarics Inc始终重视人才培养和团队建设。公司注重从高校和研究机构引进优秀人才,同时加强内部员工的培训和晋升机制。通过打造一支高效、专业的团队,Bipolarics Inc在技术研发、市场营销等方面取得了显著成绩。此外,公司还积极营造良好的企业文化氛围,激发员工的创新精神和团队凝聚力。

ETA-USA公司的发展小趣事

ETA-USA公司起源于XXXX年,当时由几位电子工程领域的先驱者在美国密歇根州的Troy市创立了这家专注于电子技术和解决方案的公司。初创时期,ETA-USA面临着技术挑战、资金短缺和市场竞争激烈等多重困难。然而,通过不断创新和提供高质量的工程服务,公司逐渐在电子行业崭露头角,赢得了客户的信任。

Empro Technology Corp公司的发展小趣事

随着产品的热销,Empro Technology Corp开始积极寻求市场拓展和战略合作。公司与国际知名电子产品制造商建立了紧密的合作关系,共同研发新产品,共同开拓市场。同时,公司还通过参展国际电子展等方式,不断提升品牌知名度和影响力。

问答坊 | AI 解惑

tsb41

老师,我想要74hc14施密特整形的资料。…

查看全部问答>

一道奇怪的模拟题目

题目是求放大倍数。答案是uo=11Ui,我认为,这个电路的A2完全可以不存在,只要把之前的电阻匹配一下,A2就用一根导线代替就可以了。这个电路应该没什么实际意义吧。只是一道模电的计算题。大家看看A2有实际意义吗? [ 本帖最后由 子乐 于 2010-2- ...…

查看全部问答>

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?…

查看全部问答>

关于WinCE开发的一些常识问题

我一直以来都是用Linux的,从来没有用过商业的嵌入式OS,现在有些需要想了解一下。 WinCE开发从哪里可以下到最新的试用版或者免费的OS(用了学习和试验)? 现在最新的WinCE是哪个版本? 其与什么Pocket PC等是什么关系? 做WinCE的开发用什么开 ...…

查看全部问答>

硕士毕业论文的课题做什么好。

我现在正处于选择课题的困惑之中,我导师是做软件的,但我想做嵌入式开发,他让我自己找一个题目做,但是现在不知道做什么好,无从下手,大家给点意见。最后有公司计划开发什么课题,需要人做前期知识积累,我可以无条件参加,甚至可以毕业后到贵公 ...…

查看全部问答>

【为C2000做贡献】基于DSP的CCD图像处理系统在点钞机中的应用

基于DSP的CCD图像处理系统在点钞机中的应用摘要介绍了一种基于DSP(数字信号处理器)的CCD(电荷耦合器件)图像处理系统的设计方法,采用线阵CCDTCD1 42D与TI公司的TMS320F281 2DSPDSP和89C52单片机结合设计了一种图像处理系统。介绍了系统硬件设计 ...…

查看全部问答>

LPC2103周立功配套教程很基础实用以及电路原理图

周立功对于LPC2103的配套教程,感觉还是比较简单易懂的,和大家分享一下 [ 本帖最后由 mdq123 于 2012-7-2 09:36 编辑 ]…

查看全部问答>

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,据说标题越长越被人看到!

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,单板实现。外部直接接传感器。 PCI-E看到上次altera研讨会演示过,想用他用在产品中。 [ 本帖最后由 lfeng105 于 2012-10-18 10:32 编辑 ]…

查看全部问答>

MC34063的波纹给低到多少?

今天刚装上MC33063(与34063一样),按图原计算的数值,带负载20欧电阻,测量波纹达50毫伏! 大家最低波纹时做到了多少? …

查看全部问答>

模拟开关切换通道产生的抖动如何去除

如图,上面的波形是一模拟开关切换通道的地址选择管脚,由低电平变为高电平使得模拟开关通道切换。下面的波形是模拟开关输出端的波形,发现有100us左右的振荡,怎么去除这个抖动,求大神指点!…

查看全部问答>