历史上的今天
返回首页

历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2018年09月01日 | STM32使用外部16MHZ晶振总结

2018-09-01 来源:eefocus

做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。

    

图1  3225封装晶振

   STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产品研发的时候,使用到3225的8MHZ晶振的话,成本是个不小的挑战。笔者现针对这个问题,提出使用16MHZ晶振代替的方法。

图2  STM32时钟树状图

   由上图可以看出,如果想兼容8MHZ晶振,必须在时钟倍频前2分频。程序设计如下,在system_stm32f10x.c文件下修改系统时钟配置,配置为72MHZ。


图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
  {
  }
}

   到此,很多读者认为设计已经完毕,这个系统也如愿地倍频至72MHZ了,但忽略了一个小细节。我们需要修改stm32f10x.h文件里面的外部时钟宏定义,有一些外设的时钟是直接使用外部时钟配置的,比如串口等。
          
#if !defined  HSE_VALUE
#ifdefSTM32F10X_CL  
  #defineHSE_VALUE   ((uint32_t)25000000)
#else
  #defineHSE_VALUE   ((uint32_t)16000000)
#endif
#endif

   至此,程序修改完毕。整个系统围绕8MHZ倍频至72MHZ欢畅的运行


推荐阅读

史海拾趣

全智景(Allvision)公司的发展小趣事

在追求经济效益的同时,全智景公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,推出了多款绿色环保的产品。同时,全智景公司还积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。这些举措不仅彰显了公司的社会责任感,也为公司的可持续发展奠定了坚实的基础。

通过以上五个故事,我们可以看到全智景公司在电子行业里的发展历程。从技术突破引领市场,到跨界合作拓展应用;从持续创新引领潮流,到全球化战略助力发展;再到履行社会责任与可持续发展。全智景公司以其坚定的信念和不懈的努力,在电子行业中取得了显著的成就。

Circuit Assembly公司的发展小趣事

全智景公司自成立以来,一直致力于电子视觉技术的研发。早期,公司面临激烈的市场竞争和技术瓶颈,但全智景团队凭借坚韧不拔的精神,成功研发出了一款具有划时代意义的高清摄像头芯片。这款芯片以其出色的图像质量和稳定性,迅速获得了市场的认可,并推动了整个电子视觉行业的进步。这一技术突破不仅让全智景公司在市场上站稳了脚跟,也为公司后续的发展奠定了坚实的基础。

Essentra Components公司的发展小趣事

Essentra Components公司自创立之初,就深知技术创新在电子行业的重要性。公司通过不断投入研发资源,成功开发出了一系列具有创新性的塑料注塑成型、乙烯基浸塑成型技术,这些技术不仅提高了产品的性能和质量,还大大降低了生产成本。随着技术的不断升级和完善,Essentra Components的产品逐渐在市场上占据了重要地位,公司也因此迅速发展壮大。

南京国博公司的发展小趣事

近年来,国博电子凭借其卓越的技术实力和市场表现,荣获了多项荣誉和奖项。包括“2023-2024年度射频芯片市场最佳产品奖”、“2022年度联合创新体最高绩效奖励支持”等。这些荣誉不仅是对公司技术实力和市场地位的认可,也是对公司未来发展潜力的肯定。国博电子将继续秉持“用‘芯’创造未来”的企业文化,致力于成为全球射频电子领域的行业领导者。

维峰电子(WCON)公司的发展小趣事

质量是企业的生命线。维峰电子始终将质量管理作为公司发展的重中之重。公司建立了完善的质量管理体系,从原材料采购、生产过程到产品检验等各个环节都进行严格把控。同时,公司还引入了先进的检测设备和技术,确保产品的质量和性能达到最高标准。这些措施的实施不仅提升了产品的竞争力,也赢得了客户的信任和好评。

Chip Quik公司的发展小趣事

在不断发展壮大的过程中,Chip Quik公司始终注重品牌建设和持续创新。公司加大了对研发部门的投入,不断推出新技术和新产品,以满足市场的不断变化。同时,公司还通过加强品牌宣传和推广,提高了品牌知名度和美誉度,为公司的长远发展奠定了坚实的基础。

这些故事虽然基于假设和一般性的行业趋势,但它们可以反映出一家电子行业中类似公司可能经历的发展路径和挑战。希望这些故事能够为您了解Chip Quik公司或其他电子行业公司的发展提供一定的参考。

问答坊 | AI 解惑

已知USB的VID和PID,如何得到它的盘符

可能是属于老问题,搜到一些资料,但是还是不是很了解,有同学可以详细介绍一下吗? 如果有代码最好,谢谢。 …

查看全部问答>

需要一个北京地区的兼职linux编程人员

需要一个北京地区的兼职linux编程人员,要求可以独立完成下列开发, 不符合条件请勿打扰,以免浪费你我时间 要求熟悉MINIGUI,具体编程内容: 从COM口读入数据,在14英寸以上显示器上显示如下图形界面: 屏幕正中间一个圆形,圆形里面显示从串 ...…

查看全部问答>

LED照明发展中五个亟待解决的问题

  LED照明发展中五个亟待解决的问题 ——色温范围、照明标准、亮度范围、照明总均匀度和眩光控制   最合适的LED照明灯具色温范围,应该是接近太阳自然白光的色温范围才是最科学的选择;较低照射强度的自然白光,就可以达到其他非自然 ...…

查看全部问答>

请问LM3S 挂5V I2C器件可以正常运行么?

请问LM3S 挂5V I2C器件可以正常运行么?SDA,SCL上拉也为5V,比如FM24C02之类。…

查看全部问答>

C2000除了电机控制和电源外,还有什么有前锦有量的应用啊?

C2000除了电机控制和电源外,还有什么有前锦有量的应用啊?…

查看全部问答>

cc2430重连的问题

我用的是CC2430模块,用了一个网关,一个路由,4个终端节点组网成功过后,重启网关或路由设备,怎样改写程序,才能让终端设备自动重新连接到网关呢?我是过NV_RESTORE这个编译选项,不过貌似没有什么用。用没有人已经解决这个问题,给一个指点。…

查看全部问答>

··请教PCB板子外形和定位孔设置的问题,谢谢··

    我用得是AD6.9,在做板子的时候,需要做这么一个槽,   用快捷方式T-V-T,设置之后,用3D看没问题,     可是做GEBER文件的时候,这里没显示要钻孔,只显示是禁止布线层, 还用这种方式做了几个定位孔 ...…

查看全部问答>

2013年MSP430版块建设规划-by wstt

1、持续的DIY和原创激励在MSP430版块上建立EEworld MSP430月度最佳项目评选活动,该活动每月评选一次,选出一个月中最佳的DIY项目或者原创项目。基本的活动流程如下:每个月的28日为该月度参选项目的参评截止日期。凡是在上个月28日之后至本月28日 ...…

查看全部问答>

我这个简单程序发送发任何值,收到的都是00

这是代码: #include __CONFIG( FCMEN_OFF & IESO_OFF & CLKOUTEN_OFF & BOREN_OFF & CPD_OFF & CP_OFF & MCLRE_ON & PWRTE_OFF & WDTE_ON & FOSC_INTOSC); //__CONFIG( FCMEN_OFF & IESO_OFF & CLKOUTEN_OFF & BOREN_ON & CPD_OFF & CP_OFF & M ...…

查看全部问答>

51单片机定时与中断问题

51单片机在串口发送数据的时候不能进入定时中断怎么办,我现在需要在给串口发送数据时开始定时,到了时间后去执行相应的任务…

查看全部问答>