首先我使用了原子哥的跑马灯程序是试了一下板子,刚开始发现程序卡死在了
void Stm32_Clock_Init(u8 PLL){
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
等待外部时钟就绪那句话中,然后我改了如下程序后跑马灯就能跑了,但跟原子哥比起来明显慢多了。感觉时钟有点问题
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while((RCC->CR>>17)&0X01);//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while((RCC->CR>>25)&0X01);//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
// while(temp!=0x02) //等待PLL作为系统时钟设置成功
// {
// temp=RCC->CFGR>>2;
// temp&=0x03;
// }
}
然后试了一下串口实验,自己写了个不断发送0XAA的程序,发现打印出来的是0X00,程序应该是没问题,应该是硬件问题,但是哪里出了问题求大神指导下,谢了
|