历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2018年08月21日 | STM32使用外部16MHZ晶振修改程序点

2018-08-21 来源: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欢畅的运行


推荐阅读

史海拾趣

Eureka Microelectronics Inc公司的发展小趣事

为了支持公司的持续发展和业务扩张,Eureka成功完成了多轮融资。这些融资不仅为公司提供了充足的资金支持,也吸引了众多投资者的关注。借助这些资金,Eureka加大了在研发、生产、销售等方面的投入,进一步提升了公司的竞争力和市场地位。同时,公司也积极开展战略合作,与上下游企业建立了紧密的合作关系,共同推动产业链的发展。

常忆科技(CHINGIS)公司的发展小趣事

展望未来,常忆科技将继续坚持创新驱动的发展战略。公司将不断加大在研发和创新方面的投入,推动产品技术的持续升级和迭代。同时,常忆科技还将积极拓展新的应用领域和市场空间,以满足更多客户的需求。

为了实现可持续发展,常忆科技还将注重环境保护和社会责任。公司将致力于推广绿色环保的生产方式和产品应用,为社会的可持续发展做出贡献。在未来的发展中,常忆科技有望凭借其卓越的技术实力和创新精神,继续在电子行业中书写新的辉煌篇章。

AiT Semiconductor Inc公司的发展小趣事

AiT公司的创立源自一群对半导体技术充满热情的工程师。他们看到了半导体行业巨大的市场潜力和技术挑战,决心成立一家公司,专注于半导体产品的研发和生产。在创立初期,公司面临资金短缺、市场竞争激烈等诸多困难,但凭借着对技术的执着追求和不懈努力,他们成功开发出了一系列高性能、高品质的半导体产品,逐渐在市场中站稳脚跟。

Chemi-Con公司的发展小趣事

Chemi-Con公司的历史可以追溯到XXXX年,当时铝电解电容器在日本首次成功实现产品化。这不仅是电子行业的一个里程碑,也是Chemi-Con公司传奇故事的起点。公司创始人凭借对技术的深刻理解和市场的前瞻性,敏锐地捕捉到了铝电解电容器的巨大潜力,并决定将其作为公司的主营业务。在创业初期,Chemi-Con面临着资金、技术和市场等多方面的挑战,但创始人凭借着坚定的信念和不懈的努力,带领公司逐步攻克难关,奠定了在铝电解电容器领域的领先地位。

High Voltage Power Solutions Inc公司的发展小趣事

在电子行业的发展过程中,Chemi-Con公司意识到单一产品线的局限性,并开始积极探索多元化发展的道路。公司不仅拓展了电容器产品的应用领域,还涉足了光电子机械等新兴产业。此外,Chemi-Con还积极寻求与其他企业的合作,通过技术共享、资源共享等方式实现共赢。这种开放、合作的姿态使得Chemi-Con在行业中树立了良好的形象,也为公司的长远发展奠定了坚实的基础。

FOCI Fiber Optic Communications Inc公司的发展小趣事

随着电子行业的快速发展,Chemi-Con公司不断加大对研发的投入,致力于技术创新和产品升级。公司研发团队在铝电解电容器的基础上,不断推出性能更优、体积更小、寿命更长的产品,满足了市场对于高效、可靠电容器的迫切需求。此外,Chemi-Con还积极拓展产品线,涉足了多层陶瓷电容器、薄膜电容器等多个领域,为客户提供更加丰富的选择。

问答坊 | AI 解惑

用VHDL语言设计一般的与非门和集电极开路的与非门

在组合逻辑中,有时候需要使输出一脚的驱动能力加强,就要用集电极开路的输出引脚。 但是两者差别不大,只是在调用时,从不同的库中调用。 集电极开路的输入与非门电路调用STD库的std_ttloc包集合,二一般的输入与非门电路则调用std库的std-tll包 ...…

查看全部问答>

使用winio方式动态加载ctrl2cap.sys,无法createFile

各位高人我现在学习键盘过滤驱动,用ctrl2cap改的,可是我却不能动态加载,我使用winio的形式做,发现能启动服务,但是在services.msc中找不到(我用同样方式做的一个应用程序的服务,就可以找到). 但是却不能打开hanlde. HANDLE hDriver = CreateF ...…

查看全部问答>

EVB的打印问题,100分求助,在线急等~~

有一组数据,存放在文本文件里面,格式是: \"时间1\" \"数据1\" \"时间2\" \"数据2\"   .   .   . \"时间N\" \"数据N\" 要求打印相关数据的曲线图~~ 想了半天头都想痛了~给源代码的再加100分…

查看全部问答>

关于shell里面 d 查看内存数据命令的详细用法 ---在线等

关于shell里面 d 查看内存数据命令的详细用法,没有在网上查到,很困扰 只知道简单的使用 d 0x1231231这个命令,但是显示多长,何种格式显示如何设置就不清楚了…

查看全部问答>

verify failded?

哪位大哥能帮我看看这是出了什么问题啊,总是VERIFY FAILDE...        …

查看全部问答>

上海新成立物联网公司招募创业团队!!!-待遇:工资+奖金+上市期权

上海新成立物联网公司定位为物联网行业解决方案供应商,为行业客户提供物联网应用全面解决方案!美国上市公司投资、注册资金1000万,目标2年内上市待遇:工资+项目奖金+上市前分配期权现招聘创业团队,.NET方面开发人员,RF工程师、硬件工程师、mcu ...…

查看全部问答>

好心人帮下忙做下毕业设计!

简易声谱仪的固件设计 规定用神州III号的STM32开发板。…

查看全部问答>

求高手

本帖最后由 paulhyde 于 2014-9-15 04:27 编辑 有没有人平时比较空的,能帮助我解决一些问题啊,我在单片机方面不是很专业,需要一个师傅带着,我可以拜他为师,还请师傅不要嫌弃我,回一下我的帖吧!跪谢!!我的qq:335947998 加我的时候最 ...…

查看全部问答>

关于智能小车循迹问题

各位大哥大姐,我在网上买了一个 4路的循迹模块。  程序是一个学长给我们写的。  4路循迹不跟单片机连接起来的时候,每一路指示灯的灭亮显示的正常。  但是只要跟单片机控制端口连接一来 。  指示灯的亮灭 ...…

查看全部问答>

用makefsfile如何一次转换多个网页文件

请问大虾,就像例程中那样,如何将fs文件夹中的几个网页文件一次转换为H文件呢?…

查看全部问答>