中级会员
 
- 积分
- 203
- 金钱
- 203
- 注册时间
- 2022-10-24
- 在线时间
- 39 小时
|
1金钱
本帖最后由 willie1040 于 2022-11-16 14:04 编辑
如题,求各位大神赐教
void SystemInitHSI (void)
{
u8 i;
/*********************************
将RCC时钟配置重置为默认重置状态
会改变的功能:
*-HSI 开启并用作系统时钟源
*-HSE,PLL和PLLI2S关闭
*-AHB,APB1和APB2预分频器设置为1。
*-CSS,MCO1和MCO2关闭
*-禁用所有中断
不会改变的功能:
*-外围时钟
*-LSI,LSE和RTC时钟
*********************************/
RCC_DeInit();//将外设RCC寄存器重设为缺省值
RCC_HSICmd(ENABLE);//是能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//等待HSI使能成功
{
}
/********************************************
配置AHB时钟(HCLK):HCLK=84MHZ
*此参数可以是下列值之一:
RCC_SYSCLK_Div1:AHB时钟= SYSCLK
RCC_SYSCLK_Div2:AHB时钟= SYSCLK / 2
RCC_SYSCLK_Div4:AHB时钟= SYSCLK / 4
RCC_SYSCLK_Div8:AHB时钟= SYSCLK / 8
RCC_SYSCLK_Div16:AHB时钟= SYSCLK / 16
RCC_SYSCLK_Div64:AHB时钟= SYSCLK / 64
RCC_SYSCLK_Div128:AHB时钟= SYSCLK / 128
RCC_SYSCLK_Div256:AHB时钟= SYSCLK / 256
RCC_SYSCLK_Div512:AHB时钟= SYSCLK / 512
**********************************************/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/********************************************
配置低速APB时钟(PCLK1) CLK1=84/2=42MHZ
*此参数可以是下列值之一:
RCC_HCLK_Div1:APB1时钟= HCLK
RCC_HCLK_Div2:APB1时钟= HCLK / 2
RCC_HCLK_Div4:APB1时钟= HCLK / 4
RCC_HCLK_Div8:APB1时钟= HCLK / 8
RCC_HCLK_Div16:APB1时钟= HCLK /16
**********************************************/
RCC_PCLK1Config(RCC_HCLK_Div2);
/********************************************
配置低速APB时钟(PCLK2) CLK2=84/1=84MHZ
*此参数可以是下列值之一:
RCC_HCLK_Div1:APB1时钟= HCLK
RCC_HCLK_Div2:APB1时钟= HCLK / 2
RCC_HCLK_Div4:APB1时钟= HCLK / 4
RCC_HCLK_Div8:APB1时钟= HCLK / 8
RCC_HCLK_Div16:APB1时钟= HCLK /16
**********************************************/
RCC_PCLK2Config(RCC_HCLK_Div1);
/********************************************
配置主PLL时钟源:
外部高速时钟,PLLM=8,PLLN=336,PLLP=4,PLLQ=7
PLL_VCO = (HSE / PLL_M)* PLL_N
SYSCLK = PLL_VCO/ PLL_P
USB OTG FS 时钟 =PLL_VCO/ PLL_Q
PLL(输出作SYSCLK)=8MHz * N/ (M*P)=8MHz* 336 /(8*4) = 84MHz
**********************************************/
//RCC_PLLConfig(RCC_PLLSource_HSI,16,192,6,7);//8M
RCC_PLLConfig(RCC_PLLSource_HSI,8,216,6,7);//72M
// RCC_PLLConfig(RCC_PLLSource_HSI,16,384,6,8);//64M
// RCC_PLLConfig(RCC_PLLSource_HSI,16,256,4,8);//64M
/********************************************
使能主PLL时钟源:
启用主PLL后,应用软件应等待PLLRDY标志置位,
表示PLL时钟稳定并且可以用作系统时钟源
**********************************************/
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/********************************************
配置系统时钟(SYSCLK):这里选择PLL作系统时钟
SYSCLK=PLL=84MHZ
*此参数可以是下列值之一:
RCC_SYSCLKSource_HSI:选择HSI作为系统时钟源
RCC_SYSCLKSource_HSE:选择HSE作为系统时钟源
RCC_SYSCLKSource_PLLCLK:选择PLL作为系统时钟源
**********************************************/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/*
返回用作系统时钟的时钟源
The clock source used as system clock. The returned value can be one
of the following:
* - 0x00: HSI used as system clock
* - 0x04: HSE used as system clock
* - 0x08: PLL used as system clock
*/
while(RCC_GetSYSCLKSource() != 0x08)
{
i =RCC_GetSYSCLKSource();
}
}
源码如上,调试模式,在最后的while语句 while(RCC_GetSYSCLKSource() != 0x08) 就跑不下去了
|
|