#define RCC_CR ((volatile unsigned long*)(0x40021000))
#define RCC_CFGR ((volatile unsigned long*)(0x40021004))
#define RCC_APB2ENR ((volatile unsigned long*)(0x40021018))
//#define AliasAddr ((volatile unsigned long*)(0x42000000+0x21000*32+24*4))
#define GPIOF_CR ((volatile unsigned long*)(0x40011c00))
#define GPIOF_ODR ((volatile unsigned long*)(0x40011c0c))
void RCC_Config(void);
void LED(void);
int main()
{
RCC_Config();
LED();
while(1);
}
void RCC_Config(void)
{
*RCC_CR = *RCC_CR & 0xFFFEFFFF; //HSE 复位一下
*RCC_CR = *RCC_CR & 0xFFFBFFFF; //HSE 旁路关
*RCC_CR = *RCC_CR | 0x00010000; //RCC_CR,configure HSE;
while((*RCC_CR)&0x20000==0); //HSE ready;
*RCC_CFGR = (*RCC_CFGR & 0xffffff0f);//Clear HPRE[3:0] bits value
*RCC_CFGR = (*RCC_CFGR | 0x00000000);//AHB预分频,0xxx:SYSCLK不分频
*RCC_CFGR = (*RCC_CFGR & 0xFFFFF8FF);//Clear PPRE1[2:0] bits
*RCC_CFGR = (*RCC_CFGR | 0x400); //低速APB预分频,100:HCLK 2分频;
*RCC_CFGR = (*RCC_CFGR & 0xFFFFC7FF);//Clear PPRE2[2:0] bits
*RCC_CFGR = (*RCC_CFGR | 0x00);//高速APB预分频,0xx:HCLK不分频
*RCC_CFGR = (*RCC_CFGR & 0xFFC0FFFF);//Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits
*RCC_CFGR =(*RCC_CFGR | 0x001C0000); //PLLMUL=9,PLLSRC=HSE;
*RCC_CFGR =(*RCC_CFGR | 0x00010000 );
//*AliasAddr = 1; //PLL CLK enable;
*RCC_CR = *RCC_CR | 0x01000000;
while(!((*RCC_CR)&0x02000000)); //Wait for PLL ready;
*RCC_CFGR = *RCC_CFGR | 0x02; //SYSCLK=PLL;
while(((*RCC_CFGR)&0x0c)!= 0x08); //Wait for SYSCLK ready;
*RCC_APB2ENR = *RCC_APB2ENR | 0x80; //GPIOF CLCK ready;
}
void LED(void)
{
*GPIOF_CR = *GPIOF_CR | 0x73000000; //输出模式,最大速度50MHz,通用推挽输出模式;
//*GPIOF_ODR = *GPIOF_ODR | 0xffffffbf;//PF6=0,LED ON;
}
调试时,可以看到程序老是从主flash跑飞,如下:
运行到这一句时,就跳到下面不动了。
我只用了自带的启动代码,别的没用。
也看了好多例子,感觉没什么错,结果老是错。所以劳烦各位前辈看看。谢谢指点。
PS:调试可以看到上面的语句运行都正常。
在PLL打开之前没有预缓存延迟。
还有一点是,手册有这么一句话:
我的AHB预分频系数是“1”,所以没开,但是还是出错了。
期待高手指点!谢谢。
|