不知道为什么做了2块STM32F103VCT6的板子都是硬件仿真一上到56M以上就没反应了,IO口也显示没初始化了。但是低频就可以,软件仿真也正常,芯片也已经换过几个商家了,晶振用的是8M晶振加2个22p电容。
时钟程序如下:
RCC->CR.B.HSEON=1; //使能HSE外部时钟//
while(!(RCC->CR.B.HSERDY==1))
{;} //检测HSE时钟是否稳定/
RCC->CFGR.B.HPRE=0; //AHB预分频系数 0:不分频 32M
RCC->CFGR.B.PPRE2=0; //APB2预分频系数 0xx:HCLK不分频 100:2分频 101:4分频 110:8分频 111:16分频 32M
RCC->CFGR.B.PPRE1=4; //APB1预分频系数 0xx:HCLK不分频 100:2分频 101:4分频 110:8分频 111:16分频 16M
// RCC->CFGR.B.ADCPRE=0; //ADC预分频系数,32M/4=8M 00  CLK2 2分频 01:PCLK2 4分频 10:PCLK2 6分频 11:PCLK2 8分频
RCC->CFGR.B.PLLSRC=1; //选择HSE还是HSI/2作为PLL输入 1:HSE 0:HSI/2 8M
RCC->CFGR.B.PLLXTPRE=0; //HSE不分频作为PLL输入 0:不分频 1:2分频 8M
RCC->CFGR.B.PLLMUL=2; //PLL倍频倍数 0:2倍 1:3倍 2:4倍 3:5倍 4:6倍 5:7倍 6:8倍 7:9倍 8:10倍
// 9:11倍 10:12倍 11:13倍 12:14倍 13:15倍 14:16倍 32M
RCC->CR.B.PLLON=1; //使能PLL//
while(!(RCC->CR.B.PLLRDY==1))
{;} //检测PLL是否准备完毕//
RCC->CFGR.B.SW=2; //选择PLL输出作为系统时钟//
while(!(RCC->CFGR.B.SWS==2)) //检测PLL是否已经作为系统时钟//
{;}
RCC->APB2ENR.B.IOPAEN = 1; //IO口A时钟使能
RCC->APB2ENR.B.IOPBEN = 1; //IO口B时钟使能
RCC->APB2ENR.B.IOPCEN = 1; //IO口C时钟使能
RCC->APB2ENR.B.IOPDEN = 1; //IO口D时钟使能
请原子哥帮忙看看吧 |