历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2018年08月19日 | STM32在外部32Mhz晶振下的时钟配置方法

2018-08-19 来源:eefocus

1. 硬件平台


本例程使用的是 STM32F302RDT6 芯片,其时钟配置方法在其它ST单片机中也类似。

2. 实验目的


使用外部 32Mhz 晶振配置系统时钟为 72Mhz。

3. 配置原理


根据STM32F302RD芯片的参考手册,可以查看该芯片的时钟树结构,这里我们配置系统时钟 SYSCLK 为72Mhz,所以这里只需要修改 PREDIV 的分频值为4分频,其它 PLL 倍频等配置和使用8Mhz外部晶振时配置相同。 

这里写图片描述

4. 修改配置

(1)打开工程里的 system_stm32f30x.c 文件,找到 SetSysClock() 函数,进行时钟配置修改。这里我们只需要将外部时钟四分频后得到8Mhz的时钟,所示我们只需要添加 RCC->CFGR2 |= (uint32_t)RCC_CFGR2_PREDIV1_DIV4;来实现时钟的分频。

static void SetSysClock(void)

{

  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;


/******************************************************************************/

/*            PLL (clocked by HSE) used as System clock source                */

/******************************************************************************/


  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------*/

  /* Enable HSE */

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


  /* Wait till HSE is ready and if Time out is reached exit */

  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)

  {

    /* Enable Prefetch Buffer and set Flash Latency */

    FLASH->ACR = FLASH_ACR_PRFTBE | (uint32_t)FLASH_ACR_LATENCY_1;


     /* HCLK = SYSCLK / 1 */

     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;


     /* PCLK2 = HCLK / 1 */

     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;


     /* PCLK1 = HCLK / 2 */

     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;


    /* PLL configuration */

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL9);


    /*!< PREDIV1 input clock divided by 4 */  

    RCC->CFGR2 |= (uint32_t)RCC_CFGR2_PREDIV1_DIV4;     // add. by zhixiaoxing


    /* Enable PLL */

    RCC->CR |= RCC_CR_PLLON;


    /* Wait till PLL is ready */

    while((RCC->CR & RCC_CR_PLLRDY) == 0)

    {

    }


    /* Select PLL as system clock source */

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;


    /* Wait till PLL is used as system clock source */

    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)

    {

    }

  }

  else

  { /* If HSE fails to start-up, the application will have wrong clock

         configuration. User can add here some code to deal with this error */

  }

}


(2)全局搜索 HSE_VALUE 空定义,在 stm32f30x.h 文件中,这里我们将外部晶振时钟修改为 32000000 Hz


#if !defined  (HSE_VALUE) 

#define HSE_VALUE            ((uint32_t)32000000) /*!< Value of the External oscillator in Hz */

#endif /* HSE_VALUE */


5. 查看总线时钟


在对STM32时钟进行配置后,为了进一步验证配置的正确性,我们可以使用仿真来查看系统各总线的时钟频率。首先在主函数中添加如下代码:


int main(void)

{

    RCC_ClocksTypeDef get_rcc_clock;    

    RCC_GetClocksFreq(&get_rcc_clock); // 获取系统时钟配置

}

通过仿真可以查看各总线时钟的配置频率,如下图所示: 
这里写图片描述 
Note:注意一定要修改宏 #define HSE_VALUE ((uint32_t)32000000) /!< Value of the External oscillator in Hz /的值,因为时钟使用该宏定义进行计算。

5. 慎入此坑


在时钟配置时,需要注意的一些问题: 

(1)在时钟树任何一个倍频的环节都不能超频,即使后面分频系数较大,还是会导致时钟配置失败; 

(2)在配置外部晶振四分频时,发现了一个诡异的问题,CFGR2寄存器一定要在CFGR寄存器之后,否则会导致CGFR2寄存器的值与配置的不符,至今不明其诡异之处?


/* PLL configuration */

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL9);


/*!< PREDIV1 input clock divided by 4 */  

RCC->CFGR2 |= (uint32_t)RCC_CFGR2_PREDIV1_DIV4;     // add. by zhixiaoxing

推荐阅读

史海拾趣

Advanced Photonix公司的发展小趣事

Advanced Photonix一直注重研发团队的建设和培养。公司投入大量资源用于研发创新,鼓励团队成员不断探索新技术和新应用。在这种氛围下,公司的研发团队不断取得新的突破和进展。他们成功开发出了一系列具有自主知识产权的光电产品和解决方案,这些产品不仅提升了公司的技术实力,也为公司的长期发展奠定了坚实的基础。

华润华晶公司的发展小趣事

在光电技术不断发展的背景下,Advanced Photonix开始研发太赫兹传感器产品。这种传感器产品主要针对无损检测和质量控制市场,如行李和货物的安全检查等。经过长时间的努力,公司成功开发出了一系列高性能的太赫兹传感器,这些产品凭借其高可靠性和精确性,迅速赢得了市场的青睐。通过与各大航空公司和物流企业的合作,Advanced Photonix的太赫兹传感器产品在全球范围内得到了广泛应用,为公司的快速发展注入了新的动力。

长江连接器(CJT)公司的发展小趣事

作为一家有社会责任感的企业,长江连接器积极履行社会责任和推动可持续发展。公司注重环保和节能减排,采用环保材料和绿色生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,长江连接器还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

BUSSMANN公司的发展小趣事

