void Stm32_Clock_HSE_72M_Init()
{
(*((unsigned long *)(0x40021000)))|=0x00010000; //HSE ON
while(!*((unsigned long *)(0x40021000))&((unsigned long)1<<17)); //等待HSE就绪
(*((unsigned long *)(0x40021000+0x04)))|=0x001d0080; //PLLXTPRE=0,PLLSRC=1,PLLMUL=0111,HPRE=1000
(*((unsigned long *)(0x40021000)))|=0x01000000; //使能PLL
while(!*((unsigned long *)(0x40021000))>>25); //等待PLL锁定
(*((unsigned long *)(0x40021000+0x04)))|=0x00000002; //PLL作为系统时钟,SW=10
}
void delay()
{
unsigned long i=1000000;
while(i--);
}
int main(void)
{
Stm32_Clock_HSE_72M_Init();
*((unsigned long *)(0x40021000+0x18))=1<<3; //APB2 GPIOB使能
*((unsigned long *)(0x40010c00))=0x00100000; //PB5 LED 0
while(1)
{
*((unsigned long *)(0x40010c00+0x0c))=0x0000; //PB5 0
delay();
*((unsigned long *)(0x40010c00+0x0c))=0x0020; //PB5 1
delay();
}
}
这是我通过操作寄存器来配置外部8m时钟经过PLL倍频后作为系统时钟,同学通过修改分频倍频系数发现,超过4X13(HSE二分频后13倍频)以后程序就跑飞了,有没有人可以解答一下?
我看了战舰带的库函数程序里面,好像对FLASH进行了操作,是不是因为初始化时钟的时候闪存没有跟上导致程序跑飞了?
|