历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2020年01月13日 | STM32-嵌入式学习笔记1-使用HSE和HSI配置时钟

2020-01-13 来源:eefocus

RCC主要作用:时钟


设置SYSCLK   设置AHB分频因子····配置好这些因子就能对时钟进行完整的配置。

时钟树如图:


系统时钟的选择是在启动时进行,复位时内部8MHz的RC振荡器被选为默认的CPU时钟,随后可以选择外部的、具失效监控的4~16MHz时钟;当检测到外部时钟失效时,它将被隔离,系统自动地切换到内部的RC振荡器,如果使能了中断,软件可以接收到相应的中断。同样,在需要时可以采取对PLL时钟完全的中断管理(如当一个间接使用的外部振荡器失效时)。


多个预分频器用于配置AHB的频率、高速APB(APB2)和低速APB(APB1)区域。AHB和APB的最高频率是36MHz。


 


编程要领:


1)开启HSE/HSI 等待HSE/HSI 稳定


2)设置AHB,APB2,APB1的预分频因子


3)设置PLL的时钟来源和PLL的倍频因子,各个频率主要在这里设置


4)开启PLL 等待PLL稳定


5)把PLLCK切换为系统时钟SYSCLK


6)读取时钟切换状态位,确保PLLCLK被选中为系统时钟


HSE配置系统时钟


#include "stm32f10x.h"

#include "bsp_rccclkconfig.h"

 

void HSE_SetSysClk(uint32_t RCC_PLLMul_x) //设置HSE为系统时钟

{

//把RCC外设初始化成复位状态

ErrorStatus HSEStatus;

//把RCC寄存器复位

RCC_DeInit();

//使能HSE,开启外部晶振

RCC_HSEConfig(RCC_HSE_ON);

//等待HSE启动

HSEStatus=RCC_WaitForHSEStartUp();

//当HSE稳定之后继续往下执行

if(HSEStatus== SUCCESS )

{

//使能预取指

FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

        //LATENCY:时延

//这些位表示SYSCLK(系统时钟)周期与闪存访问时间的比例

//000:零等待状态,当 0 < SYSCLK ≤ 24MHz

//001:一个等待状态,当 24MHz < SYSCLK ≤ 48MHz

//010:两个等待状态,当 48MHz < SYSCLK ≤ 72MHz

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div2);

 

//配置PLLCLK = HSE *RCC_PLLMul_x

RCC_PLLConfig( RCC_PLLSource_HSE_Div1,RCC_PLLMul_x);

//使能PLL

RCC_PLLCmd(ENABLE);

//等待PLL时钟稳定

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET )

{

//选择系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() !=0x08);

}

}

else

{

}

}

 

void MCO_GPIO_Config()

{

//定义一个GPIO_InitTypeDef类型的结构体

GPIO_InitTypeDef GPIO_InitStructure;

 

//开启LED相关GPIO的外设时钟

RCC_APB2PeriphClockCmd(  RCC_APB2Periph_GPIOA, ENABLE);

//选择控制的引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

 

//选择输出方式为推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   

 

//设置引脚速率为50MHZ

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

 

//调用库函数,初始化GPIO

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

使用HSI作为系统时钟


#include "stm32f10x.h"

#include "bsp_rccclkconfig.h"

 

void HSI_SetSysClk(uint32_t RCC_PLLMul_x) //设置HSE为系统时钟

{

//把RCC外设初始化成复位状态

__IO uint32_t HSIStatus=0;

//把RCC寄存器复位

RCC_DeInit();

//使能HSI,开启外部晶振

RCC_HSICmd(ENABLE);

//等待HSE启动

HSIStatus =RCC->CR & RCC_CR_HSIRDY;

//当HSE稳定之后继续往下执行

if(HSIStatus== SUCCESS )

{

//使能预取指

FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

//设置SYSCLK周期与flash的访问时间比例,这里为2

//设置成2的时候,SYSCLK低于48MHz也可以工作,设置成0或者1

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div2);

 

//配置PLLCLK = HSE *RCC_PLLMul_x

RCC_PLLConfig( RCC_PLLSource_HSI_Div2,RCC_PLLMul_x);

//使能PLL

RCC_PLLCmd(ENABLE);

//等待PLL时钟稳定

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET )

{

//选择系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() !=0x08);

}

}

