stm32l0xx时钟系统详解与代码配置

发布者:asd123yui最新更新时间:2018-06-18 来源: eefocus关键字:stm32l0xx  时钟系统  代码配置 手机看文章 扫描二维码
随时随地手机看文章

时钟是嵌入式系统的脉搏,对嵌入式系统至关重要。处理器内核在时钟驱动下完成状态变换等动作,外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等等。stm32l0xx系列低功耗新增MSI内部多频率可选时钟源,代码配置方面基于HAL库,与f系列相比存在一定的区别,本文以datasheet中的时钟树图为基础对时钟系统进行学习总结。时钟树如下图1所示:


1、LSI RC,低速内部时钟(RC振荡器),是看门狗(WatchdogLS)的唯一时钟来源,可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。

2、LSE OSC,外部低速时钟(晶振),输入输出引脚接OSC32_IN、OCS32_OUT可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。精度高于内部低速时钟。

3、MSI RC,全称为Multispeedinternal RC oscillator,是stm32lxx低功耗系列独有的时钟,可提供12种频率的时钟源,范围可以从100KHZ到48MHZ之间变化。可以直接选择为系统时钟和AHB时钟,也可以作为MCO的时钟源。MSI为低功耗模式提供了更多的选择,但是精度不高。官方提供的例程中多以MSI作为时钟源。

4、HSI,内部高速时钟(RC振荡器),可以直接选择为系统时钟,可以作为PLL(锁相环倍频输出)时钟源,经倍频后选择作为系统的System Clock(系统时钟)和AHB时钟。HSI还可以作为ADCCLK时钟源。

5、HSE,外部高速时钟(晶振),输入输出引脚接OSC_IN、OCS_OUT,可以直接选择为系统时钟,可以作为PLL源,经倍频后选择作为系统的(系统时钟)和AHB时钟。还可以作为MCO和RTC时钟源。

6、System Clock,系统时钟,是供STM32 中绝大部分部件工作的时钟源,是其他所有外设的时钟的来源。System Clock通过 AHB 分频器分频后送给各模块使用。System Clock还是CK_PWR和MCO的时钟源。

7、HCLK,高速外设时钟,是AHB总线时钟源,SystemClock经AHB预分频得到。供内存和 DMA 等使用。

8、FCLK为自由振荡处理器时钟,用来保证在休眠是采样到中断和跟踪休眠事件,与HCLK时钟源相同。

9、PCLK1,System Clock经AHB预分频后,送给 APB1 分频器,得出PCLK1,是APB1时钟源,供 APB1 外设使用。APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等。另一路送给TIMx使用,若APB1分频系数为1,则不倍频,否则倍频系数为2。

9、PCLK2,System Clock经AHB预分频后,送给 APB2 分频器,得出PCLK2,是APB2时钟源,供 APB2外设使用,APB2 上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。另一路送给TIMx使用,若APB2分频系数为1,则不倍频,否则倍频系数为2。

 

时钟初始化代码配置,选用了HSE外部时钟,未进行倍频和分频:

void SystemClock_Config(void)  

{  

  

  

  RCC_OscInitTypeDef RCC_OscInitStruct;  

  RCC_ClkInitTypeDef RCC_ClkInitStruct;  

  

  

    /**Configure the main internal regulator output voltage   

    */  

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);  

  

  

    /**Initializes the CPU, AHB and APB busses clocks   

    */  

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;  

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;  

  RCC_OscInitStruct.LSIState = RCC_LSI_ON;  

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;  

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)  

  {  

    Error_Handler();  

  }  

  

  

    /**Initializes the CPU, AHB and APB busses clocks   

    */  

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK  

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;  

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;  

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;  

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  

  

  

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)  

  {  

    Error_Handler();  

  }  

  

  

    /**Configure the Systick interrupt time   

    */  

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  

  

  

    /**Configure the Systick   

    */  

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);  

  

  

  /* SysTick_IRQn interrupt configuration */  

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);  

}  


关键字:stm32l0xx  时钟系统  代码配置 引用地址:stm32l0xx时钟系统详解与代码配置

上一篇:STM32之SPI从机例程
下一篇:STM32F103的时钟配置源码学习记录

推荐阅读最新更新时间:2024-03-16 16:05

STM32学习笔记——RCC系统时钟配置
//学习RCC的配置方法,以后可以直接用 #include stm32f10x_lib.h //#define SYSCLK_HSE //#define SYSCLK_FREQ_20MHz //#define SYSCLK_FREQ_36MHz //36MH工作 //#define SYSCLK_FREQ_48MHz //48MH工作 通过宏定义改变系统时钟频率 #define SYSCLK_FREQ_72MHz //工作72MH #define DELAY_COUNT 0xFFFFF GPIO_InitTypeDef GPIO_InitStructure;
[单片机]
学习笔记∣stm32l0xx时钟系统详解与代码配置
时钟是嵌入式系统的脉搏,对嵌入式系统至关重要。处理器内核在时钟驱动下完成状态变换等动作,外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等等。stm32l0xx系列低功耗新增MSI内部多频率可选时钟源,代码配置方面基于HAL库,与f系列相比存在一定的区别,本文以datasheet中的时钟树图为基础对时钟系统进行学习总结。时钟树如下图1所示: 1、LSI RC,低速内部时钟(RC振荡器),是看门狗(WatchdogLS)的唯一时钟来源,可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。 2、LSE OSC,外部低速时钟(晶振),输入输出引脚接OSC32_IN、OCS32_OUT可以作为实时
[单片机]
学习笔记∣<font color='red'>stm32l0xx</font><font color='red'>时钟</font><font color='red'>系统</font>详解与<font color='red'>代码</font><font color='red'>配置</font>
设置stm32系统各部分时钟
函数如下: /************************************************************************** * 函数名 : RccInitialisation * 函数描述 : 设置系统各部分时钟 * 输入参数 : 无 * 输出结果 : 无 * 返回值 : 无 **************************************************************************/ void RccInitialisation(void) { /* 定义枚举类型变量 HSEStartUpStatus */ ErrorStatus H
[单片机]
STM32 开发板入门教程 (三) 系统时钟 SysTick
(一) 背景介绍 在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为: for(i = 0; i = x; i ++); x --- 对应于 对应于 N 毫秒的循环值 对于STM32系列微处理器来说,执行一条指令只有几十个 ns,进行 for 循环时,要实现 N 毫秒的 x 值非常大,而且由于系统频率的宽广,很难计算出延时 N 毫秒的精确值。针对 STM32 微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用 Delay(N)。 (二) STM32 SysTick 介绍 Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计
[单片机]
MSP430F5529系统时钟频率设置---超频40MHz
先前跟大家分享了一个MSP430F5529设置25MHz的频率的方法,但是总是感觉频率变化的比较大,经过一番的研究,我发现25MHz下的时钟是经过380倍频得到的,而网上有大神有提到,倍频的过程中存在的不稳定的情况下,故有了换晶振的想法。 我所使用的的是MSP430F5529 的launchpad,板载一个32.768K的RTC时钟XTAL1和一个4MHz 的时钟,原本我只是想获得一个稳定的25MHz的时钟,但是一次错的的数据配置之后我发现系统时钟居然跑到了26MHz,于是,探究频率极限的行动开始了。现在我把这个过程分享给大家。 链接1 25MHz时钟的设置方法 ---- 博客地址 链接2: 超频的代码下载地址-----
[单片机]
MSP430F5529<font color='red'>系统</font><font color='red'>时钟</font>频率设置---超频40MHz
系统时钟和定时器;MPLL和定时器
写在前面:觉得这章比较简单,没有花较大篇幅来讲,很多寄存器的相关用法可以参照S 3C2440的官方手册,很容易看懂 1系统时钟 (1) FCLK:用于CPU核 HCLK:用于AHB总线上设备:CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块 PCLK:用于APB总线上设备:WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI (2 )开发板时钟频率为12 MHZ,通过PLL提高系统时钟:MPLL和UPLL(S3C2440);UPLL用于USB设备,MPLL用于FCLK、HCLK、PLCK (3 )上电 FCLK=Fin(外部输入时钟) 设置MPLL
[单片机]
如何使用MPLAB代码配置配置增强型PWM模块
本在之前实验的基础上,继续向大家介绍如何使用代码配置器配置增强型PWM模块,并使用生成的代码产生增强型PWM的输出。
[机器人]
一种MCU时钟系统的设计
摘要:介绍了一个基于MCU内核的时钟系统的设计,给出了其电路结构并详细地分析了系统的工作原理。该系统能生成两相不重叠时钟,利用静态锁存器保存动态信息,提供三种电源管理方式以适应低功耗应用。在上华(CSMC)0.6μm工艺库下,利用Cadence EDA工具对电路进行了仿真,仿真结果验证了设计的准确性。 关键词:微控制器 时钟系统 两相不重叠时钟 时钟系统是微控制器(MCU)的一个重要部分,它产生的时钟信号要贯穿整个芯片。时钟系统设计得好坏关系到芯片能否正常工作。 在工作频率较低的情况下,时钟系统可以通过综合产生,即用Verilog/VHDL语言描述电路,并用EDA工具进行综合。然而,用工具综合存在电路性能低、优化率不高的问
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved