0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RCC时钟控制系统组成及时钟原程序分析

牵手一起梦 来源:eefocus 作者:eefocus 2020-01-24 17:38 次阅读

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

RCC时钟控制系统组成及时钟原程序分析

RCC时钟控制系统组成及时钟原程序分析

RCC时钟控制系统组成及时钟原程序分析

如上图所示,在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是低速外设时钟,一般给CANUSBI2C、USART、SPI、Timer、ADCDAC提供时钟信号。下面结合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);//滴答定时器中断优先级

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    182

    文章

    16508

    浏览量

    244548
  • 控制系统
    +关注

    关注

    41

    文章

    5950

    浏览量

    108589
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130295
收藏 人收藏

    评论

    相关推荐

    时钟源到底有多重要?微控制器中的时钟频率是什么?

    控制器依赖于其时钟源。处理器、总线和外围设备都使用时钟来同步它们的操作。
    的头像 发表于 04-15 14:17 141次阅读

    RCC_ADCCLKConfig函数的ADC时钟是默认的吗?

    ADC配置中,没有找到配置ADC时钟的函数RCC_ADCCLKConfig;ADC时钟是默认的吗?
    发表于 03-28 08:36

    控制系统之间如何实现时钟同步?

    控制系统之间如何实现时钟同步? 控制系统之间的时钟同步是确保不同系统之间的时钟保持一致的过程。它
    的头像 发表于 01-16 14:37 276次阅读

    电梯控制系统由哪些组成

    电梯控制系统是指电梯的控制系统经历了从简单到复杂的过程。电梯控制系统由多个部分组成,包括曳引系统、导向
    的头像 发表于 11-27 16:06 1116次阅读

    STM32L15x时钟和复位系统RCC介绍

    耗电与频率成正比最低为1.5μA。如果有32.768kHz的振荡器连接到LSE精度可达0.5% 复位和从停止/待机模式退出后MSI将作为默认的系统时钟其建立时间的最大值为2us。 低速内部振荡器
    发表于 09-12 08:25

    STM32L4复位和时钟控制(RCC)介绍

    系统复位 •重置除某些RCC寄存器、PWR寄存器和备份域 •来源 •NRST引脚上的低电平(外部复位) •WWDG活动 •IWDG活动 •防火墙事件 •软件重置(通过NVIC) •低功耗模式安全重置 •选项字节加载程序重置 •棕
    发表于 09-12 06:05

    S3C2440如何设置系统时钟

    S3C2440如何设置系统时钟 S3C2440是一款嵌入式处理器,属于SAMSUNG公司的ARM9系列。系统时钟是嵌入式系统中非常重要的一个
    的头像 发表于 09-02 15:12 539次阅读

    时钟电路是晶振电路吗 时钟电路布局走线设计方法

    时钟电路用于产生稳定的时钟信号,常见于数字系统、微处理器、微控制器、通信设备等。时钟信号用于同步各个电子元件的操作和数据传输,确保
    的头像 发表于 08-03 14:46 1642次阅读

    时钟域信号如何处理 跨时钟域电路设计

    在一个复杂的SoC(System on Chip)系统中,不可能只有一个时钟。我们一般认为,一个时钟控制的所有寄存器集合处于该时钟
    的头像 发表于 08-01 15:48 1133次阅读
    跨<b class='flag-5'>时钟</b>域信号如何处理 跨<b class='flag-5'>时钟</b>域电路设计

    复位和时钟控制RCC课件下载

    电子发烧友网站提供《复位和时钟控制RCC课件下载.pdf》资料免费下载
    发表于 08-01 09:48 0次下载
    复位和<b class='flag-5'>时钟</b><b class='flag-5'>控制</b><b class='flag-5'>RCC</b>课件下载

    如何去实现一种基于psoc6的时钟系统设计?

    近年来,随着电子产品的发展,人们对时钟的要求越来越高。时钟系统是一种用数字电路技术实现年、月、日、周、时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有
    的头像 发表于 07-31 14:51 582次阅读
    如何去实现一种基于psoc6的<b class='flag-5'>时钟</b><b class='flag-5'>系统</b>设计?

    如何去实现一种跨时钟域电路的设计?

    在一个复杂的SoC(System on Chip)系统中,不可能只有一个时钟。我们一般认为,一个时钟控制的所有寄存器集合处于该时钟
    的头像 发表于 07-13 17:39 1063次阅读
    如何去实现一种跨<b class='flag-5'>时钟</b>域电路的设计?

    什么是时钟门控技术?为什么需要控制时钟的通断呢?

    开始之前,我们首先来看一下什么是时钟门控(clock gating)技术,顾名思义就是利用逻辑门技术控制时钟的通断。
    的头像 发表于 06-29 15:38 1355次阅读
    什么是<b class='flag-5'>时钟</b>门控技术?为什么需要<b class='flag-5'>控制</b><b class='flag-5'>时钟</b>的通断呢?

    使用可编程振荡器生成和控制系统时钟

    在处理器控制系统中,功耗与处理器的时钟速度成正比。如果处理器上的计算负载很小,则大部分功率都会被浪费。将处理器速度调制到尽可能慢的频率,同时保持执行手头任务的最低计算能力可以减少这种浪费。本应用笔记描述了使用DS1077通过P
    的头像 发表于 06-01 19:05 378次阅读
    使用可编程振荡器生成和<b class='flag-5'>控制系统</b><b class='flag-5'>时钟</b>

    CH32V103基础教程103-RCC—HSE/HSI时钟配置

    RC 振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间很短但时钟频率精度较差。HSI 通过设置 RCC_CTLR 寄存器中的 HSION 位被启动和关闭,HSIRDY
    发表于 05-15 16:43