使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加
对照着上节的RCC源文件编写:
void HSE_SetSysClk( uint32_t RCC_PLLMul_x ) { ErrorStatus HSEStatus; //变量的声明在大括号之前 // 把RCC 寄存器复位成复位值 (一定要,否是函数调用不成功) RCC_DeInit(); // 使能 HSE RCC_HSEConfig(RCC_HSE_ON); HSEStatus = RCC_WaitForHSEStartUp(); if( HSEStatus == SUCCESS ) { // 使能预取指 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); // 配置 PLLCLK = HSE * RCC_PLLMul_x RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x); // 使能PLL RCC_PLLCmd(ENABLE); // 等待PLL稳定 while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ); // 选择系统时钟 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while( RCC_GetSYSCLKSource() != 0x08 ); } else { /* 如果HSE 启动失败,用户可以在这里添加处理错误的代码 */ } }
直接在主函数调用即可,传入相应的RCC_PLLMul_x 参数.
MCO输出监测系统时钟
PA8功能复用,示波器观察系统时钟.(在板子上关闭蜂鸣器的开关)
void MCO_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; //复用推完输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
在main函数写 RCC_MCOConfig(RCC_MCO_SYSCLK); 使能MCO,参数选择SYSCLK,将系统时钟传入MCO中.接好示波器.