从说明书上看stm32f407的系统默认时钟为16M,我的理解如果在代码中不对时钟配置的话系统时钟应该就是16M吧?如果调用RCC_DeInit()函数,看了一下固件库中的说明:
Note:The default reset state of the clock configuration is given below:
- HSI ON and used as system clock source
- HSE, PLL and PLLI2S OFF
- AHB, APB1 and APB2 prescaler set to 1.
- CSS, MCO1 and MCO2 OFF
- All interrupts disabled
This function doesn't modify the configuration of the
- Peripheral clocks
- LSI, LSE and RTC clocks
说明中系统时钟用的是HSI,也就是16M,这样代码中有RCC_DeInit()和没有RCC_DeInit()应该都是16M吧?
然后我使用外部晶振,用PLL倍频分频也将系统时钟配置为16M,但小灯的闪烁三者的时间不一样!不知道是为什么!!
1.没有时钟配置,小灯闪烁最快,用RCC_GetClocksFreq得到sysclk_frequency=53760000
2.用HSE 8M,通过PLL使系统时钟拉到16M,小灯闪烁比1慢一些,用RCC_GetClocksFreq得到sysclk_frequency=16000000
3.不用HSE,就调用一个RCC_DeInit()函数,按说系统时钟也应该是16M吧,但小灯闪烁最慢,用RCC_GetClocksFreq得到sysclk_frequency=16000000
实在是不明白!为了说明问题,把代码附上
#include "stm32f4xx.h"
void Clock_Config(void);
void GPIO_Configuration(void);
void delayms(vu16 ms);
RCC_ClocksTypeDef RCC_ClockFreq;
int main(void)
{
//Clock_Config();
RCC_DeInit(); //这两句都注掉就是第1种时钟什么都不配置的情况,注上一句就是不用PLL,只调用RCC_DeInit()是第三种情况,上一句Clock_Config()不注释,把RCC_DeInit()注掉就是使用PLL用外部的8M晶振
GPIO_Configuration();
RCC_GetClocksFreq(&RCC_ClockFreq);
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delayms(500);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
delayms(500);
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void delayms(vu16 ms)
{
vu16 i;
while(ms--)
{
i=6000;
while(i--);
}
}
void Clock_Config(void){
ErrorStatus State;
uint32_t PLL_M;
uint32_t PLL_N;
uint32_t PLL_P;
uint32_t PLL_Q;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while( RCC_WaitForHSEStartUp() != SUCCESS );
PLL_M=8;
PLL_N=32;
PLL_P=2; //sysclk=8M/8*32/2=16M
RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);
RCC_PLLCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_HCLKConfig(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div4);
RCC_PCLK2Config(RCC_HCLK_Div2);
}
一周热门 更多>