stm32专题五:时钟树(一)寄存器

发布者:吾道明亮最新更新时间:2021-10-19 来源: eefocus关键字:stm32  时钟树  寄存器 手机看文章 扫描二维码
随时随地手机看文章

详细介绍stm32系统时钟配置:

1 时钟来源:外部高速晶振HSE和内部RC振荡器HSI。通过RCC_CR(时钟控制寄存器来配置)。

       HSEON为1时,打开外部时钟;当位HSERDY为1时,表示HSE已经准备就绪。同理,HSION和HSIRDY配置内部时钟。当HSE故障时,系统时钟自动切到HSI,直到HSE启动成功。注意:由于HSI不太精确,系统启动时会自动校准,HSICAL[7:0]这些位被自动初始化,HSITRIM[4:0]用于内部时钟HSI的调整,由软件写入,这些位会叠加到HSICAL[5:0]的数值上。


       问题:具体怎么调整?HSITRIM[4:0]的默认初始值为16,即10000。中文参考手册中说到,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz。我的理解是,当我+1时,此时HSITRIM[4:0]为10001,HSI应该会从8MHz+40kHz = 8.04MHz,也可能时8MHz-40kHz = 7.96MHz。当需要调整时,可以根据默认值10000和步长来计算需要写入的数值。


       2 锁相环PLL时钟源:

       PLLSRC有两个来源:HSI 分频(4M RC时钟),或来自HSE(其中通过配置)RCC_CFGR的位17 PLLXTPRE来设置不分频(8MHz)或2分频(4MHz)。


      3 系统时钟SYSCLK来源:


      来源一:HSI。来源二:锁相环输出时钟PLLCLK(又有两个来源,一个是HSI 2分频时钟经过PLLMUL倍频,由于HSI/2=4M,而倍频因子PLLMUL最大为16,因此使用HSI时钟时最大为64M;另一个来源是HSE时钟,此时系统推荐为9倍频,但为了好玩,可以设置为16倍频,超频到128M,倍频因子由RCC_CFGR(时钟控制寄存器)的PLLMUL[3:0]位来设置);来源三,HSE。选择哪个来源由SW[1:0]来配置。


      4 AHB总线时钟:

      需要注意的是,整个圈起来的红色区域都是AHB总线,在上面挂载了很多的设备。在AHB总线的基础上,还有两个预分频器APB1和APB2(2 > 1,所以APB2是高速总线),这两条总线上挂载了很多的外设。这三条总线的分频因子由RCC_CFGR的PPRE2[2:0] 、PPRE1[2:0]、HPRE[3:0]这三个位段来配置。注意,系统时钟systick经过8分频,所以为9MHz。PLCK1为APB1总线时钟,为36MHz。APB2总线给ADC提供时钟,而ADCCLK最大为14M,则分频因子通常配置为6分频,16M。


      5 RTC时钟:


      RTC实时时钟有三个来源:HSE/128分频,LSE(外部低速时钟32.768kHz晶振),LSI(通常取值40kHz,通常在30~60kHz之间偏移)。


      6 独立看门狗时钟:


      由内部LSI提供。


      7 MCO时钟输出:


      由PA8引脚复用所得,有四个来源,可以作为系统时钟测量。四个来源分别为:PLLCLK/2、HSE、HSI、SYSCLK。


关键字:stm32  时钟树  寄存器 引用地址:stm32专题五:时钟树(一)寄存器

上一篇:stm32专题四:启动文件分析
下一篇:stm32专题五:时钟树(三)自定义配置HSE时钟 超频

推荐阅读最新更新时间:2024-11-13 14:26

