历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2019年12月26日 | STM32—RCC时钟

2019-12-26 来源:eefocus

前言:


最近在调试STM32L152芯片,本文总结下STM32L152的RCC时钟配置方法。


硬件平台:STM32L152


软件平台:keil v5+cubeMX


函数库:HAL库


内容:

RCC:Reset and Clock Control,复位与时钟控制系统。系统复位有三种:系统复位、电源复位、RTC domain复位。复位内容本文暂不详解,本文重点详解Clock Control部分。下面看下STM32L152芯片的时钟框图和cubeMX软件中的时钟框图。

如上图所示,在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。


①HSI:High Speed Internal,高速内部时钟,RC振荡器;

②HSE:High Speed External,高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源;

③LSI:Low Speed Internal,低速内部时钟,RC振荡器,频率为37kHz;

④LSE:Low Speed External,低速外部时钟,接频率为32.768kHz的石英晶体;

⑤PLL:Phase Locked Loop,锁相环倍频分频输出。


另外,STM32还具有双时钟机制,即时钟安全系统CSS(Clock Security System)。在外部晶振不工作时,转而使用内部RC振荡器作为自己时钟心跳保证系统正常运行。当外部晶振恢复正常后,重新使用外部晶振。


上图中也提到3种时钟,FCLK、HCLK和PCLK。简单介绍下三种时钟。


(1)FCLK:Free Running Clock,为CPU提供时钟信号,平时说的CPU主频,就是这个时钟信号,1/Fclk即为CPU时钟周期;


(2)HCLK:为AHB bus peripherals提供时钟信号,AHB:advanced high-performance bus;HCLK是高速外设时钟,一般给内存、flash提供时钟。


(3)PCLK:为APB bus peripherals供给时钟信号,APB:advanced peripherals bus;PCLK是低速外设时钟,一般给CAN、USB、I2C、USART、SPI、Timer、ADC和DAC提供时钟信号。下面结合Cubemx生成的系统时钟原程序进行分析。


void SystemClock_Config(void)

{

  RCC_OscInitTypeDef RCC_OscInitStruct;

  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  RCC_PeriphCLKInitTypeDef PeriphClkInit;

 

 

    /**Configure the main internal regulator output voltage 

    */

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);//设置调压器输出电压级别1,用来设置调压器输出电压级别,器件未以最大频率工作,达到性能和功耗平衡


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

    */

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI

                              |RCC_OSCILLATORTYPE_HSE;

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;

  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

  RCC_OscInitStruct.HSICalibrationValue = 16;//HSI时钟16M

  RCC_OscInitStruct.LSIState = RCC_LSI_ON;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;//PLL时钟源为HSE

  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;//8倍频

  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2;//2分频

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)//初始化

  {

    _Error_Handler(__FILE__, __LINE__);

  }

 

    /**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_PLLCLK;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;//AHB 1分频

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;//APB1 1分频

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;//APB2 1分频

 

 

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)//初始化

  {

    _Error_Handler(__FILE__, __LINE__);

  }

 

 

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;

  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;//RTC时钟选择LSI

  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

 

 

    /**Configure the Systick interrupt time 

    */

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);//滴答定时器配置

 

 

    /**Configure the Systick 

    */

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//滴答定时器选择HCLK 不分频

 

 

  /* SysTick_IRQn interrupt configuration */

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);//滴答定时器中断优先级

}

推荐阅读

史海拾趣

Etron公司的发展小趣事

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

上海晶岳(AFSEMI)公司的发展小趣事

上海晶岳电子有限公司自2010年成立以来,就将目标锁定在60V以下MOSFET产品线及锂电池保护IC系列产品。在公司创始人的领导下,晶岳电子团队凭借对技术的深入理解和市场的敏锐洞察,迅速在行业中崭露头角。他们不仅注重产品的研发和设计,还积极与上下游企业合作,优化供应链,确保产品质量和交货期的稳定。经过几年的努力,晶岳电子在MOSFET领域建立了良好的口碑,为后续的发展奠定了坚实的基础。

BALLUFF公司的发展小趣事

