本文目录一览

1,Stm32内部时钟设置疑问

stm32在启动的时候就默认使用内部的8MHz RC时钟源,直到初始化程序选择使用外部晶振为止。
内部时钟源是芯片内部自带外部为外部晶振至于多大是可以自己配置的最大值看你具体芯片支持一般外部时钟源会比内部稳定

Stm32内部时钟设置疑问

2,STM32的系统默认时钟是多少

STM32系统的时钟一般有三种HSI,内部高速时钟,默认8MHZ,如果你的程序不做任何处理,系统默认的就是8MHz,还有外部晶振或者外部时钟,普通型最大不超过16MHz,互联型不超过25MHz,还有一个PLL,从HSI或者HSE里吸取时钟,倍频成最大72MHz综述,如果你的程序不做任何处理,就是8MH是

STM32的系统默认时钟是多少

3,STM32辅助时钟

只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟。使用IO的复用功能如果没有以上几种情况就不需要开启AFIO时钟。因为关闭JTAG其实是执行重映射,所以需要开启AFIO。
四个 hse lse hsi lsi hse 外接高频晶振,一般8mlse外接供时钟芯片使用的低频时钟,一般32.768khsi 内部高速rc振荡器时钟,8mlsi 内部40k

STM32辅助时钟

4,stm32系统时钟配置问题解释为什么用某个外

简单理解就是,一般来说,STM32内部有一个8MHz的时钟(HSI时钟),系统上电默认的就是使用该时钟来运行程序,但这个内部的8MHz的精度并不高,也就是说有一定的误差。所以一般我们会在STM32芯片外部接一个8MHz的标准晶振(HSE时钟),配置系统时钟就是使用这个外部的HSE时钟经过内部倍频之后作为系统运行的时钟(sysclock),倍频成多少看你的STM32最高能支持多高的时钟频率,STM32f051C8T6(Cortex-M0)支持到48MHz,STM32F103ZET6(Cortex-M3)支持到72MHz。

5,stm32的时钟大小根据什么选择

APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。如果自己操作寄存器就不一定了。 然后psc的问题:其实里面有两个分频的概念,APB预分频和计数器时钟频率(CK_PSC...
你要知道为什么需要时钟。单片机必须要有时钟才能正常运行,stm32有外部时钟和内部时钟的区别。但无论是外部还是内部时钟,都会经过分频或倍频最后得到外设的时钟,这样外设才能正常运行。而打开时钟就是允许接收分频后的频率。比如外部时钟晶振你是8m,经过倍频后得到72m,然后可分频2、4、6、8……给adc是使用,但是adc最大运行频率为14m,所以分频数至少得设为6。这时你也要像你问的那样,打开adc的时钟。

6,STM32的系统默认时钟是多少

/*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startupfile (startup_stm32f10x_xx.s) before to branch to application main.To reconfigure the default setting of SystemInit() function, refer tosystem_stm32f10x.c file*/ 然后你再去看看 SystemInit()这个函数是怎么配置的吧。看完再说。这个是标准库里面的例程主函数里的第一句话。

7,stm32一定要配置系统时钟吗

一般系统嘀嗒定时器用在操作系统上,做多任务调度用。比如ucos操作系统在每个嘀嗒定时器中断时调度一次(当然还有其他情况下也进行调度)。在不用操作系统的时候很少用,毕竟stm32有更强大的外设定时器。
简单理解就是,一般来说,stm32内部有一个8mhz的时钟(hsi时钟),系统上电默认的就是使用该时钟来运行程序,但这个内部的8mhz的精度并不高,也就是说有一定的误差。所以一般我们会在stm32芯片外部接一个8mhz的标准晶振(hse时钟),配置系统时钟就是使用这个外部的hse时钟经过内部倍频之后作为系统运行的时钟(sysclock),倍频成多少看你的stm32最高能支持多高的时钟频率,stm32f051c8t6(cortex-m0)支持到48mhz,stm32f103zet6(cortex-m3)支持到72mhz

8,STM32里系统时钟

这得看你程序 RCC那块的配置,//PLL设置 SYSCLK/1 * 9 = 8*1*9 = 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//启动PLLRCC_PLLCmd(ENABLE);标配是外接8Mhz,内部9倍频,平常的学习,工作都满足了!
不可能出现这种情况吧?STM32F10X系列的,外部晶振最大只能到16MPLL的倍频值只能是整数,结果是 系统时钟 = 晶振 * 倍频值所以倍频值 = 系统时钟 / 晶振 只能是整数,不能带小数点。所以,即使STM32F10X允许你用25M,你也得不到72M,最大只能到50M
rcc_apb2periphclockcmd(rcc_apb2periph_gpiog, enable); 只是开了gpiog时钟,配置gpiog管脚前必须开此systeminit();系统初始化,开芯片内部时钟等等,完全不是一个概念

9,stm32f412总线时钟100m怎么计算

unsigned char SysClockSet(unsigned char OSC, unsigned char Clock)  用于设置MCU的时钟,两个参数,前一个(OSC)用于选择内部晶振还是外部晶振,这能是HSE或者HSI,这个在H文件中有定义;  第二个参数 Clock,范围0~25,对应不同的主频,具体值看程序里面switch语句部分就明白了;  然后要说一点,HSE_VALUE 和 HSI_VALUE是外部和内部晶振的频率,这个值在 stm32f4xx.h 里面有定义的,如果是你自己做的板子,那么就需要根据你所采用的晶振数值到stm32f4xx.h里面把 HSE_VALUE 修改一下即可;  SysClockGet(void)函数用来获取当前MCU主频,返回值的单位是Hz;  再PS:用此程序,可以动态的调整MCU主频,就是在MCU运行中,根据实际工作量的多少升降主频,我试过,蛮好使的,而且可以超频,216MHz没有问题,240MHz要看芯片体质,有些可以长时间运行,260MHz,更要看体质了,反正我的芯片是真呢过跑个几分钟,然后就死机了。
虽然我很聪明,但这么说真的难到我了
虽然我很聪明,但这么说真的难到我了

10,stm32f407 初始时钟是多少怎么改

STM32启动时默认为内部RC震荡 所以在使用的时候,首先要对时钟进行初始化 等待外部晶振稳定后 然后才对外部晶振进行分频或者倍频 最后才是对APB总线时钟及模块时钟进行配置。
楼上的用起来也有点麻烦,用我这个吧,C文件:#include "stm32f4xx.h"#include "sysclk.h"unsigned char SysClockSet(unsigned char OSC, unsigned char Clock) unsigned int temp = 0, PLLM = 0, PLLN = 0, PLLP = 0, PLLQ = 0; unsigned int OSC_Sta; unsigned int OSC_VALUE = HSI_VALUE; unsigned int OSC_RDY = RCC_CR_HSIRDY; unsigned int OSC_ON = RCC_CR_HSION; unsigned char OSC_ERROR = HSI_error; unsigned int OSC_OK = HSI_OK; unsigned int OSC_SW = RCC_CFGR_SW_HSI; unsigned int OSC_SWS = RCC_CFGR_SWS_HSI; unsigned int OSC_SRC = RCC_PLLCFGR_PLLSRC_HSI; if(OSC == HSE) OSC_VALUE = HSE_VALUE; OSC_RDY = RCC_CR_HSERDY; OSC_ON = RCC_CR_HSEON; OSC_ERROR = HSE_error; OSC_OK = HSE_OK; OSC_SW = RCC_CFGR_SW_HSE; OSC_SWS = RCC_CFGR_SWS_HSE; OSC_SRC = RCC_PLLCFGR_PLLSRC_HSE; } else if(OSC != HSI) return(Parameter_error); switch (Clock) case 0 : PLLM = (OSC_VALUE/1000000); PLLN = 96; PLLP = 8; PLLQ = 2; break; //12MHz case 1 : PLLM = (OSC_VALUE/1000000); PLLN = 96; PLLP = 6; PLLQ = 2; break; //16MHz case 2 : PLLM = (OSC_VALUE/2000000); PLLN = 72; PLLP = 8; PLLQ = 3; break; //18MHz case 3 : PLLM = (OSC_VALUE/2000000); PLLN = 96; PLLP = 8; PLLQ = 4; break; //24MHz case 4 : PLLM = (OSC_VALUE/2000000); PLLN = 120; PLLP = 8; PLLQ = 5; break; //30MHz case 5 : PLLM = (OSC_VALUE/2000000); PLLN = 96; PLLP = 6; PLLQ = 4; break; //32MHz case 6 : PLLM = (OSC_VALUE/2000000); PLLN = 144; PLLP = 8; PLLQ = 6; break; //36MHz case 7 : PLLM = (OSC_VALUE/2000000); PLLN = 120; PLLP = 6; PLLQ = 5; break; //40MHz case 8 : PLLM = (OSC_VALUE/2000000); PLLN = 168; PLLP = 8; PLLQ = 7; break; //42MHz case 9 : PLLM = (OSC_VALUE/2000000); PLLN = 192; PLLP = 8; PLLQ = 8; break; //48MHz case 10: PLLM = (OSC_VALUE/2000000); PLLN = 216; PLLP = 8; PLLQ = 9; break; //54MHz case 11: PLLM = (OSC_VALUE/2000000); PLLN = 168; PLLP = 6; PLLQ = 7; break; //56MHz case 12: PLLM = (OSC_VALUE/2000000); PLLN = 120; PLLP = 4; PLLQ = 5; break; //60MHz case 13: PLLM = (OSC_VALUE/2000000); PLLN = 192; PLLP = 6; PLLQ = 8; break; //64MHz case 14: PLLM = (OSC_VALUE/2000000); PLLN = 144; PLLP = 4; PLLQ = 6; break; //72MHz case 15: PLLM = (OSC_VALUE/2000000); PLLN = 240; PLLP = 6; PLLQ = 10; break; //80MHz case 16: PLLM = (OSC_VALUE/2000000); PLLN = 168; PLLP = 4; PLLQ = 7; break; //84MHz case 17: PLLM = (OSC_VALUE/2000000); PLLN = 192; PLLP = 4; PLLQ = 8; break; //96MHz case 18: PLLM = (OSC_VALUE/2000000); PLLN = 216; PLLP = 4; PLLQ = 9; break; //108MHz case 19: PLLM = (OSC_VALUE/2000000); PLLN = 120; PLLP = 2; PLLQ = 5; break; //120MHz case 20: PLLM = (OSC_VALUE/2000000); PLLN = 144; PLLP = 2; PLLQ = 6; break; //144MHz case 21: PLLM = (OSC_VALUE/2000000); PLLN = 168; PLLP = 2; PLLQ = 7; break; //168MHz case 22: PLLM = (OSC_VALUE/2000000); PLLN = 192; PLLP = 2; PLLQ = 8; break; //192MHz case 23: PLLM = (OSC_VALUE/2000000); PLLN = 216; PLLP = 2; PLLQ = 9; break; //216MHz case 24: PLLM = (OSC_VALUE/2000000); PLLN = 240; PLLP = 2; PLLQ = 10; break; //240MHz// case 25: PLLM = (OSC_VALUE/2000000); PLLN = 260; PLLP = 2; PLLQ = 11; break; //260MHz default: PLLM = (OSC_VALUE/2000000); PLLN = 240; PLLP = 2; PLLQ = 10; break; //240MHz } //如果时钟没有稳定,则重新启动时钟并等待稳定 OSC_Sta = RCC->CR & OSC_RDY; if(OSC_Sta == 0) RCC->CR |= OSC_ON; do OSC_Sta = RCC->CR & OSC_RDY; temp++; }while((OSC_Sta == 0) && (temp < 0x0600)); if(OSC_Sta == 0)return(OSC_ERROR); //超时错误 } //切换系统时钟为对应晶振并等待稳定 RCC->CFGR &= (~(RCC_CFGR_SW)); RCC->CFGR |= OSC_SW; while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != OSC_SWS); //配置PLL RCC->CR &= (~(RCC_CR_PLLON)); //先关闭PLL RCC->CR &= (~(RCC_CR_PLLI2SON)); //关闭PLLI2S RCC->PLLCFGR = PLLM | (PLLN << 6) | (((PLLP >> 1) -1) << 16) | (PLLQ << 24) | (OSC_SRC); //启用PLL,并等待稳定 RCC->CR |= RCC_CR_PLLON; while((RCC->CR & RCC_CR_PLLRDY) == 0); //启用PLLI2S,并等待稳定 RCC->CR |= RCC_CR_PLLI2SON; while((RCC->CR & RCC_CR_PLLI2SRDY) == 0); //切换系统时钟为PLL并等待稳定 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= RCC_CFGR_SW_PLL; while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); return(OSC_OK);}uint32_t SysClockGet(void) uint32_t PLLM = 0, PLLN = 0, PLLP = 0, PLLSRC = 0; if ((RCC->CFGR & RCC_CFGR_SWS ) == RCC_CFGR_SWS_HSE) return HSE_VALUE; else if ((RCC->CFGR & RCC_CFGR_SWS ) == RCC_CFGR_SWS_HSI) return HSI_VALUE; else PLLM = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; PLLN = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN)>>6); PLLP = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP)>>16)+1)<<1); PLLSRC = RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC; if(PLLSRC == 0) return (((HSI_VALUE * PLLN) / PLLM )/ PLLP); else return (((HSE_VALUE * PLLN) / PLLM )/ PLLP); }}

文章TAG:STM32F031内部  内部时钟  时钟  
下一篇