5.HAL库之时钟系统及定时器SYSTICK

发布者:水墨人生最新更新时间:2019-08-16 来源: eefocus关键字:HAL库  时钟系统  定时器  SYSTICK 手机看文章 扫描二维码
随时随地手机看文章

1.系统时钟树:


LSI:低速内部时钟(RC震荡器),32kHz,提供低功耗时钟,用于看门狗和自动唤醒单元。


LSE:低速外部时钟,外接32.768kHz的石英晶体,可用于RTC。


HSI:高速内部时钟16MHz,RC振荡器,精度不高,可用作系统时钟或PLL输入。


HSE:高速外部时钟4~26MHz,外接石英/陶瓷谐振器或外部时钟源,可用作RTC或PLL或系统时钟。


PLL:锁相环倍频输出,包括主PLLCLK(生成高速系统时钟216MHz和生成USB等的时钟4PLL48CLK,48MHz)和专用PLLI2SR(生成精确时钟,在I2S接口实现高品质音频性能,PLLI2Q用作SAI时钟。

             

 

总结:STM32有5个时钟来源,HSI,HSE,LSI,LSE,PLL。 系统时钟SYSCLK有3个时钟来源,HSI,HSE和PLL。


STM32时钟信号输出MCO1(PA8)和MCO2(PA9),最大输出不超过100MHz。任何一个外设在使用前必须使能相应的时钟。


2.相关库函数(stm32f7xx_hal_rcc.h)


a.时钟初始化函数:


HAL_RCC_DeInit(void),      HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct),        HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);


b.外设控制函数:


HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);


HAL_RCC_EnableCSS(void);   HAL_RCC_DisableCSS(void);    HAL_RCC_GetSysClockFreq(void);  HAL_RCC_GetHCLKFreq(void);  HAL_RCC_GetPCLK1Freq(void);  HAL_RCC_GetPCLK2Freq(void); HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);


HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency);


HAL_RCC_NMI_IRQHandler(void);    HAL_RCC_CSSCallback(void);


c.6个结构体:


 


RCC_OscInitTypeef;    RCC_ClkInitTypeDef;  RCC_PLLInitTypeDef; RCC_PLLI2SInitTypeDef;  RCC_PLLSAIInitTypeDef;


RCC_PeriphCLKInitTypeDef;


启动文件中运行main()之前,会先运行SystemInit( )进行系统时钟的初始化默认配置。在stm32f7xx_hal_conf.h头文件中定义了HSE_VALUE(25M),HSI_VALUE(16M),LSI_VALUE(32K),LSE_VALUE (32768),EXTERNAL_CLOCK_VALUE


3.系统时钟配置


采用HSE(25MHz)作为系统时钟输入,利用HSE分频得到PLLCLK,并作为系统时钟(216MHz)


void Sysclk_config(){

  RCC_OscInitTypeDef RCC_OscInitStruct;  //外部晶振初始化结构体

  RCC_ClkInitTypeDef RCC_ClkInitStruct;  //CPU,AHB,APB等总线时钟初始化结构体

  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;  //时钟外设

 

  __HAL_RCC_PWR_CLK_ENABLE();  //AHB时钟使能

 

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;   //选择时钟源为HSE

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;  //开启HSE

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;  //开启PLL

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

  RCC_OscInitStruct.PLL.PLLM = 25;   //分频系数M

  RCC_OscInitStruct.PLL.PLLN = 432;  //倍频系数N

  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; //分频系数P,得到PLLCLK=216MHz

  RCC_OscInitStruct.PLL.PLLQ = 9;  ////分频系数Q,用于产生USB时钟PLLQ=48MHz

  HAL_RCC_OscConfig(&RCC_OscInitStruct); //配置初始化

  HAL_PWREx_EnableOverDrive(); //激活OVERDRIVE模式达到216MHz

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //时钟源选择PLLCLK=216MHz

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //分频系数AHBPRESC=1,得到HCLK=216MHz

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;//分频系数APB1PRESC=4,得到APB1外设时钟54MHz,定时器108MHz

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;//分频系数APB2PRESC=2,得到APB2外设时钟108MHz,定时器216MHz

  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_6);//配置初始化

 

  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;

  PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;

  PeriphClkInitStruct.TIMPresSelection=RCC_TIMPRES_ACTIVATED;

  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);//外设时钟配置

 

//SYSTICK时钟配置

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//选择系统时钟源216MHz

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);   //1毫秒产生一次中断

  NVIC_SetPriority(SysTick_IRQn, 15);  //配置优先级

}



关键字:HAL库  时钟系统  定时器  SYSTICK 引用地址:5.HAL库之时钟系统及定时器SYSTICK

上一篇:3.STM32F4蜂鸣器
下一篇:6.中断优先级分组NVIC

推荐阅读最新更新时间:2024-11-10 16:12

