5 STM32系列MCU时钟系统配置_第1页
5 STM32系列MCU时钟系统配置_第2页
5 STM32系列MCU时钟系统配置_第3页
5 STM32系列MCU时钟系统配置_第4页
5 STM32系列MCU时钟系统配置_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32时钟系统主讲人:靳光明教学目标认识时钟树课堂总结配置系统时钟2教学目标

在数字系统中,所有部件要正常工作,都离不开时钟。STM32的时钟是学习、应用的难点和重点。难:

时钟系统复杂、灵活

时钟源多(片内、片外)

选择设置多样重:

每个外设都必须要使用时钟学习时钟首先从STM32的时钟类型入手,从理解几个重要的概念起步。时钟树:从时钟输入到输出的拓扑关系图

看懂

每种外设的时钟配置——掌握正确设置STM32系列MCU时钟STM32系列MCU时钟认识时钟树1什么是时钟?2认识时钟树(F1)3认识时钟树(F4)4认识时钟树(F7)5认识时钟树(F7)时钟是单片机的脉搏,搞懂时钟走向及关系,对单片机使用至关重要!1.1,什么是时钟?简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波STM32系列MCU时钟STM32系列MCU时钟1.2,认识时钟树(F1)时钟源名称频率材料用途高速外部振荡器(HSE)4~16MHz晶体/陶瓷SYSCLK/RTC低速外部振荡器(LSE)32.768KHz晶体/陶瓷RTC高速内部振荡器(HSI)8MHzRCSYSCLK低速内部振荡器(LSI)40KHzRCRTC/IWDGH:highL:lowS:speedI:internalE:external符号作用时钟安全系统(CSS)如果HSE启动失败,切换到HSI,可进NMI中断自由运行时钟(FCLK)用于采样中断和调试模块计时,休眠仍有效STM32F103时钟树简图*2~*16HSEHSILSISYSCLKHCLKAPB136M(max)APB272M(max)外设外设RTCIWDGLSE4~16MHz8MHz40KHz32.768KHz时钟源、锁相环:HAL_RCC_OscConfig()系统时钟、总线:HAL_RCC_ClockConfig()使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()扩展外设时钟(RTC/ADC/USB):HAL_RCCEx_PeriphCLKConfig()///内核外设/2/1、2PLL72MHz(max)STM32系列MCU时钟STM32CubeMX时钟树(F103)STM32系列MCU时钟STM32系列MCU时钟1什么是时钟?2认识时钟树(F1)3认识时钟树(F4)4认识时钟树(F7)5认识时钟树(F7)认识时钟树STM32系列MCU时钟1.3,认识时钟树(F407)时钟源名称频率材料用途高速外部振荡器(HSE)4~26MHz晶体/陶瓷SYSCLK/RTC低速外部振荡器(LSE)32.768KHz晶体/陶瓷RTC高速内部振荡器(HSI)16MHzRCSYSCLK低速内部振荡器(LSI)32KHzRCRTC/IWDGH:highL:lowS:speedI:internalE:externalSTM32系列MCU时钟1.3,认识时钟树(F429)STM32F4时钟树简图HSEHSILSISYSCLKHCLKRTCIWDGLSE4~26MHz16MHz32KHz32.768KHz时钟源、PLL:HAL_RCC_OscConfig()系统时钟、总线:HAL_RCC_ClockConfig()使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()扩展外设时钟(PLLI2S/I2S/LTDC/RTC等):HAL_RCCEx_PeriphCLKConfig()////MPLL*N/P/QAPB1APB2内核外设外设外设F407:168MHzF429:180MHzF407:84MHzF429:90MHzF407:42MHzF429:45MHz外设STM32系列MCU时钟STM32CubeMX时钟树(F407)STM32系列MCU时钟STM32CubeMX时钟树(F429)STM32系列MCU时钟STM32CubeMX时钟树(F429)USB相关例程的系统时钟配置STM32系列MCU时钟1,认识时钟树1.1,什么是时钟?1.2,认识时钟树(F1)1.3,认识时钟树(F4)1.4,认识时钟树(F7)1.5,认识时钟树(H7)STM32系列MCU时钟STM32系列MCU时钟1.4,认识时钟树(F7)时钟源名称频率材料用途高速外部振荡器(HSE)4~26MHz晶体/陶瓷SYSCLK/RTC低速外部振荡器(LSE)32.768KHz晶体/陶瓷RTC高速内部振荡器(HSI)16MHzRCSYSCLK低速内部振荡器(LSI)32KHzRCRTC/IWDGH:highL:lowS:speedI:internalE:externalSTM32F7时钟树简图HSEHSILSISYSCLKHCLKRTCIWDGLSE4~26MHz16MHz32KHz32.768KHz时钟源、锁相环:HAL_RCC_OscConfig()系统时钟、总线:HAL_RCC_ClockConfig()使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()扩展外设时钟(PLLI2S/PLLSAI/RTC等):HAL_RCCEx_PeriphCLKConfig()////MPLL*N/P/QAPB1APB2内核外设外设外设216MHz(max)108MHz(max)54MHz(max)外设STM32系列MCU时钟STM32CubeMX时钟树(F767/F750)STM32系列MCU时钟1,认识时钟树1.1,什么是时钟?1.2,认识时钟树(F1)1.3,认识时钟树(F4)1.4,认识时钟树(F7)1.5,认识时钟树(H7)STM32系列MCU时钟STM32系列MCU时钟1.5,认识时钟树(H7)时钟源名称频率材料用途高速外部振荡器(HSE)4~48MHz晶体/陶瓷SYSCLK/RTC低速外部振荡器(LSE)32.768KHz晶体/陶瓷IWDG/RTC/AWU高速内部振荡器(HSI)64MHzRCSYSCLK低速内部振荡器(LSI)32KHzRCIWDG/RTC/AWU高速内部振荡器(HSI48)48MHzRCUSB低功耗内部振荡器(CSI)4MHzRCSYSCLK(低功耗)辅助型时钟系统作用时钟安全系统(CSS)如果HSE启动失败,切换到HSI,可进NMI中断特殊时钟恢复系统(CRS)可实时自动调整振荡器频率,确保高精度时钟STM32系列MCU时钟STM32系列MCU时钟STM32H7时钟树简图DIVM1HSIHSESYSCLKHCLK240M(max)AXI外设4~48MHz64MHz/CPUCSI4MHzsys_d1cpre_ck480M(max)AHB3APB3AHB1\2APB1APB2AHB4APB4外设外设外设外设外设外设外设SystickDIVN1DIVP1DIVQ1DIVR1fracn1外设外设DIVM2DIVN2DIVP2DIVQ2DIVR2fracn2外设外设外设//////APB1~4总线的时钟频率:120MHz(max)//HSI48USBPLL1PLL2*////*///STM32H7时钟树-低频部分简图LSIRTCIWDGLSE32KHz32.768KHz时钟源、PLL1:HAL_RCC_OscConfig()系统时钟、总线:HAL_RCC_ClockConfig()使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()扩展外设时钟(PLL2/PLL3/LTDC/USB等):HAL_RCCEx_PeriphCLKConfig()STM32系列MCU时钟STM32CubeMX时钟树(H7)HSE时钟频率为8MHzSTM32系列MCU时钟STM32CubeMX时钟树(H7)HSE时钟频率为25MHzSTM32系列MCU时钟STM32CubeMX时钟树(H7)STM32系列MCU时钟2,配置系统时钟2.1,系统时钟配置步骤2.2,外设时钟使能和失能2.3,sys_stm32_clock_init函数(F1)2.4,sys_stm32_clock_init函数(F4/F7)2.5,sys_stm32_clock_init函数(H7)STM32系列MCU时钟1,配置HSE_VALUE3,选择时钟源,配置PLL4,选择系统时钟源,配置总线分频器告诉HAL库外部晶振频率,stm32xxxx_hal_conf.h通过HAL_RCC_OscConfig()函数设置通过HAL_RCC_ClockConfig()函数设置3+4+5=sys_stm32_clock_init()2.1,系统时钟配置步骤5,配置扩展外设时钟(可选)通过HAL_RCCEx_PeriphCLKConfig()函数设置2,调用SystemInit()函数(可选)在启动文件中调用,

