STM32F103CDE时钟树
stm32单片机时钟
stm32单⽚机时钟stm32 单⽚机时钟学习以及分析1 引⾔:单⽚机(Microcontrollers),采⽤超⼤规模集成电路技术把具有数据处理能⼒的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O⼝和中断系统、定时器/计数器等功能(可能还包括显⽰驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到⼀块硅⽚上构成的⼀个⼩⽽完善的微型计算机系统,在⼯业控制领域⼴泛应⽤。
单⽚机时钟可以说如同⼈的⼼脏那样重要,我们在⼼脏的搏动下进⾏⾃⼰的⽣命活动,同样的单⽚机在时钟下进⾏⾃⼰的控制活动。
2 时钟的分类:单⽚机的时钟分为内部时钟与外部时钟:⼀般⽽⾔,内部时钟集成在芯⽚内部(RC振荡电路),其精度⽐较低;外部时钟,顾名思义,存在于芯⽚外部(晶体或陶瓷谐振器),可以为系统提供精确的时钟。
晶振是给单⽚机提供⼯作信号脉冲的,如图所⽰的为外部晶振,频率为4MHz,我们常⽤的晶振频率为12MHz,单⽚机⼯作时,是⼀条⼀条地从RoM中取指令,然后⼀步⼀步地执⾏。
单⽚机访问⼀次存储器的时间,称之为⼀个机器周期,这是⼀个时间基准。
—个机器周期包括12个时钟周期。
如果⼀个单⽚机选择了12MHz晶振,它的时钟周期是1/12us,它的⼀个机器周期是12×(1/12)us,也就是1us。
有些晶振的频率并数是整数,如:11.0592MHz的晶振。
单⽚机在进⾏串⾏通信时,常⽤的波特率为1200,2400,4800,9600,115200等,为了适应单⽚机的串⼝通讯波特率的计算⽽来的。
⽤11.0592MHz晶振经过相应的分频或者倍频后刚好能够得出⼀个整数的波特率,这样在上位机和下位机的同步⽅⾯⽐较⽅便。
3 stm32的时钟来源这⾥以stm32f1系列的芯⽚为例。
由上⾯可知,系统的时钟来源有内部时钟与外部时钟,详细的来说stm32f1有五个时钟源:HSI(⾼速内部时钟)HSE(⾼速外部时钟)LSI(低速内部时钟)LSE(低速外部时钟)PLL(锁相环倍频输出)每⼀个时钟都可以独⽴的开启与关闭。
STM32F103的复位及时钟控制模块头文件
STM32F103的复位及时钟控制模块头文件在处理器正常工作前,肯定要做一些初始化工作,其中最主要的一个就是初始化各种时钟。
通过对STM32F103的复位及时钟控制(RCC)模块分析之后,自己写了一个RCC的头文件,这样使用起来更方便。
头文件中首先定义了最基本的几个寄存器,然后再对每个寄存器中的域使用结构体做了定义,可以直接使用寄存器中的位来操作。
注意设置系统时钟时要先设置好FLASH的等待周期,不然程序就可能会跑飞。
该测试工程是在以前的GPIO实验的基础上增加系统时钟初始化代码,设置系统时钟为72M。
通过流水灯可以看到,比未配置系统时钟之前(8M)流水灯的速度快了很多。
从这里下载完整的测试工程:系统时钟初始化的代码如下://以下时钟配置为最高性能void SystemClockInit(void){//设置flash等待周期为2,否则设置为72M系统时钟时就会跑飞FLASH_ACR=0x32;pbRCC_CR->HSEON=1; //使能外部高速时钟while(!(pbRCC_CR->HSERDY)); //等待外部高速时钟稳定pbRCC_CFGR->MCO=0; //MCO无时钟输出pbRCC_CFGR->USBPRE=1; //USB时钟1.5分频pbRCC_CFGR->PLLMUL=9-2; //PLL倍频设置为9倍(外部时钟8M,PLL输出72M)pbRCC_CFGR->PLLXTPRE=0; //HSE不分频pbRCC_CFGR->PLLSRC=1; //HSE选作做为PLL时钟源输入pbRCC_CFGR->ADCPRE=0; //ADC时钟2分频pbRCC_CFGR->PPRE2=1+6; //APB2设置为1分频pbRCC_CFGR->PPRE1=2+6; //APB1设置为2分频pbRCC_CFGR->HPRE=0; //AHB无分频pbRCC_CR->PLLON=1; //启动PLLwhile(!(pbRCC_CR->PLLRDY)); //等待PLL稳定pbRCC_CFGR->SW=2; //选择PLL输出为时钟源//pbRCC_AHBENR->SRAMEN=1;//pbRCC_AHBENR->FLITFEN=1;//IO口第二功能时钟使能pbRCC_APB2ENR->AFIOEN=1;//各通用IO口时钟使能pbRCC_APB2ENR->IOPAEN=1;pbRCC_APB2ENR->IOPBEN=1;pbRCC_APB2ENR->IOPCEN=1;pbRCC_APB2ENR->IOPDEN=1;pbRCC_APB2ENR->IOPEEN=1;//ADC时钟使能pbRCC_APB2ENR->ADC1EN=1;pbRCC_APB2ENR->ADC2EN=1;//定时器1时钟使能//SPI1时钟使能pbRCC_APB2ENR->SPI1EN=1;//串口1时钟使能pbRCC_APB2ENR->USART1EN=1;//定时器2、3、4时钟使能pbRCC_APB1ENR->TIM2EN=1; pbRCC_APB1ENR->TIM3EN=1; pbRCC_APB1ENR->TIM4EN=1;//窗口看门狗时钟不使能pbRCC_APB1ENR->WWDGEN=0;//SPI2时钟使能pbRCC_APB1ENR->SPI2EN=1;//串口2、3时钟使能pbRCC_APB1ENR->USART2EN=1; pbRCC_APB1ENR->USART3EN=1;//I2C1、2时钟使能pbRCC_APB1ENR->I2C2EN=1;//USB时钟使能pbRCC_APB1ENR->USBEN=1;//CAN时钟使能pbRCC_APB1ENR->CANEN=1;//备份接口时钟使能pbRCC_APB1ENR->BKPEN=1;//电源接口时钟使能pbRCC_APB1ENR->PWREN=1;//外部低速时钟启动pbRCC_BDCR->LSEON=1;pbRCC_BDCR->LSEBYP=0;pbRCC_BDCR->RTCSEL=1; //选择外部时钟为RTC时钟}STM32/STM8意法半导体/ST/STM。
STM32时钟树
STM32F10xx 时钟树STM32有五个时钟源,HSI RC,HSE OSC,LSI RC,LSE OSC,PLL。
实际是四个,PLL 是由锁相环电路倍频得到的。
HSI 高速内部时钟,8MHzHSE高速外部时钟,频率为4MHz~16MHzLSI 低速内部时钟,40kHzLSE低速外部时钟,32.768kHzPLL的时钟源为两个高速时钟,可选HSI/2,HSE,HSE/2,最大为72MHzOSC 为晶振,振荡器(Oscillator)引脚ˈɒsɪleɪtə(r),STM32F10xx系列处理器有两个外部时钟源,分别接OSC和OSC32引脚,前者为高速,后者为低速。
内置RC振荡器可以被关闭。
STM32有一个时钟监视系统CSS,一旦HSE失效则会自动切换至SYSTICK = HSI。
介绍完时钟源,下面介绍一下STM32每个模块分别对应哪个时钟源。
低速的:1.独立看门狗的时钟源为低速内部时钟LSI ,40kHz2.RTC时钟的时钟源可以有三个,分别为LSI,LSE或者HSE的128分频,通过RTCSEL[1:0]来选择,其中RTCSEL为RCC_CSR寄存器其中的两位。
高速的:1.全速功能的USB模块,其串行接口引擎需要一个频率为48MHz,该时钟源只能从PLL 输出端获得,可以选择1分频或者1.5分频,也就是说,当使用了USB模块,PLL必须使能,而且时钟频率需配置为48MHz或者72MHz.2.系统时钟SYSCLK,是供STM32中绝大部分部件工作的时钟源,系统时钟可选择,PLL 输出,HSI或者HSE输出,全是高速的,系统时钟最大频率为72MHz。
系统时钟并不是直接提供给各模块使用,它需要通过AHB分频器分频给各个模块使用。
AHB的分频因子有9种,1,2,4,8,16,64,128,256,512。
AHB是Advanced High performance Bus,即高级高性能总线,这是一种系统总线,主要用于高性能模块如CPU,DMA,DSP等之间的连接,AHB系统由主模块,从模块和基础结构三部分组成,整个AHB总线上的传输都是由主模块发出,从模块负责回应。
stm32时钟树分析
void RCC_Configuration(void){/* RCC system reset(for debug purpose) */ RCC_DeInit();/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON);/* Wait till HSE is ready */HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1);/* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* Enable PLL */RCC_PLLCmd(ENABLE);/* Wait till PLL is ready */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */while(RCC_GetSYSCLKSource() != 0x08){}}}systemclock共有三个来源,上面代码最后RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);应该是选择PLLCLK为时钟源void RCC_Configuration(void){/* RCC system reset(for debug purpose) */RCC_DeInit();/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON); ------------SHE外部晶振起震(8M)/* Wait till HSE is ready */HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS) --------------起震成功配置,flash取指令设置{/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1); --------------AHB总线不分频/* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1); --------------APB2总线不分频/* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2); --------------APB1总线二分频/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); -----PLLCLK =8MHz * 9 = 72 MHz/* Enable PLL */RCC_PLLCmd(ENABLE); --------------- PLL 使能/* Wait till PLL is ready */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); -------选择PLLCLK为系统时钟systemclk/* Wait till PLL is used as system clock source */while(RCC_GetSYSCLKSource() != 0x08){}}}从这里可以看到最后AHB时钟为72M(最大也是72M);APB2时钟72M(最大也是72M);APB1时钟36M(最大也是36M);所以可以得到APB2预分频系数为1;APB1预分频系数为2。
STM32时钟树
STM32时钟树STM32的时钟系统相较于51单⽚机,stm32的时钟系统可以说是⾮常复杂了,我们现在看下⾯的⼀张图:上图说明了时钟的⾛向,是从左⾄右的从时钟源⼀步步的分配给外设时钟。
需要注意的是,上图左侧⼀共有四个时钟源,从上到下依次是:⾼速内部时钟(HSI):以内部RC振荡器产⽣,频率为8Mhz,但相较于外部时钟不稳定。
⾼速内部时钟(HSE):以外部晶振作为时钟源,晶振频率可取范围为4~16Mhz,⼀般采⽤8Mhz的晶振。
低速外部时钟(LSE): 以外部晶振作为时钟源,主要是提供给实时时钟模块,所以⼀般选⽤32.768khz,该频率下定时器⽅便取整。
低速内部时钟(LSI): 从内部RC振荡器产⽣,频率为40khz,也是主要提供给实时时钟模块。
根据上图,以我们最常⽤的⾼速外部时钟为例,沿着路线⼀步步的分析:1. 从最左端的OSC_OUT和OSC_IN开始,这两个引脚分别连接到外部晶振的两端。
2. 我们假设连接的晶振为8Mhz,它遇到了第⼀个分频器PLLXTPRE。
在这个分频器中,可以选择设置⼆分频,或者不分频。
这⾥我们选择不分频。
3. 然后箭头指向了开关PLLSRC,这个开关可以选择HSE或者HSI作为其时钟输出。
这⾥我们选择HSE,紧接着⼜遇到锁相环PLL,也叫倍频器。
我们可以设定2到16的倍频因⼦(PLLMUL),经过PLL的时钟称为PLLCLK。
在这⾥设置倍频因⼦为9,也就是说乘以9,PLLCLK为72Mhz。
4. 然后⼜遇到⼀个开关SW,经过这个开关之后就是STM32的系统时钟(SYSCLK)了。
通过这个开关,可以切换SYSCLK的时钟源,有HSI,PLLCLK,HSE三个选择。
我们选择PLLCLK时钟,所以SYSCLK就为72Mhz了。
5. PLLCLK在输⼊到SW前,还流向了USB预分频器,所以这个PLLCLK也作为USB的时钟。
6. 再继续看SYSCLK,SYSCLK经过AHB预分频器,分频后再输⼊到其他外设。
图文详解stm32时钟树
对于广大初次接触STM32的读者朋友(甚至是初次接触ARM器件的读者朋友)来说,在熟悉了开发环境的使用之后,往往“栽倒”在同一个问题上。
这问题有个关键字叫:时钟树。
众所周知,微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩散流动的路径,犹如大树的养分通过主干流向各个分支,因此常称之为“时钟树”。
在一些传统的低端8位单片机诸如51,AVR,PIC等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,亦即在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于正常工作的状态)。
比如51单片机使用典型的12MHz晶振作为时钟源,则外设如IO口、定时器、串口等设备的驱动时钟速率便已经是固定的,用户无法将此时钟速率更改,除非更换晶振。
而STM32微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的关系,本文将来详细解析STM32微控制器的时钟树。
图1是STM32微控制器的时钟树,表1是图中各个标号所表示的部件。
标号图1标号释义1内部低速振荡器(LSI,40Khz)2外部低速振荡器(LSE,32.768Khz)3外部高速振荡器(HSE,3-25MHz)4内部高速振荡器(HIS,8MHz)5PLL输入选择位6RTC时钟选择位7PLL1分频数寄存器8PLL1倍频寄存器9系统时钟选择位10USB分频寄存器11AHB分频寄存器12APB1分频寄存器13AHB总线14APB1外设总线15APB2分频寄存器16APB2外设总线17ADC预分频寄存器18ADC外设19PLL2分频数寄存器20PLL2倍频寄存器21PLL时钟源选择寄存器22独立看门狗设备23RTC设备图1STM32的时钟树在认识这颗时钟树之前,首先要明确“主干”和最终的“分支”。
假设使用外部8MHz 晶振作为STM32的时钟输入源(这也是最常见的一种做法),则这个8MHz便是“主干”,而“分支”很显然是最终的外部设备比如通用输入输出设备(GPIO)。
STM32F4时钟树外设挂靠总线学习小结
STM32F4时钟树学习小结时钟是单片机的心脏,重要性不言而喻,STM32F4的时钟树是比较复杂的。
时钟树图一时钟树图二1:STMF4xx系统共计有三个主要时钟源(HSI、HSE和PLL)和两个次要时钟源(LSE、LSI)。
2:SYSCLK可以来自HSI、HSE和PLL,多数采用PLL频率最高能达到168MHz。
3:RTC时钟可以来自LSE、LSI和HSE,但只有用LSE时,才能保证系统电源掉电时RTC仍能正常工作。
4:可通过多个预分频器配置AHB 频率、高速APB (APB2) 和低速APB (APB1)。
AHB 域的最大频率为168 MHz。
高速APB2 域的最大允许频率为84 MHz。
低速APB1 域的最大允许频率为42 MHz。
5:STM32F405xx/07xx 和STM32F415xx/17xx 的定时器时钟频率由硬件自动设置。
如果APB 预分频器为1,定时器时钟频率等于APB 域的频率。
否则,等于APB 域的频率的两倍(×2)。
6:除以下时钟外,所有外设时钟均由系统时钟(SYSCLK) 提供:●来自于特定PLL 输出(PLL48CLK) 的USB OTG FS 时钟(48 MHz)、基于模拟技术的随机数发生器(RNG) 时钟(<=48 MHz) 和SDIO 时钟(<= 48 MHz)。
●I2S 时钟●由外部PHY 提供的USB OTG HS (60 MHz) 时钟●由外部PHY 提供的以太网MAC 时钟(TX、RX 和RMII)。
下面介绍挂在不同总线上的设备情况1、挂在AHB1总线的外设有:最高时钟频率:168MHZ1)GPIOA~K2)RCC_AHB1Periph_CRC3)FLITF4)SRAM15)SRAM26)BKPSRAM7)SRAM38)CCMDATARAMEN9)DMA110)DMA211)DMA2D12)ETH_MAC、ETH_MAC_Tx、ETH_MAC_Rx、ETH_MAC_PTP13)OTG_HS、OTG_HS_ULPI2、挂在AHB2总线的外设有:最高时钟频率:168MHZ1)DCMI2)CRYP3)HASH4)RNG5)OTG_FS3、挂在APB1_Peripherals 有:最高时钟频率:42MHZ1)TIM2~142)WWDG3)SPI2~34)USART2~35)UART4~5,7~86)I2C1~37)CAN1~28)PWR9)DAC4、挂在APB2_Peripherals 有:最高时钟频率:84MHZ1)TIM1,8~112)USART1,63)ADC4)ADC1~35)SDIO,1,4,5,66)SYSCFG7)SAI18)LTDC。
stm32f103中文手册[7]
stm32f103中文手册1. 概述stm32f103是一款高性能、低功耗、高集成度的32位微控制器,基于ARM Cortex-M3内核,支持Thumb-2指令集,具有72MHz的主频和64KB至512KB的闪存。
stm32f103具有丰富的外设资源,包括多种通信接口、定时器、模数转换器、DMA控制器、触摸感应控制器等,能够满足各种复杂的应用需求。
stm32f103还具有多种低功耗模式,能够实现动态电源管理,降低系统功耗。
stm32f1 03采用多种封装形式,适用于不同的应用场合。
2. 引脚定义stm32f103的引脚定义如图1所示。
stm32f103的引脚分为四类:电源引脚、复位引脚、晶振引脚和功能引脚。
电源引脚包括VDD、VSS、V DDA和VSSA,分别提供数字电源、数字地、模拟电源和模拟地。
复位引脚包括NRST和BOOT0,分别用于复位芯片和选择启动模式。
晶振引脚包括OSC_IN和OSC_OUT,分别连接外部晶振的输入和输出端。
功能引脚包括多达80个可编程的通用输入输出(GPIO)引脚,以及一些专用功能引脚,如JTAG/SWD调试接口、USB接口等。
![图1 stm32f103引脚定义](^4^)图1 stm32f103引脚定义3. 系统架构ARM Cortex-M3内核:是stm32f103的核心部分,负责执行程序指令,处理数据和中断等。
存储器:包括闪存(Flash)、静态随机存储器(SRAM)和备份寄存器(Backupregisters),分别用于存储程序代码、数据和备份数据等。
外设总线:包括总线矩阵(Bus matrix)、总线桥(Bus bridge)和外设总线(Peripheralbus),分别用于连接内核、存储器和外设等。
时钟和复位控制:包括时钟树(Clocktree)、复位控制器(Reset controller)和电源管理单元(Power managementunit),分别用于提供时钟信号、复位信号和电源管理等。
mpu6050中文数据手册 STM32F103CDE_DS_中文数据手册_V5
mpu6050中文数据手册STM32F103CDE_DS_中文数据手册_V5导读:就爱阅读网友为您分享以下“STM32F103CDE_DS_中文数据手册_V5”的资讯,希望对您有所帮助,感谢您对92to 的支持!STM32F103xC, STM32F103xD, STM32F103xE数据手册55.1电气特性测试条件除非特别说明,所有电压的都以VSS为基准。
5.1.1 最小和最大数值除非特别说明,在生产线上通过对100%的产品在环境温度TA=25°C和TA=TAmax下执行的测试(TAmax与选定的温度范围匹配),所有最小和最大值将在最坏的环境温度、供电电压和时钟频率条件下得到保证。
在每个表格下方的注解中说明为通过综合评估、设计模拟和/或工艺特性得到的数据,不会在生产线上进行测试;在综合评估的基础上,最小和最大数值是通过样本测试后,取其平均值再加减三倍的标准分布(平均±3∑)得到。
5.1.2 典型数值除非特别说明,典型数据是基于TA=25°C和VDD=3.3V(2V ≤ VDD ≤ 3.3V电压范围)。
这些数据仅用于设计指导而未经测试。
典型的ADC精度数值是通过对一个标准的批次采样,在所有温度范围下测试得到,95%产品的误差小于等于给出的数值(平均±2∑)。
5.1.3 典型曲线除非特别说明,典型曲线仅用于设计指导而未经测试。
5.1.4 负载电容测量引脚参数时的负载条件示于图10中。
图10引脚的负载条件5.1.5 引脚输入电压引脚上输入电压的测量方式示于图11中。
图11引脚输入电压参照2009年3月STM32F103xCDE数据手册英文第5版(本译文仅供参考,如有翻译错误,请以英文原稿为准)29/87STM32F103xC, STM32F103xD, STM32F103xE数据手册5.1.6 供电方案图12供电方案注:上图中的4.7μF电容必须连接到VDD3。
stm32f103c的基本结构
stm32f103c的基本结构Stm32f103c的基本结构Stm32f103c是一款由意法半导体(STMicroelectronics)推出的32位单片机,它是基于ARM Cortex-M3内核的。
该芯片具有出色的处理性能和丰富的外设功能,适用于各种应用领域,包括工业自动化、消费电子、医疗设备等。
在本文中,我们将逐步介绍Stm32f103c的基本结构。
第一部分:介绍Stm32f103cStm32f103c采用了ARM Cortex-M3内核,该内核是基于Thumb-2指令集的低功耗、高性能处理器。
它具有72MHz的主频,集成了多达64KB 的闪存和20KB的SRAM。
此外,Stm32f103c还配备了多个外设,如通用串行总线(USART)、SPI接口、I2C接口以及模数转换器(ADC)等。
第二部分:核心内部结构Stm32f103c的核心内部结构可以分为五个主要部分:处理器内核、存储器、外设控制器、总线接口和时钟系统。
首先是处理器内核,即ARM Cortex-M3内核。
它是Stm32f103c的主要计算和控制单元,负责执行各种指令并处理中断。
其次是存储器部分,包括闪存和SRAM。
闪存是用于存储程序代码和数据的非易失性存储器,可以在断电后保持数据。
SRAM是用于临时存储数据的易失性存储器,读写速度更快。
第三部分是外设控制器,它包括多个与外设通信和控制相关的模块。
其中通用串行总线(USART)是一种广泛应用于串行通信的外设,可以实现与其他设备的通信。
SPI接口和I2C接口也是常见的外设控制器,用于实现与外部设备的通信和数据传输。
此外,还包括模数转换器(ADC)模块,用于将模拟信号转换为数字信号。
第四部分是总线接口,它负责连接内核、存储器和外设控制器。
Stm32f103c采用的总线接口包括高速总线(AHB)和高级外围总线(APB)。
AHB用于连接内核和存储器,APB则连接外设控制器。
最后是时钟系统,它提供处理器和外设所需的时钟信号。
STM32F103ZET6时钟
STM32F103ZET6时钟1、STM32F103ZET6时钟说明 STM32F103ZET6的时钟树图如下所⽰: STM32F103ZET6有很多个时钟源,分别有: HSE:⾼速外部时钟信号。
HSI:⾼速内部部时钟信号。
LSI:低速内部时钟信号。
LSE:低速外部时钟信号。
HSI和LSI是芯⽚内置的时钟源,它们的频率⼤⼩是固定的,HSI是8MHZ,LSI是⼤约40KHZ。
时钟树中的序号1是⾼速外部时钟信号HSE: HSE是由有源晶振或⽆源晶振通过OSC_OUT和OSC_IN脚提供的,从图⽚中可以看到,HSE频率从4MHZ到16MHZ不等。
当使⽤有源晶振时,时钟从OSC_IN引脚进⼊,OSC_OUT引脚悬空;当使⽤⽆源晶振时,时钟从OSC_IN和OSC_OUT进⼊,并且要配谐振电容。
HSE最常使⽤的就是8MHZ的⽆源晶振。
时钟树中的序号D是外部低速时钟LSE: LSE是由有源晶振或⽆源晶振通过OSC32_OUT和OSC32_IN脚提供的。
LSE⼀般使⽤的是32.768KHZ的⽆源晶振。
时钟树中的序号2是选择PLL(倍频后的时钟)的时钟源: 从图中可以看出,PLL时钟的来源可以是HSE或HSI/2,通过PLLSRC(CFGR寄存器的bit16)来选择使⽤哪⼀个时钟源。
HSI是8MHZ的内部⾼速时钟信号,HSI会根据温度和环境的情况频率会有漂移,⼀般不作为PLL的时钟来源。
⼀般使⽤HSE作为PLL的时钟源。
时钟树中的序号3是设置PLL的倍频因⼦: 可以对PLL的时钟来源进⾏倍频,然后得到PLLCLK时钟源。
倍频因⼦可以通过时钟配置寄存器CFGR的bit21~bit18:PLLMUL[3:0]来配置,分别可配置成2、3、4、5、6、7、8、9、10、11、12、13、14、15、16倍频。
举个例⼦来说,如果选择HSE作为PLL的时钟源,⽽且HSE=8MHZ,且将PLL的倍频因⼦设置为9倍频,那么PLLCLK=9*8MHZ = 72MZH。
stm32f103工作原理
STM32F103工作原理解析引言STM32F103是一款由意法半导体(STMicroelectronics)推出的32位ARM Cortex-M3内核的微控制器。
它是一款功能强大且广泛应用的微控制器,常用于工业自动化、电机控制、嵌入式系统等领域。
本文将详细解释STM32F103的工作原理,包括芯片架构、时钟系统、外设模块和程序执行过程等方面。
芯片架构STM32F103采用了哈佛结构的体系结构,具有较高的运行效率和较低的功耗。
它的主要组成部分包括核心处理器、存储器、外设模块和时钟系统。
核心处理器STM32F103采用了ARM Cortex-M3内核,这是一款32位的RISC处理器。
它具有高性能、低功耗和高代码密度的特点。
Cortex-M3内核包含了ARM Thumb-2指令集,支持从1到4字节的指令,并且具有较好的代码压缩能力。
存储器STM32F103具有多种类型的存储器,包括闪存、SRAM和备份寄存器。
闪存用于存储程序代码和常量数据,具有较大的容量和较快的访问速度。
SRAM用于存储变量和堆栈数据,具有较快的读写速度。
备份寄存器用于存储关键数据,例如时钟设置和唯一设备ID等。
外设模块STM32F103内置了丰富的外设模块,包括通用输入输出口(GPIO)、串行通信接口(USART)、定时器、模拟数字转换器(ADC)等。
这些外设模块可以通过寄存器配置和控制来实现各种功能,例如数据输入输出、通信、计时和信号转换等。
时钟系统时钟系统是STM32F103的重要组成部分,它提供了系统时钟和外设时钟。
STM32F103具有多个时钟源,包括内部RC振荡器、外部晶体振荡器和外部时钟输入。
时钟系统还包括PLL锁相环,可以通过倍频和分频来生成不同频率的系统时钟。
时钟系统时钟系统是STM32F103的核心部分,它为整个芯片提供了时序控制和同步功能。
时钟系统包括系统时钟和外设时钟两部分。
系统时钟系统时钟是STM32F103内部各模块运行所需的时钟信号。
STM32F103时钟部分归纳
学习一款单片机,首先要了解的是它的时钟部分,在网上找到一些stm32F103时钟部分的资料,归纳总结一下。
时钟模块框图如下:仔细看上面这个框图,就可以对F103的时钟有一个清晰的认识了。
三种不同的时钟源可用作系统时钟(SYSCLOCK):HSI振荡器时钟(由芯片内部RC振荡器提供)HSE振荡器时钟(由芯片外部晶体振荡器提供)PLL时钟(通过倍频HIS或HSE振荡器倍频得到)另外还有两个时钟源:LSI内部40kHz低速RC振荡器时钟,用于驱动独立看门狗或选择驱动RTCLSE外部32.768kHz低速外部输入时钟,用于驱动RTC1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。
2.用户可通过多个预分频器分别配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。
AHB和APB2域的最大频率是72MHz。
APB1域的最大允许频率是36MHz。
SDIO接口的时钟频率固定为HCLK/2。
3. RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。
通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。
ADC时钟由高速APB2时钟经2、4、6或8分频后获得。
定时器时钟频率由APB1(PCLK1)时钟获得,分配由硬件按以下2种情况自动设置:a. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
b. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
4. FCLK是Cortex-M3的自由运行时钟。
详情见ARM的Cortex-M3技术参考手册。
关于HSE、HIS、PLL、LSE、LSI时钟特性及校准直接参考STM32相关Datasheet。
系统时钟配置过程:配置过程主要对RCC_CR、RCC_CFGR、RCC_CIR这三个寄存器,进行读写访问,配置系统时钟完成后,进行对要使用的相应外设时钟进行使能和配置,不用的外设建议关闭相应的外设时钟(降低功耗)。
stm32几种时钟控制介绍,含原理图
stm32几种时钟控制介绍,含原理图本文提到的有以下内容:• 时钟系统与总线矩阵• SysTick系统定时器• RTC实时时钟• 看门狗定时器• 通用定时器一、时钟系统与总线矩阵stm32F4的时钟树如下图所示:在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
HSI是高速内部时钟,RC振荡器,频率为8MHz。
HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
LSI是低速内部时钟,RC振荡器,频率为40kHz。
LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
我们在学习51单片机的时候,其内部是没有晶振的,而stm32是有的。
stm32可以通过RCC(时钟控制寄存器)对时钟进行参数配置以及使能。
我们还可以通过修改system_stm32f4xx.c文件,来配置上述时钟树上的一些分频、倍频参数,得到理想的频率。
在单片机系统中,CPU和总线以及外设的时钟设置是非常重要的,因为没有时钟就没有时序,组合电路需要好好理解清楚。
我们先来看一下总线矩阵。
片上总线标准种类繁多,而由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。
AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。
二者分别适用于高速与相对低速设备的连接。
一般性的时钟设置需要先考虑系统时钟的来源,是内部RC还是外部晶振还是外部的振荡器,是否需要PLL。
然后考虑内部总线和外部总线,最后考虑外设的时钟信号。
遵从先倍频作为CPU时钟,然后在由内向外分频,下级迁就上级的原则。
专题三stm32时钟树及相关库函数
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
APB2ENR|=1<<2;//或运算,1有效。
第二种方法就是调用库函数。
四、介绍两种库函数
4.1外设时钟使能函数
与rcc有关寄存器设置的库函数都在stm32f10x_rcc.c以及stm32f10x_rcc.h文档中。上面说要使能GPIO时钟,因为GPIO是APB2的外设,因此就是使能APB2相应外设时钟。库函数是:
三
从前面的图1可以看到,要设置STM32芯片的时钟,有以下几个方面要考虑:
1.芯片的时钟源选择HSE,HIS还是其他?
2.SYSCLK系统时钟应该选择哪个?
3.各总线的分频系数?
4.PLL锁相环的倍频系数?
5.各个外设对应的时钟是开启呢,还是禁止?
上面5个问题,STM32统一用RCC来解决。我们首先来看下与RCC相关的寄存器有哪些。
输入参数2:NewState,外设时钟的新状态,可以是DISABLE,ENABLE两种。
返回值:无
调用示范:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟
函数的具体定义引用如下:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
STM32时钟源的介绍及使用方法——STM32时钟树
STM32时钟源的介绍及使⽤⽅法——STM32时钟树【温馨提⽰:以下内容均来⾃⽹友的⽆私奉献或书本的摘抄,在此表⽰感谢!】上图是STM32的时钟树,从树上我们可以看到,STM32的时钟有两个来源——内部时钟和外部时钟。
按时钟频率来分,⼜可分为⾼速时钟和低速时钟。
因此STM32的时钟有四个来源:⾼速外部时钟信号(HSE)、低速外部时钟信号(LSE)、⾼速内部时钟信号(HSI)和低速内部时钟信号(LSI)(图中分别⽤蓝⾊的①~④标注)。
①HSE⾼速外部时钟:由外部4~16MHz的晶体或有源晶振提供,通常采⽤8MHz。
②LSI低速外部时钟:外部晶体提供,主要是给实时时钟(RTC),⼀般为32.768kHz。
③HSI⾼速内部时钟:由内部RC振荡器产⽣的8MHz时钟,但不够稳定。
④LSI低速内部时钟:内部RC振荡器产⽣的供给RTC的时钟,频率在30kHz~60kHz之间,通常约40kHz。
时钟在STM32内部最终是供给四⼤块(图中⽤红⾊椭圆圈出):USB的48MHz时钟、系统时钟SYSCLK、实时时钟模块RTC、独⽴看门狗的时钟IWDGCLK。
其中最主要的,也是最⼤头是系统时钟SYSCLK,它可以是内部或外部⾼速时钟直接接过来,也可以内、外部⾼速时钟是PLL倍频后提供的,系统时钟再分别供给Cortex内核、SDIO、AHB总线、DMA、APB1、APB2等。
我们通常是采⽤外部8MHz⾼速时钟(HSE),所以着重说HSE。
我们以前⾯的GPIO上的时钟为例,由ST的Datasheet可知,GPIO是在APB2⾼速外设总线上的,图中绿⾊的线就是时钟的流程,我们⼀步步地来看。
8MHz外部晶体(或晶振)输⼊后,先经过⼀个开关PLLXTPRE(HSE divider for PLL entry),此开关决定对HSE进⾏2分频再输⼊到PLL或直接到PLL。
我们选择不分频。
这样时钟⼜到了第⼆个开关PLLSRC(PLL entry clock source),此开关决定PLL的时钟来源,是内部⾼速时钟⼆分频的时钟还是PLLXTPRE的输出。
STM32时钟配置方法详解
STM32时钟配置方法详解时钟树是STM32微控制器中一系列时钟源和时钟分频器的组成部分。
时钟树包括系统时钟、外设时钟和内核时钟。
系统时钟用于驱动整个微控制器系统的核心,外设时钟用于驱动各种外设,内核时钟用于驱动CPU的运算。
在进行时钟配置之前,首先需要了解系统所需的时钟频率。
在STM32中,系统时钟可以通过多种方式进行配置,例如使用外部晶体、外部时钟、内部RC振荡器或者PLL(锁相环)等方式。
外部晶体是一种常用的时钟源,可以提供高精度的时钟频率。
在使用外部晶体时,首先需要设置PLL的时钟源为外部晶体,并设置PLL输入除频器的分频系数。
然后,再根据系统所需的时钟频率,设置PLL的倍频系数,以得到最终的系统时钟频率。
外部时钟是从外部提供的时钟信号,一般用于测试和调试。
使用外部时钟时,需要设置PLL的时钟源为外部时钟,并设置PLL的倍频系数,以得到所需的系统时钟频率。
内部RC振荡器是一种低成本的时钟源,但是其频率不如外部晶体稳定和精确。
在使用内部RC振荡器时,需要设置PLL的时钟源为内部RC振荡器,并设置PLL的倍频系数,以得到所需的系统时钟频率。
PLL是一种用于产生稳定高频时钟的电路,可以从一个低频时钟源产生一个高频时钟源。
使用PLL时,需要设置其输入时钟源和倍频系数。
系统时钟的分频系数可以通过RCC_CFGR寄存器进行设置。
RCC_CFGR寄存器的各个位域用于配置系统时钟的分频系数,包括分频因子、APB1的分频系数、APB2的分频系数等。
外设时钟是用于驱动外设的时钟,可以由系统时钟分频得到。
外设时钟的分频系数可以通过RCC_CFGR寄存器及各个外设的控制寄存器进行设置。
内核时钟是用于驱动CPU的运算的时钟。
在STM32微控制器中,CPU 时钟可以由系统时钟分频得到,分频系数可以通过RCC_CFGR寄存器和FLASH_ACR寄存器进行设置。
除了上述方法之外,STM32还可以使用时钟配置工具进行时钟配置。
STM32F103x时钟配置
首先要知道系统时钟(SYSTEMCLOCK)->AHB时钟(HPRE)->APB1&2时钟(PPRE1&2)依次往下分频的关系。
必须记住其次要知道涉及到时钟分配一定在RCC里。
找到时钟配置寄存器(RCC_CFGR)很清楚的看清楚分频关系。
第三要知道STM32103X的系统时钟、AHB时钟、APB时钟的设置都在CMSIS->system_stm32f103x.c里面,可以看上面提供的图。
系统时钟的设置AHB时钟和APB时钟的设置从上图可以看出,AHB时钟和APB时钟和系统时钟是一样的,没有分频。
由软件置1或清零。
当进入待机和停止模式时,该位由硬件清零,关闭外部时钟。
当外部时钟被用作或被选择将要作为系统时钟时,该位不能被清零。
0:HSE 振荡器关闭 1:HSE 振荡器开启位15:8HSICAL[7:0]:内部高速时钟校准 在系统启动时,这些位被自动初始化位7:3HSITRIM[4:0]:内部高速时钟调整由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。
位2 保留,始终读为0。
位1HSIRDY :内部高速时钟就绪标志由硬件置1来指示内部8MHz 时钟已经稳定。
在HSION 位清零后,该位需要6个内部时钟周期清零。
0:内部8MHz 时钟没有就绪 1:内部8MHz 时钟就绪位0HSION :内部高速时钟使能 由软件置1或清零。
当从待机和停止模式返回或用作系统时钟的外部1-25MHz 时钟发生故障时,该位由硬件置1来启动内部8MHz 的RC 振荡器。
当内部8MHz 时钟被直接或间接地用作或被选择将要作为系统时钟时,该位不能被清零。
0:内部8MHz 时钟关闭 1:内部8MHz 时钟开启4.3.2时钟配置寄存器(RCC_CFGR)偏移地址: 04h 复位值: 0000 0000h访问: 0到2个等待周期,字, 半字 和字节访问只有当访问发生在时钟切换时,才会插入1或2个等待周期。
请教STM32F103的CAN总线速度和系统时钟之间关系的问题?
请教STM32F103的CAN总线速度和系统时钟之间关系的问题?请教STM32F103的CAN总线速度和系统时钟之间关系的问题?(摘自论坛的提问与回答)备注:以下摘自”电子工程世界论坛”,本人认为以下对话非常有价值,所以摘录分享.可以获得的信息:CAN通讯的终端电阻的重要性以及多节点时终端电阻个数问题。
提问:偶在调试STM32F103VBT6的CAN总线的时候,外部使用晶体为8MHz,当设置系统时钟=8MHz,APB1=4MHz,BS1=8tq,BS2=7tq,Prescaler=5,得到波特率为50K,两个板子之间CAN收发完全正常。
当设置系统时钟使用PLL,设置为72Mhz,APB1=36Mhz,BS1=6tq,BS2=5tq,Prescaler=3,理论上波特率应该为1Mhz,两个板子之间的CAN通信却无法完成,总是提示出错。
我把系统时钟设置为36Mhz,APB1=18Mhz,BS1=6tq,BS2=5tq,Prescaler=3,理论上波特率应该为500Khz,两个板子之间的CAN通信同样无法完成,总是提示出错。
请问使用CAN通信的时候对时钟有要求么??CAN速度问题请各位帮忙看看,1、板子在8M的系统时钟下,当CAN总线时钟为4M或8M的时候,在CAN波特率设置为50k,100k,125k的情况下,通信都正常。
2、板子在72M的系统时钟下,当CAN总线时钟为36M的时候,在波特率为任何情况下,通信都不能正常完成。
请各位路过的帮忙看一下,问题出在哪里,我用的CAN收发器时Mcp2551,总线上只连接了2个节点。
回答1:一点提示一点提示,当APB时钟为36M时,会有不能整除的问题,我前几天碰到过,要注意一下。
另外,波特率不对,应该用示波器看。
回答2:CAN问题我把APB1时钟设为36M的时候,BS1=6tq,BS2=5tq,Prescaler=3,是可以整除的,而且可以方便的1MHz,500KHz,250KHz等不同频率。