STM32实验1:定时器中断同时产生两路不同频率的信号
一、实验目的 使用STM32同时产生两路不同频率的信号,并通过观察开发板两个LED闪烁快慢的现象,以及在MDK5中软件仿真逻辑分析中查看波形,体现两路信号频率的不同。 二、实验原理 通过定时器中断配置,定时器3每600ms中断一次,然后中断服务函数中控制LED实现LED1状态取反(闪烁);定时器4每200ms中断一次,然后中断服务函数中控制LED实现LED0状态取反(闪烁)。 本实验用到的硬件资源有: 1) 指示灯 LED0 和 LED1 2) 定时器 TIM3,TIM4 TIM3,TIM4属于 STM32 的内部资源,只需要软件设置即可正常工作。 1、通用定时器电路框图 2、计数器模式 采用向上计数 向上计数模式:计数器从
[单片机]
何谓STM32 定时器的 “COM事件”
无刷电机换向时,一般是三相要同时换向的,但是在软里设置换向时肯定是一次只能设置一相,这就达不到三相同时换向。 简单的办法就是启用STM32的COM事件,你先逐个设置好每相的换向(注意:此时虽然设置了,但实际上并不会进行换向), 然后再调用COM事件,此时,三相将同时换向
[单片机]
何谓STM32 <font color='red'>定时器</font>的 “COM事件”
STM32F4 HAL库DMA学习
用了一段时间HAL库,不知道是不是用外设固件库时间长一点的原因,个人感觉没有固件库来的直接。看DMA部分看的有点乱,捋一下。 DMA的使用方法及细节直接看官方的手册就可以了,注意的是如果原地址和目的地址的数据长度不一样的话只能使用FIFO模式,直接模式下原地址和目的地址的数据长度必须一致。 主要是简单整理一下使用DMA的初始化过程,以串口发送使用DMA为例: (1) 定义一个外设的句柄,对外设的基本参数、IO、时钟、中断等进行初始化。 UART_HandleTypeDef UART1_Handler; .... HAL_UART_Init(&UART1_Handler); 调用外设的初始
[单片机]
【STM32】HAL库 STM32CubeMX教程八---定时器输入捕获
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 STM32CubeMX创建PWM例程 HAL库定时器PWM函数库 PWM创建呼吸灯 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非
[单片机]
【STM32】<font color='red'>HAL库</font> STM32CubeMX教程八---<font color='red'>定时器</font>输入捕获
STM32开发板学习日记-[3] TIM定时器输出比较
使用Timer进行周期定时 在STM32的某些应用中,用户有周期性执行某些程序的要求,使用定时器可以产生固定的时间周期,满足 这样的需求。 STM32相关特征: STM32高级定时器TIM1、TIM8,通用定时器TIM2、TIM3、TIM4、TIM5; 定时器最大时钟72MHz,配合预分频,提供灵活的时钟周期; 每个TIM有4个独立捕获/比较通道,DMA/中断功能; 通道工作在输出比较定时模式,一个TIM至多可以提供4个不同的定时周期。 原理 TIM某输出/捕获通道工作在输出比较定时模式 计数器计数至比较值时产生中断,在中断中刷新捕获比较寄存器,这样在相同时间间隔后可产生下一次中断 TIM2时钟设置为36MHz,预
[单片机]
ucos-II移植到stm32上关于systick部分的修改
systick初始化一般放在创建第一个任务里,具体说是在OSInit(); 之后的第一个任务开始处,在早期版本的库文件中包含stm32f10x_systick.c和stm32f10x_systick.h两个文件, 因此我们只要在第一个任务开始处,调用下面这个函数即可。SysTick_Config里面所调用的函数就定义在stm32f10x_systick.c中。 void SysTick_Config(void) { RCC_ClocksTypeDef rcc_clocks; INT32U cnts; RCC_GetClocksFreq(&rcc_clocks); cnts = (INT32
[单片机]
AVR单片机定时器TIME0普通定时实验程序
/*很简单的问题费了好大的劲,注意中断向量地址和向量号的区别,*/ /*这样的是时钟节拍可以搞到微秒级的,太好了这样对以后搞操作系统是很管用的,节拍直接影响CPU的利用效率*/ /*节拍器越小,时间片就越准确,对于整个系统的统一是绝对有意义的,*/ /*AVR定时器普通定时实验 0415 天津第四项目部宿舍 */ #include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=(1 b) #define get_bit(a,b) a&(
[单片机]
STM32时钟系统介绍与总结
时钟树: 1. HSI振荡器时钟 The HSI clock signal is generated from an internal 8 MHz RC Oscillator and can be used directly as a system clock or divided by 2 to be used as PLL input. The HSI RC oscillator has the advantage of providing a clock source at low cost (no external components). It also has a faster startup time than
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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