随着自动化技术的不断进步,传感器技术的需求也日益增长。BALLUFF公司紧跟时代潮流,不断推出创新的传感器产品。从1968年开始生产感应式接近开关BES,到1978年光学开关BOS的面世,再到后来由微型处理器控制的转换机构与角度编码器的加入,BALLUFF在传感器领域的技术实力不断增强。此外,公司还陆续推出了旋转传感器BRG、识别系统BIS和超声波位移传感器BTL等产品,进一步丰富了其传感器产品线,满足了不同行业的需求。

Analog Power公司的发展小趣事

随着技术的不断进步,Analog Power公司始终保持着对技术创新的热情。他们不断研发新的电源管理技术和产品,推出了一系列具有高性能、高效率、低功耗特点的电源管理解决方案。这些创新产品不仅满足了客户的需求,也引领了市场的发展潮流,使得Analog Power在行业中逐渐崭露头角。

Cooper Tools(Eaton)公司的发展小趣事

品质是Analog Power公司的生命线。他们深知只有提供高质量的产品和服务,才能赢得客户的信任和忠诚。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重客户反馈和需求,不断优化产品和服务,以满足客户的期望和需求。

EasySync公司的发展小趣事

随着数字化和智能化技术的不断发展,EasySync公司也加快了数字化转型的步伐。公司引入先进的生产管理系统和智能制造设备,实现了生产过程的自动化和智能化。同时,公司还加强了对大数据和人工智能技术的研发和应用,为客户提供更加智能化、个性化的同步解决方案。

问答坊 | AI 解惑

液晶显示模块编程

MG-12232模块的编程   在系统程序的初始化部分,应对程序中用到的寄存器和临时变量作说明,如: unsigned  char        TRANS; unsigned  char        PAGEADD;&nbs ...…

查看全部问答>

如何诊断和排除电喷发动机加速不良的故障?

一、故障现象。踩下加速踏板后发动机转速不能马上升高,有迟滞现象,加速反应迟缓或在加速过程中发现有轻微的波动。 二、故障原因 (1)点火提前角不正确。 (2)燃油压力过低。 (3)进气系统中有漏气。 (4)节气门位置 ...…

查看全部问答>

开赛后,论坛是否会发布相关解题策略?

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 如题。。 新手啊~~许多都不会做,希望论坛到时能相助。。 只要能在比赛期间,做出作品,我已经是万分感激了。。 --------------------------------------------soso----------------------------- ...…

查看全部问答>

求助: IDS语音器件分段地址的获取

各位大虾:你们好!上次的帖子问题没说好,重新发一下!!   再下最近在做一个基于单片机的语音播报时钟,但是在语音器件分段地址的获取遇到了问题!主要功能是通过按键播报当前系统时间,我选用的语音芯片是ISD2560,用的AT89S51单片机, ...…

查看全部问答>

wince webservice c#问题

大家好,我创建了一个最简单的hello world webservice,将其添加作为web引用到一个wince应用程序中,调试运行时报参数超出范围异常(argumentoutofrangeexception),报异常语句是:  object[] results = this.Invoke(\"HelloWorld\", ne ...…

查看全部问答>

wince 5.0 播放声音问题

PlaySound(L\"1.wav\",NULL, SND_ASYNC|SND_NODEFAULT ); 看我这句话 有什么错误呢 把1.wav放在了 和exe文件同目录下,但是 为什么 没有播放呢?…

查看全部问答>

招聘信息 企业急需单片机、嵌入式销售、开发、系统工程师以及项目经理

招聘信息 企业急需单片机、嵌入式销售、开发、系统工程师以及项目经理(就职地点北京、青岛、杭州、上海、深圳)      1. 嵌入式企业急需市场销售、软件研发、黑、白盒测试、项目经理等职位,详细资料请登录中华嵌入式人才库 ...…

查看全部问答>

访问DROMSTART之前的地址为什么会FAULT

访问DROMSTART之前的地址为什么会FAULT? 地址是有效的空间,并不是无效的,是我编写的ISP程序的起始地址。 typedef  void (*pFunction)(void); void down_module(void) { u32 JumpAddress;   pFunction Jump_To_I ...…

查看全部问答>

安逸通电子有限公司

公司既述 NET 安逸通国际电子有限公司创建于1990年,总部设立于美国,为了更好服务亚太地区,于2011年迁入中国香港NET 安逸通国际全球最大的后市场持续制造商,是一家为各种商业原始设备制造商 (OEM) 和电子产品制造服务提供商 (EMS) 提供高技术主 ...…

查看全部问答>