一、背景
最近做个项目,需要使用STM32,还是以前一样的观点,时钟就是MCU心脏,供血即时钟频率输出,想要弄明白一个MCU,时钟是一个非常好的切入点。言归正传,网上已经有太多大神详述过STM32的详细配置方法了,在此就简单介绍下STM32时钟系统,以及如何配置做个简单记录,方便以后的快速开发。
二、正文
废话不多说,上一张STM32F10xx的时钟树图:
由图可知,STM32F10XX有两级时钟
第一级时钟
* 高速内部时钟(HSI)
* 锁相环时钟(PLLCLK)
* 高速外部时钟(HSE)
第二级时钟
* 低速内部时钟(LSI)
* 低速外部时钟(LSE)
又由图可知,
* HSE由外部晶振从“OSC_OUT”,“OSC_IN”两脚输入提供。
* LSE由外部晶振从“OSC32_OUT”,“OSC32_IN”两脚输入提供。
* HSI由8MHZ高速内部RC震荡电路提供。
* LSI由40kHZ低速内部RC震荡电路提供。
STM32F10XX还可通过MCO脚向外提供时钟输出。时钟来源有PLLCLK/HSI/HSE/SYSCLK,由MCO选择器来选择。
研究过时钟来源,再来研究时钟的去向,MCU自身要能正常运作,即需要一个时钟,这个时钟既是系统时钟(SYSCLK),而基本上所有外设的时钟均来自于这个系统时钟(SYSCLk)。然后由系统时钟对外提供各种外设时钟。详见图。
当然,也有例外,USB时钟必须为48MHZ,这里的USB时钟(USBCLK)由PLLCLK直接提供,RTC时钟(RTCCLK)也不是来源于系统时钟(SYSCLK),详见图。
时钟结构大体也就如此,不再深究,网上有许多更加深入的讲解,接下来说说如何去配置。用代码来说明问题:
先贴文件“system_stm32f10x.c”,此文件即库文件。里面有一个很重要的函数“SystemInit()”
解析过STM32启动代码的朋友都应该知道,这个函数跑在进入main函数之前,里面做的事情即是配置系统时钟。
关键字:STM32 时钟系统 开发 配置
引用地址:
基于STM32时钟系统的开发及配置
推荐阅读最新更新时间:2024-11-10 11:55
ARM裸机开发bootloader汇编语言
一、汇编语言概述 1、为什么要使用汇编 一般情况下我们不会用到汇编,但有两种情况下,我们要用到汇编。 1、启动代码。编写bootloader和内核时使用,主要是对cpu和内存进行初始化时使用,因为这个时候还没有c语言的环境(堆栈还没有建立),所以不能用c语言。 2、高效率的特殊需求。因为汇编语言的执行效率要高于c语言,所以对某些对效率要求高的程序要用到汇编,可以是汇编与c语言的混合编程。 2、汇编分类 1、ARM标准汇编,适用于windows平台下ARM公司开发的汇编器ADS。 2、GNU汇编,linux平台下GNU交叉编译工具链中的汇编器。它与ARM标准的一点不同是GNU汇编要在段标记符前加点,例如 .text。而AR
[单片机]
QuickLogic发布SensorHubIDE和开发板
· 允许软件、传感器和传感器算法工程师用QuickLogic ArcticLink 3 S1 Sensor Hub自己定制 算法功能。 · 完整的集成开发环境 (IDE) 和开发板通过实时的电路板级别调试 ,使算法开发更快上市。 加利福尼亚州桑尼维尔市 – 2014 年 4 月 7 日 – 超低功耗的可编程客户特定标准产品 (CSSP,Customer Specific Standard Product)的创新者 QuickLogic Corporation(纳斯达克股票代码:QUIK) 今日宣布其 IDE 和开发板现在即将上市,可自定制义其超低功耗传Sensor Hub感器集线器,并实现不间断电的情境感知功能。
[嵌入式]
基于S3C2410的CAN总线通信设计与开发
1 引言 网络化控制系统是控制系统的发展趋势和研究热点,现场总线控制系统作为网络化系统的重要组成部分,近年来在实际的控制系统中得到了广泛的应用。CAN(Con- troller Area Network)总线作为一种容错性强、可靠性高、布线简单且成本低廉的现场总线倍受用户钦睐,在国内CAN总线已经得到了广泛应用。目前国内广泛应用的独立CAN控制器SJA1000因存在如地址、数据总线的分时复用常导致接口效率低下;接收、发送缓冲区的个数太少,导致数据吞吐率不高;帧屏蔽和过滤器的设置不够灵活,不能满足同时需要更多屏蔽和过滤条件的要求等。 ARM芯片S3C2410是一种高集成度,高性价比的嵌入式处理芯片,已成功用于工控设备
[单片机]
单片机开发工程师需要学哪些,单片机工作的基本条件
记得刚毕业的时候,同学们都很迷茫,不知道自己以后要做什么工作。 有部分同学向社会低头,做了本专业,每天累死累活干的像条狗,10年过去了每天也才拿着上万块出头的工资。 也有一部分人选择为自己而活,去做自己喜欢的工作,我就是其中的一员。 临近毕业那年,几个朋友经常会在一起玩,也聊到了未来方向的话题。 他们问我找什么工作,我说准备去做单片机开发。 他们很惊讶地问:单片机?是什么东西? 人对一个事物很感兴趣的时候就容易把它神话,我把c语言和寄存器先跟他们乱扯一通,再说能做什么牛逼的智能产品。 其实当时自己都没底,也不知道这个该找什么工作,需要掌握哪些技能。 我的技术和认知水平完全只是在51开发板的基础上。 如今,从事单片机开发十年,我对单
[单片机]
开发工具之IAR新建STM8工程
熟能生巧,按照规则多创建几次! 说在前面的话:一直以来想使用IAR开发个项目,这次机会来了,公司要做个测试工装,选的MCU是意法半导体的STM8S105系列芯片 第一个想法就是放弃用烂的KEIL,尝试使用IAR开发这个项目 开发环境:Windows 7 专业版、IAR EW for STM8 3.11.1 准备工作:下载安装EWSTM8,在我另一个随笔已经详细写了 下载STM8S标准外设库 https://pan.baidu.com/s/1uVVyOgmWc7D2dQR0nShUDQ 提取码: vaqr 文件夹准备:建立项目驱动文件夹,名称为项目名“01 Drv”,建立项目应用文件夹“02 App”;
[单片机]
stm32和同类单片机用ADC采集多通道信号量
在此之前,使用stm32的ADC采集信号,使用到的通道就只有一个,用的时候也是别人写好的代码,没去研究,然而最近用GD32F350单片机作一个电源板时,要采集6个通道的信号,所以就仔细看了手册,有规则通道和注入通道两个概念,按概念,规则通道是按顺序采集,注入通道可以最多设备四个,有独立的保存采集数据的寄存器。如果超过4个就不能没每个每个通道对应一个数据寄存器;如果是规则通道,当通道数大于一时是可以先设置采集通道再读数据,但是我想要的是像手册上说大的一次就把6个通道的数据采集出来,但是规则通道只有一个数据寄存器,如何知道每一次采集的数据是对应哪一个通道呢?最后问了一个做电源有经验的人,他说使用DMA,设置数据长度为6个,然后每个通道
[单片机]
魅族15系列硬件配置曝光 骁龙660与猎户座8895齐上阵
集微网消息,随着魅族15系列发布日期的临近,关于它的产品信息得到了进一步的披露,昨天国内知名跑分软件安兔兔放出了魅族15 Plus的性能测试成绩,跑分高达19万,创魅族手机历史新高,确认搭载三星去年的旗舰芯片猎户座8895,辅以6+64GB的存储,分辨率为2560x1440,预装安卓7.0的操作系统。 另外一个跑分软件Geekbench4也不甘示弱,放出了魅族15的跑分成绩,单核1624分,多核5850分,内置4GB存储,预装安卓7.1的操作系统,虽然确认搭载的是高通的处理器,不过具体型号没有显示出来。 它的数据与vivo X21、小米Note3、OPPO R15梦境版等主流高通骁龙660机型基本一致。该处理器功耗与性能权
[手机便携]
STM32如何确定执行哪个中断函数
如下面所示: NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //NRF24L01 中断响应 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级为1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能 NVIC_Init(&NVIC_InitStructure); 则对应的中断函数就是 STM3210x_
[单片机]