晶振对stm32串口数据传输的影响是什么

本篇内容介绍了“晶振对stm32串口数据传输的影响是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联公司专业为企业提供涪陵网站建设、涪陵做网站、涪陵网站设计、涪陵网站制作等企业网站建设、网页设计与制作、涪陵企业网站模板建站服务,10余年涪陵做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

一般stm32 外部晶振是8M的,但是如果你要改外部晶振的话,需要把配置文件也改下

晶振对stm32串口数据传输的影响是什么

如图位置,把8000000改为 16000000;

图3  系统时钟配置

   修改SetSysClockTo72(void)文件如下:

static void SetSysClockTo72(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus =0;

    
    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);


  do
  {
    HSEStatus =RCC->CR & RCC_CR_HSERDY;
   StartUpCounter++; 
  } while((HSEStatus == 0) &&(StartUpCounter != HSE_STARTUP_TIMEOUT));
  if ((RCC->CR & RCC_CR_HSERDY) !=RESET)
  {
    HSEStatus =(uint32_t)0x01;
  }
  else
  {
    HSEStatus =(uint32_t)0x00;
  } 
  if (HSEStatus == (uint32_t)0x01)
  {
   
   FLASH->ACR |= FLASH_ACR_PRFTBE;
   
   FLASH->ACR &=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
   FLASH->ACR |=(uint32_t)FLASH_ACR_LATENCY_2;   

   
    RCC->CFGR|= (uint32_t)RCC_CFGR_HPRE_DIV1;
     
   
    RCC->CFGR|= (uint32_t)RCC_CFGR_PPRE2_DIV1;
   
   
    RCC->CFGR|= (uint32_t)RCC_CFGR_PPRE1_DIV2;
#ifdef STM32F10X_CL
   
   
   
       
   RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 |RCC_CFGR2_PLL2MUL |
                             RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
   RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 |RCC_CFGR2_PLL2MUL8 |
                            RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);

   
    RCC->CR|= RCC_CR_PLL2ON;
   
   while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }
   
       RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC| RCC_CFGR_PLLMULL);
    RCC->CFGR|= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1|
                           RCC_CFGR_PLLMULL9);
#else   
   
    //16MHZ2分频如下改动,添加RCC_CFGR_PLLXTPRE_HSE_Div2
    RCC->CFGR&= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE|
                                       RCC_CFGR_PLLXTPRE_HSE_Div2|RCC_CFGR_PLLMULL));
    RCC->CFGR|= (uint32_t)(RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLSRC_HSE |RCC_CFGR_PLLMULL9);
#endif
   
    RCC->CR|= RCC_CR_PLLON;
   
   while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
   
   
    RCC->CFGR&= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;   
   
    while((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) !=(uint32_t)0x08)
    {
    }
  }
  else
  {
  }
}
          
如果用的keil  还要改下target里的 xtal 为16Mhz

以上只是针对于无源晶振,然而对于有源晶振,接法和无源晶振是不一样的,有源晶振由外部发送脉冲信号,通过oscin输入,oscout悬空,此时,在启动文件system_stm32f0xx.c中,在SetSysClock函数中,加上

/*Disable HSI*/

RCC->CR |= ((uint32_t)RCC_CR_HSEBYP);

/* Enable HSE */    

  RCC->CR |= ((uint32_t)RCC_CR_HSEON);

顺序一定不要搞错,就可以了

HSEBYP是把 HSI旁路,手册上说的被旁路,不是外部晶振失能,而是内部晶振失能,所以HSEBYP置1表示失能HSE,失能HSI

有源晶振一般比无源晶振贵,优点是输出波形完美,不受寄生电容干扰,缺点是输出频率不可调,无源晶振一般比芯片内部晶振效果好十倍,由内部脉冲触发

“晶振对stm32串口数据传输的影响是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享文章:晶振对stm32串口数据传输的影响是什么
本文来源:http://azwzsj.com/article/pgcsjp.html