^=? :表示为异或,相同取0,相异取1
|=? :表示有1取1
出现这个问题的解决方法
?
?正是这个错误
因为.h文件没有打分号导致
HSE配置系统时钟
首先先对RCC寄存器进行复位操作,然后对HSE时钟进行使能操作,并等待HSE时钟使能完成
ErrorStatus HSEStatus;
//把RCC寄存器复位成复位值
RCC_DeInit();
//使能HSE
RCC_HSEConfig(RCC_HSE_ON);
//判断HSE使能是否完成
HSEStatus = RCC_WaitForHSEStartUp();
如果使能完成对Flash进行预取指操作(包括使能Flash和并对Flash进行周期等待的设置)
?
//使能预取指
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
使能AHB,APB1,APB2的时钟
/使能AHB, APB1,APB2的时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_SYSCLK_Div2);
RCC_PCLK2Config(RCC_SYSCLK_Div1);
并配置锁相环的时钟,并进行使能(RCC_PLLMul_x:配置成函数的输入值,可以在主函数进行修改时钟的频率)
//配置 PLLCLK = HSE * RCC_PLLMul_x
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
//使能 PLL
RCC_PLLCmd(ENABLE);
选择系统时钟,并检测系统时钟是否已经启动
//选择系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() !=0x08);
总的代码展示:
void HSE_SetSysClk(uint32_t RCC_PLLMul_x)
{
ErrorStatus HSEStatus;
//把RCC寄存器复位成复位值
RCC_DeInit();
//使能HSE
RCC_HSEConfig(RCC_HSE_ON);
//判断HSE使能是否完成
HSEStatus = RCC_WaitForHSEStartUp();
if(HSEStatus == RCC_WaitForHSEStartUp())
{
//使能预取指
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//使能AHB, APB1,APB2的时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_SYSCLK_Div2);
RCC_PCLK2Config(RCC_SYSCLK_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
{
//当 时钟没有正常启动时,用户可以自行添加代码
}
}
?
|