初级会员

- 积分
- 111
- 金钱
- 111
- 注册时间
- 2013-12-6
- 在线时间
- 5 小时
|
5金钱
//系统时钟初始化函数
//pll:选择的倍频数,从2开始,最大值为16
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00000001; //内部高速时钟使能HSION
while(!(RCC->CR>>1));//等待内部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2; //抵消2个单位(因为是从2开始的,设置0就是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;
}
}
int main(void)
{
Stm32_Clock_Init(8); //系统时钟设置
uart_init(64,115200); //串口初始化为115200
delay_init(64); //延时初始化
send_init(); //初始化与LED连接的硬件接口
TIM3_Int_Init(4999,6400);//10Khz的计数频率,计数5K次为500ms
while(1)
{
MCU2=!MCU2;
delay_ms(200);
}
}
对照中文手册 使能内部时钟 主程序改为8倍频 系统工作不正常。请问是哪设置不对????
|
最佳答案
查看完整内容[请看2#楼]
PLL的时钟来源选错了 RCC->CFGR&=~(1<<16); //PLLSRC = HSI/2 = 4MHz
你选的是HSE
|