历史上的今天
返回首页

历史上的今天

今天是:2025年02月24日(星期一)

正在发生

2020年02月24日 | STM32F1一种相对简单的使用HSI配置系统时钟为64MHz的方法

2020-02-24 来源:eefocus

最近因为项目成本需要,必须使用片内晶振作为系统的时钟源,所以对正点原子的项目模板时钟配置做了一些修改。使时钟倍频至64MHz供系统使用。


有需要的同学可以参考一下,代码如下:


#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)

/* #define SYSCLK_FREQ_HSE    HSE_VALUE */

 #define SYSCLK_FREQ_24MHz  24000000

#else

/* #define SYSCLK_FREQ_HSE    HSE_VALUE */

/* #define SYSCLK_FREQ_24MHz  24000000 */ 

/* #define SYSCLK_FREQ_36MHz  36000000 */

/* #define SYSCLK_FREQ_48MHz  48000000 */

/* #define SYSCLK_FREQ_56MHz  56000000 */

/* #define SYSCLK_FREQ_72MHz  72000000 */

#endif

这里先将宏定义注释掉;


#ifdef SYSCLK_FREQ_HSE

  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */

#elif defined SYSCLK_FREQ_24MHz

  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */

#elif defined SYSCLK_FREQ_36MHz

  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */

#elif defined SYSCLK_FREQ_48MHz

  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */

#elif defined SYSCLK_FREQ_56MHz

  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */

#elif defined SYSCLK_FREQ_72MHz

  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */

#else /*!< HSI Selected as System Clock source */

  //uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */

  uint32_t SystemCoreClock         = 64000000;

#endif

接着将SystemCoreClock替换为64MHz;


/*使用内部RC振荡器,设置系统时钟为64MHz*/

static void Intn_RC_Init(void)

{

    RCC_DeInit();

    RCC_HSICmd(ENABLE); 

    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);

    RCC_HCLKConfig(RCC_SYSCLK_Div1);                         //设置AHB时钟(HCLK) = 系统时钟

    RCC_PCLK2Config(RCC_HCLK_Div1);                          //设置AHB2时钟 = HCLK

    RCC_PCLK1Config(RCC_HCLK_Div1);                          //设置AHB1时钟 = HCLK

    FLASH_SetLatency(FLASH_Latency_2);                       //设置FLASH存储器延时时钟周期数

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);    //设置PLL时钟源及倍频系数,频率为8/2*16=64MHz

    RCC_PLLCmd(ENABLE);

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while(RCC_GetSYSCLKSource() != 0x08);

}


这样就完成了系统时钟的配置!

推荐阅读

史海拾趣

ADTech公司的发展小趣事

随着QCL技术的成熟和市场需求的增长,AdTech公司开始积极拓展国际市场。通过与全球多家知名企业建立合作伙伴关系,公司成功将产品打入欧洲、亚洲等多个地区。同时,AdTech还积极参与国际技术交流与合作,不断提升自身的研发能力和产品质量。这些举措不仅增强了公司的品牌影响力,也为其带来了更多的商业机会。

Apacer公司的发展小趣事

随着科技的不断发展,Apacer宇瞻科技紧跟时代步伐,不断创新产品。2006年,公司推出了存储容量高达2GB的microSD卡,这款数码卡体积仅为普通SD卡的四分之一,但存储容量却与之不相上下。这一创新产品不仅满足了市场对高容量、小型化存储设备的需求,也进一步巩固了宇瞻科技在市场上的地位。

DMC Tools公司的发展小趣事

DMC Tools公司自创立之初,就注重技术创新。早期,公司研发团队针对电子行业对高精度工具的需求,成功开发出一系列具有自主知识产权的精密切割工具。这些工具不仅提高了生产效率,还降低了生产成本,迅速在市场上获得了认可。随着技术的不断进步,DMC Tools公司不断推出新产品,满足电子行业日益增长的需求,逐步在市场上树立了自己的品牌。

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

为了进一步提升公司的竞争力,全智景公司开始实施全球化战略。公司积极拓展海外市场,与多个国家和地区的企业建立了合作关系。通过引进国外先进的技术和管理经验,全智景公司不断提升自身的综合实力。同时,公司还积极参与国际展览和交流活动,提升了品牌知名度和影响力。这一全球化战略为全智景公司带来了更广阔的发展空间和市场机遇。

Chauvin Arnoux公司的发展小趣事

进入上世纪三十年代,Chauvin Arnoux开始涉足摄影领域。1936年,公司成功开发了第一台摄影用曝光表,为摄影师提供了更为精确的曝光测量工具。这一产品的推出,不仅满足了摄影行业对精确测量的需求,也进一步扩大了Chauvin Arnoux在测量仪器领域的市场份额。

Anaren公司的发展小趣事

在1905年,Chauvin Arnoux公司推出了带有曲柄电感的欧姆表,这一创新为电气测量领域带来了突破性的进展。随后,在1923年,公司进一步发展了这一技术,使得欧姆表的测量不再受到曲柄速度的影响,大大提高了测量的准确性和稳定性。这一系列的创新使得Chauvin Arnoux在电气测量领域确立了领先地位,为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

protel 2004安装与教程

这个我还没下,不过应该不错的,要的话去下下看,是个BT种子…

查看全部问答>

电子工程师创新设计必备宝典系列之FPGA开发全攻略免费下载

;P ;P !从本网站挪过来的资料! 为了响应小杰关于FPGA入门资料编写号召,特此发此贴,提供下载。 书还没看,感觉还不错,要求FPGA有点入门的。 关于学习FPGA,首先是自己有开发板,然后,就是自己给自己立一个项目练习。这样自己会编写代码。 ...…

查看全部问答>

AD采集的数据在12232上显示?

AD采集的数据在12232上显示 ,看看我的源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit led1=P2^3;  //led端口定义sbit led2=P2^4;sbit led3=P2^5;s ...…

查看全部问答>

ce6 eboot中内存读写测试!

在eboot中也不能使用物理地址直接访问内存。而使用的是虚拟地址。 我的6410版,RAM从128M升级到256M之后,系统一直没有搞定,在eboot中测试内存发现, 我映射了一段并不存在的内存到0x96000000,在eboot中写了一个循环读写,如下: for (i = 0; ...…

查看全部问答>

请问个win下PCI驱动开发的问题,我该补什么?

现在公司准备做Win下的PCI设备的驱动, 以前从未接触过这样的项目, 老大让我先收集资料, 请问我该补哪方面的钙? 就是那种很普通的数据采集卡,AD转换卡 硬件平台:普通PC. 软件平台:win xp,2k ps: 我只做过dos+工控机平台的板卡程序,,就是那种 ...…

查看全部问答>

注册表项[HKEY_LOCAL_MACHINE\SOFTWARE\Apps]下有许多子项,如何将它们一一读出?

在WinCE上, 注册表项 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Apps]下有许多子项, 如何将它们一一读出?…

查看全部问答>

高通6085CDMA2000上网卡研究

本工作室提供EVDO无线上网卡方案的开发,有意合作的请联系qq:764918953…

查看全部问答>

请教串口设备主动发送的数据如何获取。。我是新手

我第一次接触串口开发,很多不明白的地方。 现在手头有一设备,类似读卡器,是USB口的,装完驱动后会生成一对应的COM口。 刷卡的时候,这个外界设备会向连着的主机程序发送一串ASCII字符,我该如何获得这些数据呢? 我用超级终端链接这个COM口, ...…

查看全部问答>

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀?

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀? 三星6410(或BSP上)有这个东西吗? 如何设置它?…

查看全部问答>

STM8总是出现这幅画面

                                 …

查看全部问答>