时钟与设计(共53张)课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《时钟与设计(共53张)课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时钟 设计 53 课件
- 资源描述:
-
1、第章时钟与设计第第8章章 STM32时钟与时钟与GPIO设计设计F8.1 8.1 时钟设置与开启外设时钟时钟设置与开启外设时钟 F8.2 GPIO8.2 GPIO简介简介F8.3 GPIO8.3 GPIO端口配置存放器端口配置存放器F8.4 stm32f10 x.h8.4 stm32f10 x.h库中库中GPIOGPIO代码剖析代码剖析F8.6 GPIO8.6 GPIO控制控制LEDLED灯实验灯实验8.1 系统时钟配置与外设时钟开启F在在startup_stm32f10 x_hd.sstartup_stm32f10 x_hd.s启动文件中,调用启动文件中,调用_main_main函数之前函数
2、之前先调用了先调用了SystemInit()SystemInit()初始化函数,其中系统时钟初始化函数,其中系统时钟SYSCLKSYSCLK设置:设置:时钟源、倍频、分频等控制参数。时钟源、倍频、分频等控制参数。FSystemInit()SystemInit()定义在定义在system_stm32f10 x.csystem_stm32f10 x.c文件中,其他的配文件中,其他的配置主要在置主要在stm32f10 x_rcc.cstm32f10 x_rcc.c中。中。F使用外设时,配置初始化后,必须也要开启外设时钟。使用外设时,配置初始化后,必须也要开启外设时钟。时钟设置解析F系统时钟系统时钟S
3、YSCLKSYSCLK是是SystemInit()SystemInit()先将配置时钟相关的存放器都复先将配置时钟相关的存放器都复位为默认值,再调用位为默认值,再调用SetSysClock()SetSysClock()选择使用频率,而具体设置是选择使用频率,而具体设置是通过宏定义设置的。通过宏定义设置的。F函数调用顺序:函数调用顺序:启动文件启动文件 SystemInit()SystemInit()SetSysClockSetSysClock()()SetSysClockTo72()SetSysClockTo72()。1、SystemInit()FSTM32STM32时钟系统的时钟系统的Sys
4、temInit()SystemInit()中设置:中设置:FSYSCLKSYSCLK系统时钟系统时钟=72MHz=72MHzFAHBAHB总线时钟总线时钟(使用使用SYSCLK)=72MHzSYSCLK)=72MHzFAPB1APB1总线时钟总线时钟(PCLK1)=36MHz(PCLK1)=36MHzFAPB2APB2总线时钟总线时钟(PCLK2)=72MHz(PCLK2)=72MHzFPLLPLL时钟时钟=72MHz=72MHzF用到的用到的RCCRCC存放器复位值:存放器复位值:FRCC_CR =0 x0000 xx83;RCC_CR =0 x0000 xx83;FRCC_CFGR =0
5、x0000 0000RCC_CFGR =0 x0000 0000;FRCC_CIR =0 x0000 0000;RCC_CIR =0 x0000 0000;FRCC_CFGR2=0 x0000 0000;RCC_CFGR2=0 x0000 0000;F F这些这些RCCRCC时钟存放器组名的宏定义与其他外设存放器名定义都在时钟存放器组名的宏定义与其他外设存放器名定义都在stm32f10 x.hstm32f10 x.h文件中。文件中。RCC时钟存放器组在stm32f10 x.h中的定义typedef structtypedef struct _IO uint32_t CR;_IO uint32_
6、t CR;_IO uint32_t CFGR;_IO uint32_t CFGR;_IO uint32_t CIR;_IO uint32_t CIR;_IO uint32_t APB2RSTR;_IO uint32_t APB2RSTR;_IO uint32_t APB1RSTR;_IO uint32_t APB1RSTR;_IO uint32_t AHBENR;_IO uint32_t AHBENR;_IO uint32_t APB2ENR;_IO uint32_t APB2ENR;_IO uint32_t APB1ENR;_IO uint32_t APB1ENR;_IO uint32_t
7、BDCR;_IO uint32_t BDCR;_IO uint32_t CSR;_IO uint32_t CSR;#ifdef STM32F10X_CL#ifdef STM32F10X_CL _IO uint32_t AHBRSTR;_IO uint32_t AHBRSTR;_IO uint32_t CFGR2;_IO uint32_t CFGR2;#endif/#endif/*STM32F10X_CL STM32F10X_CL*/#if defined#if defined(STM32F10X_LD_VL)|defined(STM32F10X_MD_VL)|defined(STM32F10X
8、_HD_VL)(STM32F10X_LD_VL)|defined(STM32F10X_MD_VL)|defined(STM32F10X_HD_VL)uint32_t RESERVED0;uint32_t RESERVED0;_IO uint32_t CFGR2;_IO uint32_t CFGR2;#endif/#endif/*STM32F10X_LD_VL|STM32F10X_MD_VL|STM32F10X_HD_VL STM32F10X_LD_VL|STM32F10X_MD_VL|STM32F10X_HD_VL*/RCC_TypeDef;RCC_TypeDef;F_IO _IO 宏定义宏定
9、义core_cm3.hcore_cm3.h中:中:F#define#define_IO_IOvolatilevolatile;Fvolatile,volatile,易变的易变的,用变量时需到原地用变量时需到原地址重新存取。址重新存取。F uint32_t uint32_t定义在定义在stdin.hstdin.h里。里。F typedef unsigned int uint32_t;typedef unsigned int uint32_t;F知道了结构体首地址就确定知道了结构体首地址就确定RCCRCC存放器存放器组所有组所有3232位存放器的地址,位存放器的地址,0 x040 x04正好正好是
10、地址偏移量,所以把连续的存放器是地址偏移量,所以把连续的存放器组定义为结构。组定义为结构。2、SetSysClock()函数如下此函数中选择调用确定使用频率的函数。此函数中选择调用确定使用频率的函数。Fstatic void SetSysClock(void)static void SetSysClock(void)#ifdef SYSCLK_FREQ_HSE#ifdef SYSCLK_FREQ_HSE SetSysClockToHSE();SetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHz#elif defined SYSCLK_FREQ_2
11、4MHz SetSysClockTo24();SetSysClockTo24();#elif defined SYSCLK_FREQ_36MHz#elif defined SYSCLK_FREQ_36MHz SetSysClockTo36();SetSysClockTo36();#elif defined SYSCLK_FREQ_48MHz#elif defined SYSCLK_FREQ_48MHz SetSysClockTo48();SetSysClockTo48();#elif defined SYSCLK_FREQ_56MHz#elif defined SYSCLK_FREQ_56MH
12、z SetSysClockTo56();SetSysClockTo56();#elif defined SYSCLK_FREQ_72MHz/#elif defined SYSCLK_FREQ_72MHz/使用此项使用此项 SetSysClockTo72();SetSysClockTo72();#endif#endif3、SetSysClockTo72()函数函数F各个各个SetSysClockToXX(void)SetSysClockToXX(void)函数,配置了具体的系统时钟函数,配置了具体的系统时钟,PLL,PLL倍频倍频以及分频系数。采用存放器直接配置方式,如:以及分频系数。采用存放器
13、直接配置方式,如:Fstatic void SetSysClockTo72(void)static void SetSysClockTo72(void)F _IO uint32_t StartUpCounter=0,HSEStatus=0;_IO uint32_t StartUpCounter=0,HSEStatus=0;F /*SYSCLK,HCLK,PCLK2 and PCLK1 configuration SYSCLK,HCLK,PCLK2 and PCLK1 configuration*/F /*Enable HSE Enable HSE*/F RCC-CR|=(uint32_t)RC
14、C_CR_HSEON);RCC-CR|=(uint32_t)RCC_CR_HSEON);F do doF F HSEStatus=RCC-CR&RCC_CR_HSERDY;HSEStatus=RCC-CR&RCC_CR_HSERDY;F StartUpCounter+;StartUpCounter+;F while(HSEStatus=0)&(StartUpCounter!=while(HSEStatus=0)&(StartUpCounter!=HSE_STARTUP_TIMEOUT);HSE_STARTUP_TIMEOUT);F F欲深入分析时钟配置,就仔细阅读这些最底层的库函数!欲深入分析
15、时钟配置,就仔细阅读这些最底层的库函数!开启关闭外设时钟F外设都是挂在外设都是挂在AHBAHB、APB1APB1、APB2APB2总线上,要想使用某个外设,必总线上,要想使用某个外设,必须初始化外设后,再开启使用开启外设的时钟,不用时再关闭外设须初始化外设后,再开启使用开启外设的时钟,不用时再关闭外设时钟时钟,从而降低从而降低STM32STM32的整体功耗。的整体功耗。Fstm32f10 x_rcc.cstm32f10 x_rcc.c文件中有开启和关闭外设时钟的库函数,文件中有开启和关闭外设时钟的库函数,如下:如下:FRCC_AHBPeriphClockCmdRCC_AHBPeriphCloc
16、kCmd(外设名,外设名,ENABLEENABLE|DISABLEDISABLE)挂在挂在AHBAHB总线外设的开启与关闭函数,总线外设的开启与关闭函数,ENABLEENABLE开启,开启,DISABLEDISABLE关闭外设时钟;关闭外设时钟;FRCC_APB1PeriphClockCmdRCC_APB1PeriphClockCmd(外设名,外设名,ENABLEENABLE|DISABLEDISABLE)挂在挂在APB1APB1总线外设的开启与关闭函数;总线外设的开启与关闭函数;FRCC_APB2PeriphClockCmdRCC_APB2PeriphClockCmd(外设名,外设名,ENA
17、BLEENABLE|DISABLEDISABLE)挂在挂在APB2APB2总线外设的开启与关闭函数;总线外设的开启与关闭函数;挂载在AHB的外设名Fstm32f10 x_rcc.hstm32f10 x_rcc.h中对外设名进行了宏定义中对外设名进行了宏定义,看名即知设备。看名即知设备。F#define RCC_AHBPeriph_DMA1 (uint32_t)0 x00000001)#define RCC_AHBPeriph_DMA1 (uint32_t)0 x00000001)F#define RCC_AHBPeriph_DMA2 (uint32_t)0 x00000002)#define
18、RCC_AHBPeriph_DMA2 (uint32_t)0 x00000002)F#define RCC_AHBPeriph_SRAM (uint32_t)0 x00000004)#define RCC_AHBPeriph_SRAM (uint32_t)0 x00000004)F#define RCC_AHBPeriph_FLITF (uint32_t)0 x00000010)#define RCC_AHBPeriph_FLITF (uint32_t)0 x00000010)F#define RCC_AHBPeriph_CRC (uint32_t)0 x00000040)#define RC
19、C_AHBPeriph_CRC (uint32_t)0 x00000040)F#define RCC_AHBPeriph_FSMC (uint32_t)0 x00000100)#define RCC_AHBPeriph_FSMC (uint32_t)0 x00000100)F#define RCC_AHBPeriph_SDIO (uint32_t)0 x00000400)#define RCC_AHBPeriph_SDIO (uint32_t)0 x00000400)F#define RCC_AHBPeriph_OTG_FS (uint32_t)0 x00001000)#define RCC_
20、AHBPeriph_OTG_FS (uint32_t)0 x00001000)F#define RCC_AHBPeriph_ETH_MAC (uint32_t)0 x00004000)#define RCC_AHBPeriph_ETH_MAC (uint32_t)0 x00004000)F#define RCC_AHBPeriph_ETH_MAC_Tx (uint32_t)0 x00008000)#define RCC_AHBPeriph_ETH_MAC_Tx (uint32_t)0 x00008000)F#define RCC_AHBPeriph_ETH_MAC_Rx (uint32_t)0
21、 x00010000)#define RCC_AHBPeriph_ETH_MAC_Rx (uint32_t)0 x00010000)挂载在APB2上的外设名F#define RCC_APB2Periph_AFIO (uint32_t)0 x00000001)#define RCC_APB2Periph_AFIO (uint32_t)0 x00000001)F#define RCC_APB2Periph_GPIO#define RCC_APB2Periph_GPIOA A (uint32_t)0 x00000004)(uint32_t)0 x00000004)F#define RCC_APB2P
22、eriph_GPIO#define RCC_APB2Periph_GPIOB B (uint32_t)0 x00000008)(uint32_t)0 x00000008)F F#define RCC_APB2Periph_GPIO#define RCC_APB2Periph_GPIOG G (uint32_t)0 x00000100)(uint32_t)0 x00000100)F#define RCC_APB2Periph_ADC1 (uint32_t)0 x00000200)#define RCC_APB2Periph_ADC1 (uint32_t)0 x00000200)F#define
23、RCC_APB2Periph_ADC2 (uint32_t)0 x00000400)#define RCC_APB2Periph_ADC2 (uint32_t)0 x00000400)F#define RCC_APB2Periph_TIM1 (uint32_t)0 x00000800)#define RCC_APB2Periph_TIM1 (uint32_t)0 x00000800)F#define RCC_APB2Periph_SPI1 (uint32_t)0 x00001000)#define RCC_APB2Periph_SPI1 (uint32_t)0 x00001000)F#defi
24、ne RCC_APB2Periph_TIM8 (uint32_t)0 x00002000)#define RCC_APB2Periph_TIM8 (uint32_t)0 x00002000)F#define RCC_APB2Periph_USART1 (uint32_t)0 x00004000)#define RCC_APB2Periph_USART1 (uint32_t)0 x00004000)F#define RCC_APB2Periph_ADC3 (uint32_t)0 x00008000)#define RCC_APB2Periph_ADC3 (uint32_t)0 x00008000
25、)F#define RCC_APB2Periph_TIM15 (uint32_t)0 x00010000)#define RCC_APB2Periph_TIM15 (uint32_t)0 x00010000)F#define RCC_APB2Periph_TIM16 (uint32_t)0 x00020000)#define RCC_APB2Periph_TIM16 (uint32_t)0 x00020000)F#define RCC_APB2Periph_TIM17 (uint32_t)0 x00040000)#define RCC_APB2Periph_TIM17 (uint32_t)0
展开阅读全文