专题三stm32时钟树及相关库函数

上传人:第*** 文档编号:32820172 上传时间:2018-02-12 格式:DOCX 页数:8 大小:89.74KB
返回 下载 相关 举报
专题三stm32时钟树及相关库函数_第1页
第1页 / 共8页
专题三stm32时钟树及相关库函数_第2页
第2页 / 共8页
专题三stm32时钟树及相关库函数_第3页
第3页 / 共8页
专题三stm32时钟树及相关库函数_第4页
第4页 / 共8页
专题三stm32时钟树及相关库函数_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《专题三stm32时钟树及相关库函数》由会员分享,可在线阅读,更多相关《专题三stm32时钟树及相关库函数(8页珍藏版)》请在金锄头文库上搜索。

1、专题三 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、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

3、 和 BOOT1,这两个引脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。表 1. STM32xx 系列处理器的启动模式启动模式的引脚BOOT1 BOOT0启动模式 功能说明X 0 用户闪存存储器 将用户闪存存储器选为系统启动区域0 1 系统存储器 将系统存储器选为系统启动区域1 1 片上 SRAM 将片上 SRAM 选为系统启动区域第 1 种启动方式是最常用的用户 FLASH 启动,正常工作就在这种模式下,STM32 的 FLASH 可以擦除 10 万次。第 2 种方式是系统存储器启动方式,即我们常说的串口下载方式(ISP) 。STM32 中自带的 BootLoader 就是

4、在这种启动方式中,如果出现程序硬件错误的话,可以切换到该模式下重新烧写 Flash 即可恢复正常。第 3 种启动方式是 STM32 内嵌的 SRAM 启动,该模式用于调试。上述三种模式,各有作用。如果要进行程序下载,就必须将启动模式调整到第二种方式,程序下载完毕后,再回复到第一种方式,就可以正常工作了。2.2 STM32 的启动文件启动文件:建立工程文件时,keil MDK 会提示“复制启动文件 STM32F10x.s到项目文件夹下” 。但是 MDK 提示的这个启动文件只定义了 3 个串口,4 个定时器,具体到某个型号,每种 STM32 芯片都不一样。比如有的芯片器件是有 5个串口,6 个定时

5、器的,如果用 MDK 提供的启动文件,就有 2 个串口,2 个定时器找不到定义导致不能使用。在 3.5 版本的固件库下,有加了后缀的启动文件:Startup_stm32f10x_ld.sStartup_stm32f10x_md.sStartup_stm32f10x_hd.s上面,有后缀 ld,md,hd ,这三个后缀是什么意思呢?原来是这样的:ld Low-density 小容量 16-32K md Medium-density 中容量 64-128Khd High-density 大容量 256-512Kxl 超大容量 512-1024Kvl value line devices 超值型 c

6、l Connectivity line devices 互联型 小容量:flashAPB2ENR |= RCC_APB2Periph;elseRCC-APB2ENR 4.2 与 SYSCLK 时钟设置有关的函数 void SystemInit(void)在 3.5 版本的库里,上面第节介绍的路径下,有个 system_stm32f10x.c 文件,在这个文件中,定义了一个函数 void SystemInit(void)。这个函数将 stm32 芯片的时钟源设置成了 PLL 倍频模式,SYSCLK 直接被设置为了 72MHz。我们看这个函数的定义:void SystemInit (void)/*

7、 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_CLRCC-CFGR #elseRCC-CFGR #endif /* STM32F10X_CL */ /* Reset HSEON, CSSON and PLLON bits */RCC-C

8、R /* Reset HSEBYP bit */RCC-CR /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */RCC-CFGR SetSysClock();#ifdef VECT_TAB_SRAMSCB-VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */#elseSCB-VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in In

9、ternal FLASH. */#endif 红色第 1 行: RCC-CR |= (uint32_t)0x00000001; 设置时钟和复位寄存器,选择内部 8MHz 高速 RC 振荡器作为时钟源。 红色第 3 行: SetSysClock(); 设置系统时钟到 72MHz. 也就是 SYSCLK 是72MHz。 红色第 2 行: RCC-CFGR CFGR 的 7:4 是 0,AHB不分频。在上述设置下,SYSCLK 是 72MHz。在 2.2 节启动文件中,我们讲到,如果用 3.5 版固件库中的 Startup_stm32f10x_md.s,那么该文件已经调用了SystemInit()函数,让 SYSCLK 设置成 72MHz,因此 main()函数中就不用再调用它进行时钟设置了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号