在system_stm32xxxx.c定义STM32系列MCU时钟2.2,外设时钟使能和失能HAL库使能某个外设时钟的方法,如:

__HAL_RCC_GPIOA_CLK_ENABLE();

/*使能GPIOA时钟*/我们要使用某个外设,必需先使能该外设时钟!!!HAL库禁止某个外设时钟的方法,如:__HAL_RCC_GPIOA_CLK_DISABLE();

/*禁止GPIOA时钟*/STM32系列MCU时钟2.3,sys_stm32_clock_init函数(F1)1,HAL_RCC_OscConfig()函数2,HAL_RCC_ClockConfig()函数STM32系列MCU时钟1,HAL_RCC_OscConfig()函数(F1)HAL_StatusTypeDefHAL_RCC_OscConfig(RCC_OscInitTypeDef*RCC_OscInitStruct)typedef

struct

{

uint32_tOscillatorType;

/*选择需要配置的振荡器*/

uint32_tHSEState;

/*HSE状态*/

uint32_tHSEPredivValue;

/*HSE预分频值*/

uint32_tLSEState;

/*LSE状态*/

uint32_tHSIState;

/*HSI状态*/

uint32_tHSICalibrationValue;

/*HSI校准值*/

uint32_tLSIState;

/*LSI状态*/

RCC_PLLInitTypeDefPLL;

/*PLL结构体*/

}RCC_OscInitTypeDef;typedef

