




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专题三STM32时钟及相关库函数一、 STM32 MCU 时钟树STM32 MCU系统时钟树由系统时钟源、系统时钟SYSCLK和设备时钟等部分组成。图1 STM32芯片时钟树从图1可看到,芯片时钟源有4个:1 高速外部时钟HSE(4-16MHz);2 高速内部时钟HSI(8MHz);3 低速外部时钟LSE(32.768kHz);4 低速内部时钟LSI(40kHz)。从图1还可看到,芯片内部系统时钟SYSCLK的来源有3个。1 高速外部时钟HSE(4-16MHz);2 高速内部时钟HSI(8MHz);3 HSE或HSI通过锁相环2-16倍频后的锁相环时钟PLLCLK。上述的系统时钟SYSCLK经AHB预分频器后得到AHB总线时钟HCLK,继而得到APB1和APB2总线时钟。要注意的是:APB1挂接的外设有:DAC、UART2-5,TIM2-7、USB、I2C1-2等;APB2挂接的外设有:ADC1-3,GPIOA-G,TIM1,TIM8等。每次要使用STM32的相关外设,都要先使能对应的时钟。二、STM32的启动2.1 STM32的启动模式STM32处理器支持3种系统启动模式,且对应的存储介质均是芯片内置的。在每个STM32的芯片上都有两个引脚BOOT0和BOOT1,这两个引脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。表1. STM32xx系列处理器的启动模式启动模式的引脚启动模式功能说明BOOT1BOOT0X0用户闪存存储器将用户闪存存储器选为系统启动区域01系统存储器将系统存储器选为系统启动区域11片上SRAM将片上SRAM选为系统启动区域第1种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦除10万次。第2种方式是系统存储器启动方式,即我们常说的串口下载方式(ISP)。STM32中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话,可以切换到该模式下重新烧写Flash即可恢复正常。第3种启动方式是STM32内嵌的SRAM启动,该模式用于调试。上述三种模式,各有作用。如果要进行程序下载,就必须将启动模式调整到第二种方式,程序下载完毕后,再回复到第一种方式,就可以正常工作了。2.2 STM32的启动文件启动文件:建立工程文件时,keil MDK会提示“复制启动文件STM32F10x.s到项目文件夹下”。但是MDK提示的这个启动文件只定义了3个串口,4个定时器,具体到某个型号,每种STM32芯片都不一样。比如有的芯片器件是有5个串口,6个定时器的,如果用MDK提供的启动文件,就有2个串口,2个定时器找不到定义导致不能使用。在3.5版本的固件库下,有加了后缀的启动文件:Startup_stm32f10x_ld.sStartup_stm32f10x_md.sStartup_stm32f10x_hd.s上面,有后缀ld,md,hd,这三个后缀是什么意思呢?原来是这样的:ld Low-density 小容量 16-32Kmd Medium-density 中容量 64-128Khd High-density 大容量 256-512Kxl 超大容量 512-1024Kvl value line devices 超值型 cl Connectivity line devices 互联型 小容量:flash=32K中容量:64K=flash =128K 大容量:256K=flash根据你使用的芯片型号,就可以确定要使用哪种启动文件了。比如,我们使用STM32F103RB,这款芯片是128K的容量,那么就应该选启动文件Startup_stm32f10x_md.s。启动文件主要做了3个工作:1. 定义和初始化堆栈;2. 定义复位向量并初始化;3. 定义中断向量表及其相应的异常处理程序。4. 最后,开始main()函数。注意,在3.5版固件库中,升级后的启动文件还调用了system_stm32f10x.c文件中的SystemInit()函数,配置系统时钟到PLL倍频下的72MHz。因此,如果使用新版的启动文件,main()函数就无需再调用SystemInit()函数了。而如果工程文件中包含的是旧版的STM32F10x.s文件,该文件是没有系统时钟配置语句的,因此,用户进入main()函数需要自己调用SystemInit()函数。三、STM32芯片的时钟设置从前面的图1可以看到,要设置STM32芯片的时钟,有以下几个方面要考虑:1. 芯片的时钟源选择HSE,HIS还是其他?2. SYSCLK系统时钟应该选择哪个?3. 各总线的分频系数?4. PLL锁相环的倍频系数?5. 各个外设对应的时钟是开启呢,还是禁止?上面5个问题,STM32统一用RCC来解决。我们首先来看下与RCC相关的寄存器有哪些。typedef struct _IO uint32_t CR; _IO uint32_t CFGR; _IO uint32_t CIR; _IO uint32_t APB2RSTR; _IO uint32_t APB1RSTR; _IO uint32_t AHBENR; _IO uint32_t APB2ENR; _IO uint32_t APB1ENR; _IO uint32_t BDCR; _IO uint32_t CSR; RCC_TypeDef; 上面这个结构体类型的定义有这么多寄存器,每个寄存器简要说明如下:1) CR:时钟控制寄存器,选择stm32芯片时钟源,在HSE,HSI,PLL之间进行选择。2) CFGR:时钟配置寄存器,选择SYSCLK时钟源,以及各总线时钟的分频系数,以及PLL的倍频系数3) CIR:时钟中断寄存器,进行时钟中断的使能和清除。4) APB2RSTR:APB2外设复位寄存器,进行APB2外设的复位,与APB2连接的外设有USART1,SPI1,TIM1,ADC2,ADC1,等等。5) APB1RSTR:APB1外设复位寄存器,进行APB1外设的复位,有DAC,PWR,CAN2,I2C等。6) AHBENR:AHB外设使能寄存器。包括以太网MAC,全速USB OTG时钟使能,SRAM时钟使能,DMA2,DMA1时钟使能等。7) APB2ENR:APB2外设时钟使能寄存器,APB2连接外设的使能,有USART1,SPI1,TIM1,ADC2,ADC1,IOPE(GPIOE),IOPD(GPIOD),IOPC(GPIOC),IOPB(GPIOB),IOPA(GPIOA)等 。8) APB1ENR:APB1外设时钟使能寄存器,APB1连接的外设有DAC,CAN2,CAN1,I2C2,I2C1,UART5,UART4,USART3,USART2,SPI3,SPI2,TIM7-2等。9) 初始阶段我们比较关注的有CR,CFGR,10) BDCR:备份域控制寄存器11) CSR:控制/状态寄存器,对看门狗、软件复位等的状态进行标识。如果要进行时钟设置,就是对上面的寄存器进行操作。有两种方法,一种是直接进行寄存器的赋值,还有一种方法是调用ST公司提供的库函数,用户无需面对寄存器。以与GPIO外设有关的寄存器为例,APB2ENR,它将使能GPIO的时钟。在程序中,如果要使能GPIO时钟,比如使能GPIOA,已知APB2ENR的bit2位是使能GPIOA,那么寄存器直接操作的方法是: APB2ENR|=1APB2ENR |= RCC_APB2Periph; else RCC-APB2ENR &= RCC_APB2Periph; 4.2 与SYSCLK时钟设置有关的函数void SystemInit(void)在3.5版本的库里,上面第节介绍的路径下,有个system_stm32f10x.c文件,在这个文件中,定义了一个函数void SystemInit(void)。这个函数将stm32芯片的时钟源设置成了PLL倍频模式,SYSCLK直接被设置为了72MHz。我们看这个函数的定义:void SystemInit (void) /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ /* Set HSION bit */ RCC-CR |= (uint32_t)0x00000001; /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */#ifndef STM32F10X_CL RCC-CFGR &= (uint32_t)0xF8FF0000;#else RCC-CFGR &= (uint32_t)0xF0FF0000;#endif /* STM32F10X_CL */ /* Reset HSEON, CSSON and PLLON bits */ RCC-CR &= (uint32_t)0xFEF6FFFF; /* Reset HSEBYP bit */ RCC-CR &= (uint32_t)0xFFFBFFFF; /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ RCC-CFGR &= (uint32_t)0xFF80FFFF; SetSysClock();#ifdef VECT_TAB_SRAM SCB-VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */#else SCB-VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */#endif 红色第1行: RCC-CR |= (uint32_t)0x00000001; 设置时钟和复位寄存器,选择内部8MHz高速RC振荡器作为时钟源。 红色第3行: SetSysClock(); 设置系统时钟到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 达标测试人教版八年级上册物理光现象《光的反射》定向攻克试卷(含答案解析)
- 难点解析人教版八年级上册物理声现象《噪声的危害和控制》专项测试试卷(含答案详解版)
- 解析卷-人教版八年级上册物理《声现象》章节练习试卷(解析版含答案)
- 混凝土浇筑过程监控与管理方案
- 锰镍金属催化剂电催化氧化5-羟甲基糠醛及连续流电解工艺优化
- 河北邢家湾镇农村电商人员语言生活调查研究
- 绿化水源配置与节水灌溉方案
- 聚乙烯纳米塑料对生物除磷过程中胞内和胞外聚合物的影响和机制
- J银行供应链金融业务模式优化研究-以S市粮站融资为例
- DB11T 1096-2025 白酒单位产品能源消耗限额
- 内科学-中毒总论
- 测量员岗前培训试题
- GB/T 7562-2018商品煤质量发电煤粉锅炉用煤
- 11466现代企业人力资源管理概论第11章
- T∕IAC CAMRA 20.3-2022 事故汽车维修工时测定及应用规范 第3部分:拆装工时
- DB31T 680.8-2019 城市公共用水定额及其计算方法 第8部分:公共管理和社会组织(机关单位)
- 智能制造 增材制造技术课件
- 中国古代数学中的数学文化课件
- 锚的作用与锚泊解析课件
- FHLG20型高频高压发生器说明书
- 国家自然科学基金资助项目结题报告模板(可编辑版)
评论
0/150
提交评论