今天在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变。程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢。
查找程序发现在系统时钟初始化时,RCC_HSEConfig(RCC_HSE_Bypass); 语句配置不对,此语句解释为HSE晶振被外部时钟旁路。指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了。
因为之前用的是有源晶振,接法如下图1:HSE配置如下:RCC_HSEConfig(RCC_HSE_Bypass);
图1
无源晶振,接法如下图1:HSE配置如下:RCC_HSEConfig(RCC_HSE_ON);