struct

{

uint32_tPLLState;

/*PLL状态*/

uint32_tPLLSource;

/*PLL时钟源*/

uint32_tPLLMUL;

/*PLL倍频系数*/

}RCC_PLLInitTypeDef;STM32系列MCU时钟HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef*RCC_ClkInitStruct,uint32_tFLatency)typedef

struct

{

uint32_tClockType;

/*要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2)*/

uint32_tSYSCLKSource;

/*系统时钟源*/

uint32_tAHBCLKDivider;

/*AHB时钟预分频系数*/

uint32_tAPB1CLKDivider;

/*APB1时钟预分频系数*/

uint32_tAPB2CLKDivider;

/*APB2时钟预分频系数*/

}RCC_ClkInitTypeDef;uint32_tFLatency#defineFLASH_LATENCY_00x00000000U /*FLASH0个等待周期*/

#defineFLASH_LATENCY_1FLASH_ACR_LATENCY_0 /*FLASH1个等待周期*/

#defineFLASH_LATENCY_2FLASH_ACR_LATENCY_1 /*FLASH2个等待周期*/实际设置FLASH_ACR寄存器LATENCY位域,请参考《

STM32F10xxx闪存编程参考手册.pdf》3.1小节2,HAL_RCC_ClockConfig函数(F1)STM32系列MCU时钟2,配置系统时钟2.1,系统时钟配置步骤2.2,外设时钟使能和失能2.3,sys_stm32_clock_init函数(F1)2.4,sys_stm32_clock_init函数(F4/F7)2.5,sys_stm32_clock_init函数(H7)STM32系列MCU时钟2.4,sys_stm32_clock_init函数(F4/F7)1,HAL_RCC_OscConfig()函数2,HAL_RCC_ClockConfig()函数STM32系列MCU时钟HAL_StatusTypeDefHAL_RCC_OscConfig(RCC_OscInitTypeDef*RCC_OscInitStruct)typedef

struct

{

uint32_tOscillatorType;

/*选择需要配置的振荡器*/

uint32_tHSEState;

/*HSE状态*/

uint32_tLSEState;

/*LSE状态*/

uint32_tHSIState;

/*HSI状态*/

uint32_tHSICalibrationValue;

/*HSI校准微调值,范围0x0~0x1F*/

uint32_tLSIState;

/*LSI状态*/

RCC_PLLInitTypeDefPLL;

/*PLL结构体*/

}RCC_OscInitTypeDef;typedef

struct

{

uint32_tPLLState;

/*PLL状态*/

uint32_tPLLSource;

/*PLL时钟源*/

uint32_tPLLM;

/*PLL分频系数M*/

uint32_tPLLN;

/*PLL倍频系数N*/

uint32_tPLLP;

/*PLL分频系数P*/

uint32_tPLLQ;

/*PLL分频系数Q*/

}RCC_PLLInitTypeDef;

1,HAL_RCC_OscConfig()函数(F4/F7)STM32系列MCU时钟HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef*RCC_ClkInitStruct,uint32_tFLatency)typedef

struct

{

uint32_tClockType;

/*要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2)*/

uint32_tSYSCLKSource;

/*系统时钟源*/

uint32_tAHBCLKDivider;

/*AHB时钟预分频系数*/

uint32_tAPB1CLKDivider;

/*APB1时钟预分频系数*/

uint32_tAPB2CLKDivider;

/*APB2时钟预分频系数*/

}RCC_ClkInitTypeDef;uint32_tFLatency#defineFLASH_LATENCY_0FLASH_ACR_LATENCY_0WS /*FLASH0个等待周期*/

