本文目录一览

1,主板上基础时钟的频率是

B

主板上基础时钟的频率是

2,stm32f407 定时器三用的APB1 时钟应该是42为什么程序里面却是84百度知

这个主要是看你的RCC使能的时候用的是HSE还是HSI,这个打开GPIO的时钟只是把你的GPIOB和GPIOA搭载到APB2时钟总线上去

stm32f407 定时器三用的APB1 时钟应该是42为什么程序里面却是84百度知

3,stm32的定时器4时钟频率

定时器4的时钟为72MHz,而非36MHz。APB1是36MHz,但是定时器4倍频了,看一下时钟树就可以了。

stm32的定时器4时钟频率

4,单片机已知定时时间如何设计PSC和ARR的值

对于STM32F4开发板,先弄清APB1的时钟频率是42M,是AHB时钟168M经4分频得到的,由于分频系数不为1,因此CK-INT的频率是APB1时钟的2倍84M,可知 定时时间 us=(ARR+1)(PSC+1)/84M取PSC=83, 刚好一个脉冲1us,则定时时间 us=(ARR+1),定时1000US,ARR取999 定时100US,ARR取 9916位定时器 最大可定时 65535 US。取PSC=167, 则一个脉冲2us取PSC=839, 则一个脉冲10us取PSC=8399, 则一个脉冲100us 这时最大可定时 6.5535 S。取PSC=83999 不行,超过16位寄存器的允许范围对于STM32F1开发板,APB1的时钟频率是36M,是AHB时钟72M经2分频得到的,由于分频系数不为1,因此CK-INT的频率是APB1时钟的2倍即72M。

5,stm32f407定时器捕获计算频率完整例程

这个主要是看你的RCC使能的时候用的是HSE还是HSI,这个打开GPIO的时钟只是把你的GPIOB和GPIOA搭载到APB2时钟总线上去

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

  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,更要看体质了,反正我的芯片是真呢过跑个几分钟,然后就死机了。

7,STM32F103的APB1时钟频率最大为多少

APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。如果自己操作寄存器就不一定了。然后psc的问题:其实里面有两个分频的概念,APB预分频和计数器时钟频率(CK_PSC)的关系指的是AHB分频得到APB1,一般AHB取最大72Mhz,所以APB1是AHB的2分频,既然不是1分频,所以计数器时钟就是APB1的2倍了。而最终定时器的时钟频率(CK_CNT)是对CK_PSC进行psc值的分频得到的,这个值就是我们用来定时计算的数值。图中CK_PSC就是从APB1得到的时钟,预分频控制寄存器的值就是PSC里面的值,而CK_CNT就是分频最终得到的值。STM32F103的APB1时钟频率最大为多少

8,stm32 测频率

没有用过STM32,如果输入捕捉的定时器同时支持计数器溢出中断就好办了,每次溢出设置个counter加1,然后就可用算出总的计数值了。如果不支持溢出中断,可用用另一定时器来辅助,举个例子如果你用200k的基准测量,最大计数为256,那么溢出的时间为256/200k秒=256/200ms,另一个定时器(计数基准和输入捕捉的最好相同)设为256/200ms中断,在中断里面也设置一个counter来累积溢出次数。
复位和时钟控制(rcc)包括以下寄存器: 时钟控制寄存器(rcc_cr) 时钟配置寄存器(rcc_cfgr) 时钟中断寄存器 (rcc_cir) apb2外设复位寄存器 (rcc_apb2rstr) apb1外设复位寄存器 (rcc_apb1rstr) ahb外设时钟使能寄存器 (rcc_ahbenr) apb2外设时钟使能寄存器(rcc_apb2enr) apb1外设时钟使能寄存器(rcc_apb1enr) 备份域控制寄存器 (rcc_bdcr) 控制/状态寄存器 (rcc_csr) 具体配置请参考stm32的数据手册

9,STM32库开发关于时钟的问题如何知道单片机最后输出的频率

系统时钟可以由内部高速时钟(HSI)、外部高速晶振(HSE)、锁能环(PLL)提供,锁能环可以由内部高速时钟(HSI)、外部高速晶振(HSE)提供。  一般情况是,将系统时钟设置为PLL,然后PLL由外部(内部)倍频供给系统时钟,如果外部是8MHz,那么设置倍频系数为9,主时钟频率将达到72MHz(芯片正常工作最大频率)。  在你的问题中所提到的函数,“GPIO”是指引脚,而且你的库函数也写错了,没有这一个,具体请参考ST官方使用手册及库函数手册说明,祝你学习愉快!
做如下检查:第一,如果你用的是systeminit....且是用的库,就是xxxx.lib,那么,你就不必修改了,因为库已经写死8m.第二,如果你是用的仿真,那么要修改keil的配置,keil默认配置是8m,你下载到flash里不受keil配置的影响,但是如果你软件仿真,是受keil的影响建议:如果你的外晶振不是8m的,不要调用systeminit函数来初始化你的时钟,自己写比较好.
你用了官方库,在启动时会先运行启动文件,stm32***.s的,打开后你会看到他先初始化堆栈,运行systeminit();这个函数,这个函数里就会对时钟进行初始化了,最后才是跳转到main,外部晶振的频率是需要设置的,在 stm32**.h头文件里有定义 HSE_**

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:stm32f407apb1时钟频率多少时钟频率  频率  多少  
下一篇