在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32時鐘詳解

Dp1040 ? 來源:嵌入式微處理器 ? 2023-04-28 11:32 ? 次閱讀

STM32時鐘源介紹

1. STM32的時鐘源主要有:

內部時鐘

外部時鐘

鎖相環倍頻輸出時鐘

fad4b542-e572-11ed-ab56-dac502259ad0.png

1.1 詳細介紹

HSI(內部高速時鐘)

它是RC振蕩器,頻率可以達到8MHZ,可作為系統時鐘和PLL鎖相環的輸入

HSE(外部高速時鐘)

接入晶振范圍是4-16MHZ,可作為系統時鐘和PLL鎖相環的輸入,還可以經過128分頻之后輸入給RTC。

LSI(內部低速時鐘)

它是RC振蕩器,頻率大概為40KHZ,供給獨立看門狗或者RTC,并且獨立看門口只能依靠LSI作為時鐘源

LSE(外部低速時鐘)

通常外接32.768MHZ晶振提供給RTC

PLL(鎖相環)

用來倍頻輸出。因為開發板外部晶振只有8MHZ,而STM32最大工作頻率是72MHZ。他可以通過HSI輸入,HSE輸入或兩分頻輸入,通過PLL倍頻(2-16),倍頻之后輸入給系統時鐘。

MCO(時鐘輸出管腳)

通常對應STM32 PA8,它可以選擇一個時鐘信號輸出,給外部的系統提供時鐘源

2. 標準庫的時鐘配置

2.1 stm32啟動文件

首先打開startup_stm32f10x_hd.s,該文件為stm32的啟動文件,在該文件內會發現有這么一塊用匯編寫的代碼。

Reset_HandlerPROC
EXPORTReset_Handler[WEAK]
IMPORT__main
IMPORTSystemInit
LDRR0,=SystemInit
BLXR0
LDRR0,=__main
BXR0
ENDP

通過這段匯編代碼可以看出,程序在執行main函數之前,會先執行SystemInit函數。

2.2 SystemInit函數詳解

voidSystemInit(void)
{
/*Reset the RCC clock configuration to the default reset state(for debug purpose)*/
/*Set HSION bit*/
RCC->CR|=(uint32_t)0x00000001;

/*Reset SW,HPRE,PPRE1,PPRE2,ADCPRE and MCO bits*/
#ifndefSTM32F10X_CL
RCC->CFGR&=(uint32_t)0xF8FF0000;
#else
RCC->CFGR&=(uint32_t)0xF0FF0000;
#endif/*STM32F10X_CL*/

/*Reset HSEON,CSSON and PLLON bits*/
RCC->CR&=(uint32_t)0xFEF6FFFF;

/*Reset HSEBYP bit*/
RCC->CR&=(uint32_t)0xFFFBFFFF;

/*Reset PLLSRC,PLLXTPRE,PLLMUL and USBPRE/OTGFSPRE bits*/
RCC->CFGR&=(uint32_t)0xFF80FFFF;

#ifdefSTM32F10X_CL
/*Reset PLL2ON and PLL3ON bits*/
RCC->CR&=(uint32_t)0xEBFFFFFF;

/*Disable all interrupts and clear pending bits*/
RCC->CIR=0x00FF0000;

/*Reset CFGR2 register*/
RCC->CFGR2=0x00000000;
#elifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||(defined STM32F10X_HD_VL)
/*Disable all interrupts and clear pending bits*/
RCC->CIR=0x009F0000;

/*Reset CFGR2 register*/
RCC->CFGR2=0x00000000;
#else
/*Disable all interrupts and clear pending bits*/
RCC->CIR=0x009F0000;
#endif/*STM32F10X_CL*/

#ifdefined(STM32F10X_HD)||(defined STM32F10X_XL)||(defined STM32F10X_HD_VL)
#ifdefDATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif/*DATA_IN_ExtSRAM*/
#endif

/*Configure the System clock frequency,HCLK,PCLK2 and PCLK1 prescalers*/
/*Configure the Flash Latency cycles and enable prefetch buffer*/
SetSysClock();

#ifdefVECT_TAB_SRAM
SCB->VTOR=SRAM_BASE|VECT_TAB_OFFSET;/*Vector Table Relocation in Internal SRAM.*/
#else
SCB->VTOR=FLASH_BASE|VECT_TAB_OFFSET;/*Vector Table Relocation in Internal FLASH.*/
#endif
}

打開內部8M時鐘

RCC->CR|=(uint32_t)0x00000001

通過查看寄存器手冊可知,這段代碼為打開內部8M時鐘。

fae00b54-e572-11ed-ab56-dac502259ad0.png

設置時鐘配置寄存器

#ifndefSTM32F10X_CL
RCC->CFGR&=(uint32_t)0xF8FF0000;
#else
RCC->CFGR&=(uint32_t)0xF0FF0000;
#endif/*STM32F10X_CL*/

對應寄存器說明可查看《STM32中文參考手冊_V10》的6.3.2 時鐘配置寄存器(RCC_CFGR)章節。

后續代碼,有興趣可根據《STM32中文參考手冊_V10》手冊,查看代碼具體作用。

2.3 SetSysClock()函數詳解

staticvoidSetSysClock(void)
{
#ifdefSYSCLK_FREQ_HSE
SetSysClockToHSE();
#elifdefined SYSCLK_FREQ_24MHz
SetSysClockTo24();
#elifdefined SYSCLK_FREQ_36MHz
SetSysClockTo36();
#elifdefined SYSCLK_FREQ_48MHz
SetSysClockTo48();
#elifdefined SYSCLK_FREQ_56MHz
SetSysClockTo56();
#elifdefined SYSCLK_FREQ_72MHz
SetSysClockTo72();
#endif
}

system_stm32f10x.c文件中會根據芯片的型號定義對應的宏

#ifdefined(STM32F10X_LD_VL)||(defined STM32F10X_MD_VL)||(defined STM32F10X_HD_VL)
/*#define SYSCLK_FREQ_HSEHSE_VALUE*/
#defineSYSCLK_FREQ_24MHz24000000
#else
/*#define SYSCLK_FREQ_HSEHSE_VALUE*/
/*#define SYSCLK_FREQ_24MHz24000000*/
/*#define SYSCLK_FREQ_36MHz36000000*/
/*#define SYSCLK_FREQ_48MHz48000000*/
/*#define SYSCLK_FREQ_56MHz56000000*/
#defineSYSCLK_FREQ_72MHz72000000
#endif

3. 時鐘配置函數

3.1 時鐘初始化配置函數

voidSystemInit(void);
SYSCLK(系統時鐘)=72MHZ;
AHB總線時鐘(HCLK=SYSCLK)=72MHZ;
APB1總線時鐘(PCLK1=SYSCLK/2)=36MHZ;
APB2總線時鐘(PCLK1=SYSCLK/1)=72MHZ;
PLL主時鐘=72MHZ;

3.2 外設時鐘使能配置函數

voidRCC_AHBPeriphClockCmd(uint32_tRCC_AHBPeriph,FunctionalState NewState);
voidRCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph,FunctionalState NewState);
voidRCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph,FunctionalState NewState);

3.3 時鐘源使能函數

voidRCC_HSICmd(FunctionalState NewState);
voidRCC_LSICmd(FunctionalState NewState);
voidRCC_PLLCmd(FunctionalState NewState);
voidRCC_RTCCLKCmd(FunctionalState NewState);

3.4 時鐘源和倍頻因子配置函數

voidRCC_HSEConfig(uint32_tRCC_HSE);
voidRCC_SYSCLKConfig(uint32_tRCC_SYSCLKSource);
voidRCC_HCLKConfig(uint32_tRCC_SYSCLK);
voidRCC_PCLK1Config(uint32_tRCC_HCLK);
voidRCC_PCLK2Config(uint32_tRCC_HCLK);

3.5 外設時鐘復位函數

voidRCC_APB2PeriphResetCmd(uint32_tRCC_APB2Periph,FunctionalState NewState);
voidRCC_APB1PeriphResetCmd(uint32_tRCC_APB1Periph,FunctionalState NewState);

3.6 自定義系統時鐘

voidRCC_HSE_Config(u32 div,u32 pllm)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
if(RCC_WaitForHSEStartUp()==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(div,pllm);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)
while(RCC_GetSCLKSource()!=0x08);

}
}

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 振蕩器
    +關注

    關注

    28

    文章

    3840

    瀏覽量

    139171
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356616
  • pll
    pll
    +關注

    關注

    6

    文章

    777

    瀏覽量

    135207
  • 時鐘
    +關注

    關注

    11

    文章

    1736

    瀏覽量

    131591
  • 時鐘源
    +關注

    關注

    0

    文章

    93

    瀏覽量

    16002

原文標題:STM32時鐘詳解

文章出處:【微信號:玩點嵌入式,微信公眾號:玩點嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32時鐘詳解

    STM32中在使用任何一個外設都必須打開相應的時鐘,所以我從STM32時鐘學起。 在STM32中有5個
    發表于 07-19 03:40

    STM32時鐘詳解 精選資料推薦

    STM32陸陸續續把基礎的部分學完了,但對于時鐘一直一知半解。今天開始陸陸續續補充關于時鐘部分的知識。一、時鐘STM32為了實現低功耗,而
    發表于 08-12 07:20

    系統時鐘RCC詳解

    STM32】系統時鐘RCC詳解(超詳細,超全面)1什么是時鐘時鐘是單片機運行的基礎,時鐘信號推
    發表于 08-12 06:40

    詳解STM32時鐘時鐘信號

    詳解STM32時鐘系統STM32時鐘時鐘信號推動單片機內各個部分執行相應的指令,
    發表于 08-19 06:33

    STM32時鐘樹案例詳解

    STM32時鐘樹案例詳解時鐘樹直接使用HSI作為時鐘源使用配置相應的結構體,最后調用HAL_RCC_OscConfig(), 和HAL_RC
    發表于 08-20 06:11

    STM32時鐘詳解

    原文地址:STM32時鐘樹深入詳解作者:蔡志威在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用內部RC振蕩器而不使用外部晶振,請按照下面方法處理:1)對于
    發表于 08-23 07:38

    基于STM32 USB詳解

    基于STM32 USB詳解
    發表于 10-15 10:54 ?82次下載
    基于<b class='flag-5'>STM32</b> USB<b class='flag-5'>詳解</b>

    STM32最小系統和時鐘詳解

    最小系統1,、供電電路2、復位電路3、時鐘:外部晶振(2個)4、Boot啟動模式選擇5、下載電路(JTAG)6、后背電池時鐘詳解:在STM32中,有五個
    發表于 11-17 15:36 ?12次下載
    <b class='flag-5'>STM32</b>最小系統和<b class='flag-5'>時鐘</b><b class='flag-5'>詳解</b>

    《嵌入式 - 深入剖析STM32詳解STM32時鐘系統

    ,才能夠做其他的處理 (點燈,串口,ADC),時鐘的重要性不言而喻。為什么 STM32 要有多個時鐘源呢?我們在學習51單片機時,其最小系統必有晶振電路,這塊電路就是單片機的時鐘來源,
    發表于 11-22 19:36 ?10次下載
    《嵌入式 - 深入剖析<b class='flag-5'>STM32</b>》<b class='flag-5'>詳解</b><b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b>系統

    STM32系統時鐘RCC詳解

    STM32】系統時鐘RCC詳解(超詳細,超全面) 原創
    發表于 11-30 12:21 ?14次下載
    <b class='flag-5'>STM32</b>系統<b class='flag-5'>時鐘</b>RCC<b class='flag-5'>詳解</b>

    【自學筆記】STM32時鐘系統詳解

    ,ADC),時鐘的重要性不言而喻。為什么STM32要有多個時鐘源呢?? STM32本身十分復雜,外設非常多 但我們實際使用的時候只會用到有限的幾個外設,使用任何外設都需要
    發表于 12-09 13:21 ?11次下載
    【自學筆記】<b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b>系統<b class='flag-5'>詳解</b>

    2.STM32的存儲器、電源和時鐘體系

    3.2.6.復位與時鐘概述3.2.7.STM32時鐘框圖詳解13.2.8.STM32時鐘框圖
    發表于 01-07 15:32 ?1次下載
    2.<b class='flag-5'>STM32</b>的存儲器、電源和<b class='flag-5'>時鐘</b>體系

    STM32時鐘系統與時鐘啟動順序詳解

    STM32時鐘系統基本一致,不同系列之間有細微差別。此文檔主要針對STM32F446的時鐘系統進行介紹。
    發表于 02-09 10:31 ?6次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b>系統與<b class='flag-5'>時鐘</b>啟動順序<b class='flag-5'>詳解</b>

    單片機STM32時鐘詳解

    眾所周知STM32有5個時鐘源HSI、HSE、LSI、LSE、PLL,其實他只有四個,因為從上圖中可以看到PLL都是由HSI或HSE提供的。 其中,高速時鐘(HSE和HSI)提供給芯片主體的主
    的頭像 發表于 05-22 10:09 ?4768次閱讀
    單片機<b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b><b class='flag-5'>詳解</b>

    STM32庫函數SystemInit()詳解

    STM32庫函數SystemInit()詳解
    的頭像 發表于 09-18 15:45 ?4138次閱讀
    <b class='flag-5'>STM32</b>庫函數SystemInit()<b class='flag-5'>詳解</b>
    主站蜘蛛池模板: 亚洲爱爱网| 久久久福利| 亚洲 欧美 自拍 卡通 综合| 国模欢欢炮交啪啪150| 在线观看免费午夜大片| 深夜视频在线| 亚洲理论在线观看| 国产激情在线观看| 丁香五婷婷| 久久久噜噜噜久久久午夜| 色老头视频在线观看| 中国一级做a爰片久久毛片| 亚洲一本视频| 91网站免费在线观看| 亚洲视频在线一区二区| 美女用手扒开尿口给男生桶爽| 2020欧美极品hd18| 高清videosgratis欧洲69| 欧美性另类| 在线免费看影视网站| 国产精品推荐天天看天天爽| 最新黄色免费网站| 日本亚洲在线| 亚洲免费网| 天天射日日射| 女人张开腿让男人桶免费网站| 色中文字幕在线| 四虎影视大全免费入口| 四虎最新网址入口| 四虎在线最新地址公告| 欧美三级手机在线| 久久永久免费视频| 扒开双腿疯狂进出爽爽爽| www.激情五月.com| video欧美性精品| 奇米色吧| 最新亚洲一区二区三区四区| 一级做a爱过程免费视| 欧美色爱综合网| 一级片免费看| 日本污视频在线观看|