回复【17楼】 heixinhai :
---------------------------------
u8 Sys_Clock_Set(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
u16 retry=0;
u8 status=0;
RCC->CR|=1<<16; //HSE 开启
while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//等待HSE RDY
if(retry==0X1FFF)status=1; //HSE无法就绪
else
{
RCC->APB1ENR|=1<<28; //电源接口时钟使能
 WR->CR|=3<<14; //高性能模式,时钟可到168Mhz
RCC->CFGR|=(0x00000000)|(0x00008000)|(0x00001400);
RCC->CR&=~(1<<24); //关闭主PLL
RCC->LLCFGR=pllm|(plln<<6)|(((pllp>>1)-1)<<16)|(pllq<<24)|(1<<22);//配置主PLL,PLL时钟源来自HSE
RCC->CR|=1<<24; //打开主PLL
while((RCC->CR&(1<<25))==0);//等待PLL准备好
PWR->CR |= 0X00010000;
while((PWR->CSR & 0x00010000) == 0);
PWR->CR |= 0x00020000;
while((PWR->CSR & 0x00020000) == 0);
FLASH->ACR|=1<<8; //指令预取使能.
FLASH->ACR|=1<<9; //指令cache使能.
FLASH->ACR|=1<<10; //数据cache使能.
FLASH->ACR|=5<<0; //5个CPU等待周期.
RCC->CFGR&=~(3<<0); //清零
RCC->CFGR|=2<<0; //选择主PLL作为系统时钟
while((RCC->CFGR&(3<<2))!=(2<<2));//等待主PLL作为系统时钟成功.
}
return status;
}
仔细对比了下,429的初始化确实和407不一样,建议你还是用库来初始化,我修改了下,你试试吧。函数参数还是我给你的。另外,板子应该有例程吧,你修改下例程看看,原子的是直接操作寄存器的,没研究过寄存器的话直接套用肯定是不行的,尤其是系统频率这块。
|