晶振损坏情况下的芯片运行情况

电子说

1.3w人已加入

描述

 

 大家对晶振在电路中的作用肯定很了解,晶振作为电路中的心脏,具有极其重要的作用,在各种电子产品设备中广泛应用,如果出现不振就会导致整个设备不能正常工作。但是,类似STM32这种MCU是有内部晶振的,默认使用外部晶振时,若外部晶振损坏,会出现什么情况?芯片自动切换到内部晶振程序继续运行还是单片机死机?今天就来验证一下晶振损坏情况下的芯片运行情况,下面做一下实验测试一下。    

01找一块开发板

 

如下图中是STM32的一个最小系统板,在本公众号下回复【STM32】可以索取关于STM32的全部视频和例程资料。

晶振

今天就用这个最小系统板进行测试验证。  

 02修改晶振

 为了方便后面的操作,将开发板的晶振焊接的引脚裸露在外。  

晶振

 在这里要特别说明一下:现在这样焊接是为了方便后面的验证,在实际产品中,一定要保证晶振焊接可靠、稳定,否则容易影响产品的稳定性  

 03编写程序

 编写LED闪烁的程序,用LED是否闪烁以及闪烁的频率来证明芯片工作的状态。时钟初始化程序如下:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
void SystemInit (void){  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */  /* Set HSION bit */  RCC->CR |= (uint32_t)0x00000001;
  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */#ifndef STM32F10X_CL  RCC->CFGR &= (uint32_t)0xF8FF0000;#else  RCC->CFGR &= (uint32_t)0xF0FF0000;#endif /* STM32F10X_CL */       /* Reset HSEON, CSSON and PLLON bits */  RCC->CR &= (uint32_t)0xFEF6FFFF;
  /* Reset HSEBYP bit */  RCC->CR &= (uint32_t)0xFFFBFFFF;
  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */  RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifndef STM32F10X_CL  /* Disable all interrupts and clear pending bits  */  RCC->CIR = 0x009F0000;#else  /* Reset PLL2ON and PLL3ON bits */  RCC->CR &= (uint32_t)0xEBFFFFFF;
  /* Disable all interrupts and clear pending bits  */  RCC->CIR = 0x00FF0000;
  /* Reset CFGR2 register */  RCC->CFGR2 = 0x00000000;#endif /* STM32F10X_CL */      /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */  /* Configure the Flash Latency cycles and enable prefetch buffer */  SetSysClock();}
引脚初始化程序如下:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);    GPIO_InitStructure.GPIO_Pin = PB8_LOAD_PIN;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;    GPIO_Init(GPIOB, &GPIO_InitStructure);  
    PB8_LOAD_1; 
LED闪烁的程序如下:
  •  
  •  
  •  
  •  
PB8_LOAD_1;                 //PB8输出高电平DelayMs(100);               //延时PB8_LOAD_0;                 //PB8输出低电平DelayMs(100);               //延时
 04将晶振引脚剪断

 

详情可参考下面的视频过程。      我们发现,剪断晶振的引脚后,LED的闪烁频率发生了改变,证明晶振的引脚损坏时,单片机程序仍然在运行。    

特殊说明:

   1、本实验仅仅验证了单片机程序是否运行,并不能代表晶振掉了后,我们设计的产品的功能仍然正常;由于系统时钟发生改变,依赖于时钟的功能模块肯定工作不正常,比如串口通信、周期定时的任务等;

 

2、现在验证测试的程序可能与您产品中的程序有所差异。  3、现在只是验证了晶振掉了的情况(晶振掉了后,单片机程序仍然在运行),但是若晶振出现引脚对地短路、2个引脚之间短路、晶振对电源短路等不同情况,结果可能不同。  

  审核编辑:汤梓红
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分