这里我翻车过,一度认为是晶振坏了,可是仔细想想不太对,最终才改过来,现在我就来说说自己是如何犯错并且发现问题的。
配置流程
1.看图
图片模糊一点没事,反正你都得去看中文参考手册高清无码大图。具体看图方法文字倒是不好描述,建议到去搜索视频讲解一看,然后脑子晕晕的再来看文字描述就会懂了。
2.看看参考手册上对外设的描述
你可能在看各种教程时就已经或多或少的知道了外设的描述(多少取决于视频老师讲的和理解的),但是,还是建议看一下参考手册里的描述。
3.认识寄存器
见中文参考手册
就这些了,看看理解能力不太差的都能懂,啥位置1代表啥的,都写得超级详细的了
4.写写代码测试
不试一下永远不知道代码是错的。
见下面我亲手撸的代码:
void System_clock(void)
{
volatile uint32_t StartUpCount = 0,HSEStatus = 0;//时间向上计数 HSE状态标志
RCC->CR |=(0x01<<16);//使能HSE
//等待HSE稳定
do{
HSEStatus=RCC->CR & (0x01<<17);
StartUpCount++;
}while((HSEStatus==0) && (StartUpCount!=HSE_STARTUP_TIMEOUT));//HSE_STARTUP_TIMEOUT=0x0500
if(StartUpCount!=HSE_STARTUP_TIMEOUT)
{
HSEStatus=0x01;
}
else
{
HSEStatus=0x00;
}
//如果启动成功
if(HSEStatus==0x01)
{
//使能FLASH预存取缓存区(处理代码等待时间的设置)
FLASH->ACR |= (0x01<<4);
//配置时延位 配置高位低位可运行,配置低位高位会进入硬件错误,程序卡死
FLASH->ACR &=0x00;
FLASH->ACR |=(0x02<<0);
RCC->CFGR &=0;//位清零
RCC->CFGR |=(0x01<<16);//选择PLL时钟源
RCC->CFGR &=~(1<<17);//HSE不分频
RCC->CFGR |=(0x07<<18);//PLL锁相环倍频9
RCC->CR |&#