stm32驱动NOR Flash 之MX25L51245G(64MB)
MX25L51245G 支持SPI的MODE0/MODE3,一般都选择mode3 #define FLASH_SECTOR_SIZE (4*1024) #define FLASH_PAGE_SIZE 256 引脚定义 /* * SPI1 * @SCK : PA5 * @MISO : PA6 * @MOSI : PA7 * * @CS : PA0 */ 读写接口 static u8 SPI_Write(u8 byte) { u32 timeout = 0xFFFF; while(!(SPI1- SR & SPI_I2S_FLAG_TXE)) { if(--timeout == 0) { printf(
[单片机]
STM32学习笔记之__attribute__ ((at())绝对定位分析
学习STM32也会遇到这样的绝对定位的问题如下: uint8_t UART_RX_BUF __attribute__ ((at(0X20001000))); //就是将串口接收的数据定位到RAM中起始地址为0X20001000; 绝对定位要么定位到flash、要么定位到RAM,这里我们将定位在flash进行说明。 MDK如何实现将数据存储到FLASH指定地址? 我们在烧录数据的时候,一般是从0x08000000开始按照顺序烧录到flash里面的,如何让数据能够定义到绝对地址如0800F000,就必须保证文件内数据也是存储在该地址,为了实现这个目的,MDK在生成文件时会填充0x00字段,从而确保能够将数据定义到
[单片机]
STM32 定时器输出比较非主动模式
STM32的定时器可以工作在输出比较非主动模式TIM_OCMode_Inactive,这个模式下,当定时器的计数值达到比较值时就会强制将引脚电平拉低。但是由于定时器通道对应的引脚配置成GPIO_Mode_AF_PP时,它默认的电平时低电平,如果这时候工作在输出比较非主动模式,即时强制拉低,这样的话引脚一直是低电平,完全没有现象。由于水平所限,我也不知道该如何使用定时器输出比较非主动模式才能体现它的 非主动 这个特性。我下面要讲的例子虽然用的是定时器输出比较非主动模式来输出PWM波,但是完全体现不出这个特格特点来。还请见谅! 下面就讲讲定时器在输出比较非主动模式下如何生成PWM波的。还是基于我自己的规范工程! 1、工程的修改 1
[单片机]
<font color='red'>STM32</font> 定时器输出比较非主动模式
014_STM32程序移植之_L298N电机驱动模块
更改注意: STM32程序移植之L298N电机驱动模块 引脚连接图 STM32引脚 L298N引脚 功能 PA6 ENA 马达A的PWM PA7 ENB 马达B的PWM PA2 IN1 控制马达A PA3 IN2 控制马达A PA4 IN3 控制马达B PA5 IN4 控制马达B 注意 电源输入12V L298N的资料在这里 程序移植,刚才已经移植成功了,上面的是资料 注意,控制PWM 控制方向 在第二点的资料中只有IN1和IN2是因为原理是一样的,L298N总共有两个输出,所有有两个PWM输入还有IN1到IN
[单片机]
014_STM32程序移植之_L298N电机驱动模块
STM32笔记之七:让它跑起来,基本硬件功能的建立
0、 实验之前的准备 a) 接通串口转接器 b) 下载IO与串口的原厂程序,编译通过保证调试所需硬件正常。 1、 flash,lib,nvic,rcc和GPIO,基础程序库编写 a) 这几个库函数中有一些函数是关于芯片的初始化的,每个程序中必用。为保障程序品质,初学阶段要求严格遵守官方习惯。注意,官方程序库例程中有个platform_config.h文件,是专门用来指定同类外设中第几号外设被使用,就是说在main.c里面所有外设序号用x代替,比如USARTx,程序会到这个头文件中去查找到底是用那些外设,初学的时候参考例程别被这个所迷惑住。 b)
[单片机]
STM32 中 CAN进入错误回调函数后无法接收问题(HAL库)
CPU进入错误回调函数后 ,无法接收新的数据包 void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) 经检查,如果CPU在进入错误回调函数之前,我们调用 HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0); 一般来说,我们会认为CPU一直处于可以接收新的can包的状态,但是只要CPU进入错误回调函数之后,就无法接收新的数据包,进debug 单步运行后 得到问题的原因 void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) { ...................................
[单片机]
STM32固件库实现led亮灭闪烁和音频发生器设计
概述 本文使用STM32F10X,软件为Keil uVision5,仿真软件Proteus 8 Professional 电路图 实现代码 学习笔记 8个led 电路图 8个led亮灭实现代码 实现代码 //8¸öledÈ«ÁÁÈ«Ãð #include stm32f10x.h int main() { GPIO_InitTypeDef star; //配置开启GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //设置GPIO输出模式 //stm32F1提供了4种输出模式(推挽输出、开漏输出 、复用推挽输出 、复用开漏输出)和3
[单片机]
<font color='red'>STM32</font>固件库实现led亮灭闪烁和音频发生器设计
STM32之Hex文件格式解析
Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。Hex文件可以按照如下的方式进行拆分来分析其中的内容:   例如:   :020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA   第一个 0x02 为数据长度。   紧跟着后面的0x00 0x00 为地址。   再后面的0x04为数据类型,类型共分以下几类:   '00' Data Record   '01' End of File Record   '02' Extended Seg
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved