历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2018年08月13日 | STM32的时钟简介和配置方法

2018-08-13 来源:eefocus

STM32中使用任何一个外设都必须打开相应的时钟。在STM32中有5个时钟源可供用户选择:

1.HSI高速内部时钟,RC震荡器,频率为8MHz。

2.HSE高速外部时钟,右英/陶瓷谐振器,或着外部时钟源,4MHz-16MHz.

3.LSI内部低速时钟,RC震荡器频率为40Hz。

4.LSE外部低速时钟,接频率为32.768KHz的石英晶体。

5.PLL锁相环频输出,时钟源可选为HIS/2、HSE或HSE/2。倍频可选2-16倍,但其输出频率最大不能超过72MHz。

系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后送给个模块使用,AHB分频器可选择1、2...512分频。AHB分频器输出的时钟送给5大模块使用:

1.送给AHB总线、内核、内存、DMA使用的HCLK时钟。

2.通过8分频送给系统定时器的定时时钟(嘀嗒定时器)。

3.直接送给Cortex的空闲时钟PCLK。

4.送给APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36M)另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或着2倍频,时钟输出供定时器2、3、4使用。

5.送给APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72M)另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或着2倍频。时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选 择为2、4、6、8分频。


连接在APB1(低速外设)上设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、TIMER2、TIMER3、TIMER4。

连接在APB2(高速外设)上设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口、第二功能IO口。


涉及的寄存器:
RCC 寄存器结构,RCC_TypeDeff,在文件“stm32f10x_map.h”中定义如下: 
typedef struct 

vu32 CR;                  //HSI,HSE,CSS,PLL等的使能 
vu32 CFGR;              //PLL等的时钟源选择以及分频系数设定
vu32 CIR;                // 清除/使能 时钟就绪中断
vu32 APB2RSTR;      //APB2线上外设复位寄存器
vu32 APB1RSTR;      //APB1线上外设复位寄存器
vu32 AHBENR;         //DMA,SDIO等时钟使能
vu32 APB2ENR;       //APB2线上外设时钟使能
vu32 APB1ENR;      //APB1线上外设时钟使能
vu32 BDCR;           //备份域控制寄存器
vu32 CSR;            
} RCC_TypeDef;


在ST公司的外设固件库的示例里,对于工程项目文件,ST并没有在启动函数main()里初始化PLL,因为其已经在硬件初始化阶段完成对系统时钟的配置。这样也就带了一个问题,ST库里的均使用了外设8MHz的晶振,而我们平时的项目就一定采用的是这个频率,实际配置的低于8MHz,MCU不能全速运行,高于8MHz,外设时钟即配置失败,甚至无法运行。那么如何重新配置时钟就需要我们重新设计了。


以下为使用库函数重新编写了STM32F系统时钟PLL初始化过程:

以下的函数需要添加#include "stm32f10x.h"的头文件来调用ST固件库。
static void SysClockInit(void)
{
RCC_DeInit();/* RCC重置 */
RCC_HSEConfig(RCC_HSE_ON); /*(使能HSE)*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();/*(等待HSE使能结束)*/
if (HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 配置HCLK = SYSCLK */
RCC_PCLK2Config(RCC_HCLK_Div1); /* 配置PCLK2 = HCLK */
RCC_PCLK1Config(RCC_HCLK_Div2); /* 配置PCLK1 = HCLK/2 */
/* 超级重要的、需要配置的地方在这里 */
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* RCC_PLLSource_HSE_Div1为外置晶振的分频系数;RCC_PLLMul_9为倍频数 */
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 选定PLL为系统主时钟 */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
else
{ /* 配置失败将程序停留在这里 */
while (1)
{
}
}
}


推荐阅读

史海拾趣

Advanced Detector Corp公司的发展小趣事

随着技术的不断成熟和市场的扩大,ADC开始将业务扩展到更广泛的领域。公司不仅继续深耕探测器领域,还逐渐拓展到传感器、测量仪器等多个领域。通过不断推出多样化的产品,ADC成功满足了不同客户的需求,并在市场上取得了良好的口碑。

HSMC公司的发展小趣事

HSMC的发展离不开巨额的资金投入。公司项目总投资额达到约200亿美元(另一说法为1280亿元人民币),这一庞大的投资规模使得HSMC能够迅速构建起先进的生产设施。项目规划包括建设14纳米及7纳米以下节点的逻辑工艺生产线,以及晶圆级先进封装生产线。这些生产线预计月产能可达数万片,为市场提供高质量的芯片产品。

Glenair公司的发展小趣事
电压比较器、继电器、可控硅等元件可能因老化、过流、过热等原因损坏,导致电路无法正常工作。
中科银河芯(GXCAS)公司的发展小趣事
在饱和状态下,集电极和发射极之间的电压降(Vce)很小,通常在0.3V到0.4V之间。这意味着三极管在这两个极之间相当于一个低阻值的开关。
EHC(ELECTRONICHARDWARE)公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。EHC公司深知这一点,因此一直将品质管理作为企业发展的重要战略。公司建立了完善的质量管理体系,从原材料采购到生产制造再到产品出厂,每一个环节都经过严格的把控。这种对品质的坚持和追求让EHC公司的产品在市场上赢得了广泛的信任和认可。

Barry Industries Inc公司的发展小趣事

Barry Industries Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把控品质。同时,公司还注重品牌建设,通过提升产品形象和服务水平,逐渐树立了良好的品牌形象。

问答坊 | AI 解惑

菜鸟学电源(三):本两周主题LLC,半桥,全桥 工作原理

LLC 主要以用于液晶电视:150W-600w    EMI 对液晶屏的干扰很低 效率可以做到96% 工作过程: 上下MOS 的频率 低端控制在30KHZ 以上,高端控制在150KHZ 以下 上下MOS 的开通时间一样,每个的占空比为50%. 当S1导通的 ...…

查看全部问答>

TDA2822M 做音频放大电路怎么样?

我用的是PDF文档里的,立体声电路,但实验后发现用5V电压时,杂音特别大,而用9V时就没杂音,这是怎么回事?立体声里给的标准也是5V啊! 感谢大家指教! …

查看全部问答>

单片机高手请进

请教高手如何通过需求实现该程序,万分感谢~ 一、技术要求: 按“1”键(二长),芯片A1、A2(在工作状态下、下同)每2分钟发出周期性二长信号,C4同步发出信号,C5、C6、C7低电平(0V)。 按“2”(一长二短),A1、A2每2分钟发出周期性一长二短信号 ...…

查看全部问答>

如何屏蔽掉wince中usb的“正在连接......”提示窗口,兄弟们求救了,谢谢!

如何屏蔽掉wince中usb的“正在连接......”提示窗口,兄弟们求救了,谢谢!…

查看全部问答>

用U2270B做读卡器最大读卡距离能做多大

我只能做到7cm左右,这个能不能做到10cm以上啊,有做过的同志么…

查看全部问答>

申请ez430-RF2500

申请ez430-RF2500   希望有机会得到,目前本人主要支持Ti Stellaris. 希望能和更多工程师进行交流和学习.   QQ:1246696660…

查看全部问答>

在万利的STM32学习板上实现USB多媒体键盘

   圈圈通过对原来的USB摇杆实例进行修改,做了一个USB HID多媒体键盘,可以调节音量、启动Windows Media播放器、停止/暂停播放、打开网页、打开计算器等等功能。由于摇杆和多媒体键盘都是HID设备,因而改动的工作量 ...…

查看全部问答>

UCA0MCTL这个在串口通信中有什么用,手册没看懂

UCA0MCTL这个在串口通信中有什么用,手册没看懂…

查看全部问答>

深入了解信号发生器

觉得有用的下载吧,学习学习信号发生器入门资料。…

查看全部问答>

[独家] STlink驱动出错解决方法

最近由于需要入手了STM8L discovery小板.上面自带了STlink.但是查了下网上很多人表示驱动有问题,研究了一上午.报告下结果~ STlink是不需要驱动的.IAR\\ST-LinkUpgrade\\STVP都一样.用的是STLinkUSBDriver.dll这个构件.STlink无需驱动会被windows识 ...…

查看全部问答>