公司做个东西,为了节省PCB面积用了STM32的内部时钟, 写时钟设置函数的时候出问题了~~先是库函数失效,不能成功设置RCC-CFGR的值,后来改为寄存器操作后能成功赋值了,但是单步调试,函数进来就跳不出去了~~真心无解了~~
遂求助于广大热心的人民群众了~~
代码如下
void RCC_Clock_Init(void)
{
RCC_DeInit(); // RCC Reset
RCC_HSEConfig(RCC_HSE_OFF);// 关闭HSE入口
RCC_HSICmd(ENABLE); //启用HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{
}
FLASH_PrefetchBufferCmd(ENABLE);
FLASH_SetLatency(FLASH_Latency_1);
RCC_PLLConfig (RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);//设置PLL输出32M HSI为16M 乘以4除以2为32M PLL这里是 因为不能直接乘以2 所以这么设置
RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB 32M
RCC_PCLK1Config(RCC_HCLK_Div2);//低速 APB1 16M
RCC_PCLK2Config(RCC_HCLK_Div1) ;//高速 APB2 32M
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL准备好
{
}
// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟
RCC->CFGR = RCC->CFGR | 0x00000003;//上面的库函数方式不能执行赋值操作,寄存器操作可成功赋值
/* while(RCC_GetSYSCLKSource() != 0x0C) // PLL返回用作系统时钟的时钟源 0x0C:PLL作为系统时钟 改为寄存器操作过后就没用这个了~~
{
} */
}
|