else

{

}

}

 

void MCO_GPIO_Config()

{

//定义一个GPIO_InitTypeDef类型的结构体

GPIO_InitTypeDef GPIO_InitStructure;

 

//开启LED相关GPIO的外设时钟

RCC_APB2PeriphClockCmd(  RCC_APB2Periph_GPIOA, ENABLE);

//选择控制的引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

 

//选择输出方式为推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   

 

//设置引脚速率为50MHZ

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

 

//调用库函数,初始化GPIO

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

推荐阅读

史海拾趣

GSN Electronics公司的发展小趣事

GSN Electronics公司在电子行业中的发展可以追溯到多个方面,以下是五个关于其发展的故事,每个故事均基于事实进行描述:

1. 创立与初期发展

故事背景:GSN Electronics(深圳)有限公司成立于2012年11月27日,由GSN Electronics (Hong Kong) Limited全资控股,注册资本为100万元人民币,后增至当前规模。公司自成立以来,便专注于电子连接器和线束的生产经营,以及电子产品和电子零件的研发、批发、进出口及相关配套业务。初期,GSN Electronics凭借其专业技术和敏锐的市场洞察力,在深圳这一中国重要的电子产业聚集地迅速站稳脚跟。

发展亮点:公司通过不断优化产品结构和提升技术实力,逐步在电子行业中建立了自己的品牌影响力。

2. 技术创新与专利积累

故事背景:GSN Electronics深知技术创新是企业发展的核心驱动力。因此,公司不断加大研发投入,致力于新产品的开发和旧产品的升级换代。截至目前,公司已获得多项实用新型专利授权,如耐折弯的微型连接器、方便插入的电连接器、端口防水防尘结构的连接器等,这些专利技术的应用极大地提升了产品的竞争力和市场占有率。

发展亮点:技术创新和专利积累不仅巩固了GSN Electronics在电子连接器领域的领先地位,还为其拓展新市场、开发新客户提供了有力支持。

3. 市场拓展与国际认证

故事背景:随着公司实力的不断增强,GSN Electronics开始积极拓展国内外市场。公司通过参加各类行业展会、建立海外销售网络等方式,不断提升品牌知名度和市场占有率。同时,公司还积极申请并获得了多项国际认证,如IATF 16949和ISO 9001等,这些认证不仅证明了公司的产品质量和管理水平达到了国际标准,还为其进入高端市场提供了有力保障。

发展亮点:市场拓展和国际认证的成功实施,使GSN Electronics在电子行业中树立了良好的企业形象和品牌形象。

4. 团队建设与企业文化

故事背景:GSN Electronics深知人才是企业发展的根本。因此,公司一直注重团队建设和企业文化建设。公司拥有一支高素质的研发团队和销售团队,他们不仅具备丰富的专业知识和实践经验,还具备强烈的创新意识和团队精神。同时,公司还积极营造开放、包容、创新的企业文化氛围,鼓励员工勇于尝试、敢于创新。

Advanced Detector Corp公司的发展小趣事

Advanced Detector Corp公司成立于上世纪80年代,由一群热衷于探测器技术研发的科学家和工程师创立。在创立初期,ADC便专注于开发高精度、高灵敏度的探测器技术,以满足当时日益增长的电子测量需求。公司通过持续的技术创新,逐渐在探测器领域取得了突破性的进展,并成功推出了一系列具有竞争力的产品。

意瑞(COSEMITECH)公司的发展小趣事

随着技术的不断成熟和产品的不断优化,意瑞半导体的市场影响力逐渐扩大。其高集成度、高性能的芯片广泛应用于国内外主流OEM及全球知名Tier1厂商。在汽车电子领域,公司布局了动力总成、车身控制、电源管理和底盘安全等模块,其产品在多家主机厂成功导入并量产,性能超过了国外老牌芯片,成为该品类中本土鲜有的实现汽车市场大批量出货的产品。

Amveco Toroidal Power Products公司的发展小趣事

Amveco Toroidal Power Products公司成立于XXXX年,初始阶段主要专注于环形变压器的研发与生产。创始人凭借对环形变压器技术的深入了解和市场需求的敏锐洞察,带领团队克服了初创期的种种困难,成功开发出了具有高效能、低噪音特点的环形变压器产品,并赢得了客户的初步认可。随着市场口碑的逐渐积累,公司的业务规模开始稳步扩大。

Don Connex Electronics Co Ltd公司的发展小趣事

近年来,随着环保意识的提高,Don Connex Electronics积极响应绿色发展的号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、节能减排的生产工艺,确保产品在使用过程中对环境的影响降到最低。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。

Astro Industries Inc公司的发展小趣事

Astro Industries Inc深知电子行业的快速变化,因此始终将研发作为公司的核心竞争力。公司不断投入资金进行技术研发和产品升级,推出了一系列具有创新性和领先性的电子产品。同时,公司还积极响应国家产业升级的号召,加大了对智能制造、物联网等领域的投入,为公司的未来发展奠定了坚实的基础。

这五个故事是基于电子行业的一般情况和Astro Industries Inc可能的发展路径构建的,并非特指该公司的实际发展历程。如果您需要更具体的信息,建议查阅该公司的官方资料或相关新闻报道。

问答坊 | AI 解惑

梦幻五环如何发光

焰火渐渐熄灭,却在地上聚集出了一个奥运五环的标志。这个标志像是吸引了附近的火星,越来越亮,后来更是缓缓升上了半空——奥运开幕式上的这段表演几乎只能用“梦幻”来形容。像网友们评价的那样,这是一个富有冲击力和想象力的表演项目。那么,这 ...…

查看全部问答>

电子技术视频教程

714电子实验室下载资源整理,提供大量电子技术视频教程,大型EDA软件和教程等下载。…

查看全部问答>

急!安装凌华采集卡、控制卡 出现的问题

跪求高手指点:    在安装凌华采集卡驱动时,系统提示:If your drivers DO NOT perform DMA and INTERUPT Operation ,                         & ...…

查看全部问答>

CORTEX-M3启动文件

昨天参加了MCUDAY 研讨会,得到一个消息是Cortex-M3启动文件可以用C语言编写,不知论坛的朋友们有谁有编写启动文件的经验,给小弟介绍一下。…

查看全部问答>

关于数据采集卡的问题

   本人新做一个有关数据采集的项目,问些比较菜的问题~!!  见笑啊    数据采集卡是12位的,用256k的频率进行数据采集,fifo缓冲区是8k*16bit。    我想知道这个缓冲区能存多少个数,缓冲区存满需要多 ...…

查看全部问答>

如何用LED灯闪烁频率不同表现系统工作状态

现在有一个ARM7系统,想用LED灯闪烁频率不同来表示系统的工作状态。该LED灯通过一个GPIO来控制,谁能给一个思路? 谢谢…

查看全部问答>

计算器如何运算1+1=2

就拿我们现实中普通的计数器来说吧,当我按下1键后,在它内部会产生什么情况?难道会产生一股电流?这股电流如何把1这个信息存储在内部某个元件上啊?这个元件是如何存储它的啊?我需要详细的了解最最底层的原理啊,硬件是如何识别0和1的?如何存储 ...…

查看全部问答>

关于三星Armv4-2410ep教学开发板上串口的问题

各位大师们好     我现在在三星Armv4-2410ep教学开发板上做串口通信的开发。我是在Windows Ce 4.2的平台下作的。台子上的Serial 0,我可以轻松搞定,可是Serial 2我怎么调也调不成功?这是为什么?     答案正确,一定给分 ...…

查看全部问答>

请问evc中如何快速获取一个大文件的总行数?

文件比较大,怎样才能快速获取它的总行数,总不能一行一行的加吧。请各位高手指教!…

查看全部问答>

ARM,FPGA学习群QQ:37392778,有高级工程师指导做项目,想学习者加入

想学习ARM,FPGA,相关开发的,有工程师指导,现有开发项目,可长期指导…

查看全部问答>