#defineFLASH_LATENCY_1FLASH_ACR_LATENCY_1WS /*FLASH1个等待周期*/

#defineFLASH_LATENCY_2FLASH_ACR_LATENCY_2WS /*FLASH2个等待周期*/

...

#defineFLASH_LATENCY_15FLASH_ACR_LATENCY_15WS /*FLASH15个等待周期*/

实际设置FLASH_ACR寄存器LATENCY位域2,HAL_RCC_ClockConfig()函数(F4/F7)STM32系列MCU时钟2,配置系统时钟2.1,系统时钟配置步骤2.2,外设时钟使能和失能2.3,sys_stm32_clock_init函数(F1)2.4,sys_stm32_clock_init函数(F4/F7)2.5,sys_stm32_clock_init函数(H7)STM32系列MCU时钟2.4,sys_stm32_clock_init函数(H7)1,HAL_RCC_OscConfig()函数2,HAL_RCC_ClockConfig()函数3,HAL_RCCEx_PeriphCLKConfig()函数STM32系列MCU时钟HAL_StatusTypeDefHAL_RCC_OscConfig(RCC_OscInitTypeDef*RCC_OscInitStruct)typedef

struct

{

uint32_tOscillatorType;

/*选择需要配置的振荡器*/

uint32_tHSEState;

/*HSE状态*/

uint32_tLSEState;

/*LSE状态*/

uint32_tHSIState;

/*HSI状态*/

uint32_tHSICalibrationValue;

/*HSI校准微调值*/

uint32_tLSIState;

/*LSI状态*/

uint32_tHSI48State;

/*HSI48状态*/

uint32_tCSIState;

/*CSI状态*/

uint32_tCSICalibrationValue;

/*CSI校准微调值*/

RCC_PLLInitTypeDefPLL;

/*PLL结构体*/

}RCC_OscInitTypeDef;1,HAL_RCC_OscConfig()函数(H7)STM32系列MCU时钟typedef

struct

{

uint32_tPLLState;

/*PLL1状态*/

uint32_tPLLSource;

/*PLL1时钟源*/

uint32_tPLLM;

/*PLL1分频系数M*/

uint32_tPLLN;

/*PLL1倍频系数N*/

uint32_tPLLP;

/*PLL1分频系数P*/

uint32_tPLLQ;

/*PLL1分频系数Q*/

uint32_tPLLR;

/*PLL1分频系数R*/

uint32_tPLLRGE;

/*PLL1时钟输入范围*/

uint32_tPLLVCOSEL;

/*PLL1时钟输出范围*/

uint32_tPLLFRACN;

/*PLL1VCO乘数因子的小数部分*/

}RCC_PLLInitTypeDef;1,HAL_RCC_OscConfig()函数(H7)STM32系列MCU时钟HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef*RCC_ClkInitStruct,uint32_tFLatency)typedef

struct

{

uint32_tClockType;

/*要配置的时钟*/

uint32_tSYSCLKSource;

/*系统时钟源*/

uint32_tSYSCLKDivider;

/*SYSCLK分频系数*/

uint32_tAHBCLKDivider;

/*AHB时钟预分频系数*/

uint32_tAPB3CLKDivider;

/*APB3时钟预分频系数*/

uint32_tAPB1CLKDivider;

/*APB1时钟预分频系数*/

uint32_tAPB2CLKDivider;

/*APB2时钟预分频系数*/

uint32_tAPB4CLKDivider;

/*APB4时钟预分频系数*/

}RCC_ClkInitTypeDef;

uint32_tFLatency#defineFLASH_LATENCY_0FLASH_ACR_LATENCY_0WS /*FLASH0个等待周期*/

#defineFLASH_LATENCY_1FLASH_ACR_LATENCY_1WS /*FLASH1个等待周期*/

#defineFLASH_LATENCY_2FLASH_ACR_LATENCY_2WS /*FLASH2个等待周期*/

...

#defineFLASH_LATENCY_15FLASH_ACR_LATENCY_15WS /*FLASH15个等待周期*/

实际设置FLASH_ACR寄存器LATENCY位域2,HAL_RCC_ClockConfig()函数(H7)STM32系列MCU时钟HAL_StatusTypeDefHAL_RCCEx_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论