随着全球经济的不断融合和发展,Bussmann公司也开始了其全球化战略。公司在全球范围内设立生产基地和研发中心,吸引和培养了大量的优秀人才。同时,公司也加大了对新技术和新产品的研发投入,不断推出具有竞争力的新产品。在全球市场上,Cooper Bussmann的电路保护方案广泛应用于各行各业,并获得了UL、CE、CSA等认证机构的认可。

这些故事展示了BUSSMANN公司在电子行业中的发展历程和取得的成就。从创业初期的艰辛与坚持,到汽车熔断器的崛起,再到库柏工业的收购与融合,以及芯片保险丝的创新突破和全球化战略的实施,BUSSMANN公司始终秉持着创新、质量和服务的理念,不断推动电子行业的发展和进步。

请注意,以上故事是基于BUSSMANN公司的历史和发展情况创作的,具体细节可能并不完全准确。如需了解更多关于BUSSMANN公司的信息,建议查阅相关的历史资料或访问其官方网站。

Hirosugi-Keiki公司的发展小趣事

1985年,库柏工业收购了Bussmann公司,成立了新的事业部——“Cooper Bussmann熔断器”。这一收购为Bussmann带来了更广阔的市场和更多的资源,同时也带来了新的挑战和机遇。在库柏工业的支持下,Bussmann开始了更加积极的创新和市场拓展,逐渐成为了全球熔断器行业的领导者。

Cedrat Technologies公司的发展小趣事

海洋勘探、水下通信和声学测量等领域对精准探测和数据采集有着极高的要求。Cedrat Technologies凭借其高性能压电陶瓷传感器技术,成功开发出用于声纳阵列系统的探测和成像设备。这些设备能够精确接收和分析水下环境中的声波,实现目标探测和数据采集。这一创新应用不仅拓展了电子行业的应用范围,也为海洋科学研究和工程实践提供了有力的技术支持。

问答坊 | AI 解惑

帮忙广州哪里买单片机和学习板比较便宜?

帮忙广州哪里买单片机和学习板比较便宜?…

查看全部问答>

关于如何获得 camera 的资料问题.

本人想知道 nokia 内置camera的生产厂商,比如 型号为nokia 3220的内置camera型号是什么?生产厂商,以及如何获得这些成熟产品零部件的详细datasheet,除了拆装,还有什么其它方法, 还有一款是索爱的外置camera,MCA_25,我在网上找它的camera型号及资 ...…

查看全部问答>

AVR单片机+CPLD体系在测频电路中的应用

通过制成的实物验证CPLD 与单片机接口设计完全正确。单片机和 CPLD 具有很强的互补性:在逻辑运算、智能控制方面,单片机具有不可替代的优越性;而在高速稳定等方面,CPLD 无疑是首选。因此,在目前的电子设计中,充分利用单片机+CPLD 结构将起到 ...…

查看全部问答>

如果用单片机上电配置FPGA~~

如果用单片机上电配置FPGA~~1,我用Quartus II 8.1 (32-Bit)编译生成.POF文件,接下来怎样转换为可用于单片机配置的文件A,用什么工具转换? 2,转换后的文件A是不是直接烧进单片机就可以? 本人初学FPGA,关于单片机怎样配置FPGA文件,在网上找 ...…

查看全部问答>

evc 几个对话框的小问题

我想请问。当我点击F1 返回上一个窗口。或者是销毁现在的窗口。去显示别的窗口。这样的代码应该怎么写啊。         if(pMsg->message   ==   WM_KEYDOWN)        {   &n ...…

查看全部问答>

关于文件过滤驱动的两个问题请教高人

1.关于驱动分层与过滤驱动的关系。我一直搞不清驱动分层与过滤驱动的分别,我现在自己的理解是:对于过滤驱动来说,它处理完截获的IRP后直接调用IoCallDriver发送给下一层设备,而对于分层驱动来说某一层的驱动完成IRP后使用IoCompleteRequest向IO ...…

查看全部问答>

小弟想学嵌入式,大牛能不能推荐几本书啊?(模拟电子,数电方面)

小弟想学嵌入式,大牛能不能推荐几本书啊? 小弟想学嵌入式,大牛能不能推荐几本书啊? 主要是做ARM方向的,也可能搞SOC 用VERILOG 硬件描述语言 模电,数电基础不是很好,(不是学这个专业的),大牛能不能推荐几本比较好的书啊? 另外还要看什么相 ...…

查看全部问答>

MSP430学习小记~~~~关于在IAR环境下使用MSP的中断。

前段时间一直用CCS,但是机器太差(06 年的笔记本),启动一次CCS的调试需要近2分钟。。。。。:funk:   于是换IAR5.10,速度确实提升不少。。。。。     今天使用IAR新建的工程调试MSP430的IO中断程序。整个中断程序如下: ...…

查看全部问答>

我心中的ST,不是做广告

ST微控制器,真的很不错,不仅仅是因为他的产品性能,还有它的后续服务;至今为止,可以说没有任何一家芯片厂商能做到像ST这样将芯片推广得如此深入人心。 完善的程序库,让客户在很短的时间内就能做产品开发; 丰富的应用案例,让不同的客 ...…

查看全部问答>

山寨IPHONE4 TFT屏破解

这个是我的山寨IPHONE4拆下来的彩屏照片,不知道什么型号和管脚顺序,有谁知道。…

查看全部问答>