2019-07-19 21:02发布
Electronic 发表于 2016-10-17 11:00 你看看行不行
Electronic 发表于 2016-10-19 17:43 u8 Clock_Init(void) { u8 HSEStatus = 0;
最多设置5个标签!
{
u8 HSEStatus = 0;
u16 StartUpCounter = 0;
while((CLK_ICKR & 0x02) == RESET);//等待内部时钟稳定
CLK_ICKR = 0x01;//内部时钟寄存器
CLK_ECKR = 0x00;//外部时钟寄存器
CLK_SWR = 0xE1;//主时钟切换寄存器
CLK_PCKENR1 = 0x00;
CLK_PCKENR2 = 0x00;//外设时钟寄存器
CLK_CSSR = 0x00;//时钟安全系统
CLK_CCOR = 0x00;//时钟输出寄存器
do
{
CLK_ECKR |= 1<<0;//打开HSE时钟
HSEStatus = CLK_ECKR & 0x02;//读取就绪标准
StartUpCounter++;
}while((HSEStatus == RESET) &&(StartUpCounter < 0xFFFF));//等待HSE时钟准备就绪
if(HSEStatus != RESET)//成功开启HSE
{
CLK_SWCR |= 1<<1;//使能时钟切换机制
CLK_SWR = 0xB4; //HSE最为主时钟
while((CLK_SWCR & 0x01) != RESET);//等待时钟切换完成
CLK_SWCR &= ~(1<<0);//清除芒标志
CLK_SWCR &= ~(1<<1);//清除切换标志
CLK_SWCR &= ~(1<<3);//清除就绪标志
CLK_CSSR |= 1<<0;//开启时钟安全系统
CLK_CSSR |= 1<<2;//开启监测中断
}
else
{
}
CLK_CKDIVR &= ~(7<<0);
CLK_CKDIVR |= 0x00;//设置CPU分频
return 0;
}
/**********************************************************
函数: void CLK_Handler(void);
作用: 时钟安全系统中断函数,一但时钟失效,立马复位
入口参数:无
返回参数:无
***********************************************************/
#pragma vector = CLK_CSS_vector
__interrupt void CLK_Handler(void)
{
if((CLK_CSSR & 0x08) != 0)//检测到失效
{
CLK_CSSR &= ~(1<<3);//清除失效标志
CLK_CKDIVR = 0x00;//修改预分频值 /*可以屏蔽掉这两行行试试,就部分修改预分频了*/
}
}
/***************************End***************************/
试了没效果呢,始终是HSI/8的频率在工作, 有人搞过吗,是不是我哪里步骤不对,
#pragma vector = CLK_CSS_vector
__interrupt void CLK_Handler(void)
{
if((CLK_CSSR & 0x08) != 0)//检测到失效
{
CLK_CSSR &= ~(1<<3);//清除失效标志
CLK_CKDIVR = 0x00;//修改预分频值 /*可以屏蔽掉这两行行试试,就部分修改预分频了*/
}
}
/***************************End***************************/
这部分用你这个程序就可以了,
用我自己的
CLK_CSSR_CSSD = 0;
CLK_CKDIVR = 0X00; 就是不行,晕了,
直接清标志位的写法不行吗?
一周热门 更多>