www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]STM32F4系統(tǒng)時鐘樹STM32F4的系統(tǒng)時鐘非常重要,涉及到整個系統(tǒng)的運(yùn)行結(jié)果,無論是什么操作,都需要時鐘信號,不同型號的微控制器的默認(rèn)系統(tǒng)時鐘配置是不同的,這里,給出兩種配置STM32F407系統(tǒng)時鐘的方法。方法一,采

STM32F4系統(tǒng)時鐘樹



STM32F4的系統(tǒng)時鐘非常重要,涉及到整個系統(tǒng)的運(yùn)行結(jié)果,無論是什么操作,都需要時鐘信號,不同型號的微控制器的默認(rèn)系統(tǒng)時鐘配置是不同的,這里,給出兩種配置STM32F407系統(tǒng)時鐘的方法。方法一,采用官方庫提供的配置(這里外部晶振8MHz,系統(tǒng)配置為168MHz)

STM32F4啟動與STM32F10X不同,時鐘已經(jīng)默認(rèn)配置好

啟動代碼,文件:startup_stm32f4xx.s


Reset_HandlerPROC

EXPORTReset_Handler[WEAK]

IMPORTSystemInit

IMPORT__main

LDRR0,=SystemInit

BLXR0

LDRR0,=__main

BXR0

ENDP

可以看出,在進(jìn)入main函數(shù)之前,系統(tǒng)調(diào)用了SystemInit函數(shù).

SystemInit函數(shù)分析:SystemInit函數(shù)位于system_stm32f4xx.c文件中.此文件提供幾個宏定義可以設(shè)置各個時鐘:


/*************************PLLParameters*************************************/

#ifdefined(STM32F40_41xxx)||defined(STM32F427_437xx)||defined(STM32F429_439xx)||defined(STM32F401xx)

/*PLL_VCO=(HSE_VALUEorHSI_VALUE/PLL_M)*PLL_N*/

#definePLL_M8

#else/*STM32F411xE*/

#ifdefined(USE_HSE_BYPASS)

#definePLL_M8

#else/*STM32F411xE*/

#definePLL_M16

#endif/*USE_HSE_BYPASS*/

#endif/*STM32F40_41xxx||STM32F427_437xx||STM32F429_439xx||STM32F401xx*/

/*USBOTGFS,SDIOandRNGClock=PLL_VCO/PLLQ*/

#definePLL_Q7

#ifdefined(STM32F40_41xxx)

#definePLL_N336

/*SYSCLK=PLL_VCO/PLL_P*/

#definePLL_P2//2//2---168M4---84M

#endif/*STM32F40_41xxx*/

#ifdefined(STM32F427_437xx)||defined(STM32F429_439xx)

#definePLL_N360

/*SYSCLK=PLL_VCO/PLL_P*/

#definePLL_P2

#endif/*STM32F427_437x||STM32F429_439xx*/

#ifdefined(STM32F401xx)

#definePLL_N336

/*SYSCLK=PLL_VCO/PLL_P*/

#definePLL_P4

#endif/*STM32F401xx*/

#ifdefined(STM32F411xE)

#definePLL_N400

/*SYSCLK=PLL_VCO/PLL_P*/

#definePLL_P4

#endif/*STM32F411xx*/

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

我使用的是STM32F407,篩選可用信息如下:




/*************************PLLParameters*************************************/

/*PLL_VCO=(HSE_VALUEorHSI_VALUE/PLL_M)*PLL_N*/

#definePLL_M8

#definePLL_N336

/*SYSCLK=PLL_VCO/PLL_P*/

#definePLL_P2

/*USBOTGFS,SDIOandRNGClock=PLL_VCO/PLLQ*/

#definePLL_Q7

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


而晶振頻率則是在文件stm32f4xx.h中進(jìn)行設(shè)置:

外部晶振:


#if!defined(HSE_VALUE)

#defineHSE_VALUE((uint32_t)8000000)/*!

#endif/*HSE_VALUE*/

內(nèi)部晶振:

[cpp]view plaincopy

#if!defined(HSI_VALUE)

#defineHSI_VALUE((uint32_t)16000000)/*!

#endif/*HSI_VALUE*/




綜上,如果使用外部晶振8MHz,則可以得出默認(rèn)配置中:


鎖相環(huán)壓腔振蕩器時鐘PLL_VCO =(HSE_VALUE/PLL_M)*PLL_N=8/ 8* 336 = 336MHz


系統(tǒng)時鐘SYSCLK = PLL_VCO / PLL_P=336 / 2 = 168MHz


USB,SD卡時鐘 = PLL_VCO / PLLQ=336 / 7 = 48MHz



SystemInit函數(shù)代碼:


voidSystemInit(void)

{

/*FPUsettings------------------------------------------------------------*/

#if(__FPU_PRESENT==1)&&(__FPU_USED==1)

SCB->CPACR|=((3UL<<10*2)|(3UL<<11*2));/*setCP10andCP11FullAccess*/

#endif

/*ResettheRCCclockconfigurationtothedefaultresetstate------------*/

/*SetHSIONbit*/

RCC->CR|=(uint32_t)0x00000001;

/*ResetCFGRregister*/

RCC->CFGR=0x00000000;

/*ResetHSEON,CSSONandPLLONbits*/

RCC->CR&=(uint32_t)0xFEF6FFFF;

/*ResetPLLCFGRregister*/

RCC->PLLCFGR=0x24003010;

/*ResetHSEBYPbit*/

RCC->CR&=(uint32_t)0xFFFBFFFF;

/*Disableallinterrupts*/

RCC->CIR=0x00000000;

#ifdefined(DATA_IN_ExtSRAM)||defined(DATA_IN_ExtSDRAM)

SystemInit_ExtMemCtl();

#endif/*DATA_IN_ExtSRAM||DATA_IN_ExtSDRAM*/

/*ConfiguretheSystemclocksource,PLLMultiplierandDividerfactors,

AHB/APBxprescalersandFlashsettings----------------------------------*/

SetSysClock();

/*ConfiguretheVectorTablelocationaddoffsetaddress------------------*/

#ifdefVECT_TAB_SRAM

SCB->VTOR=SRAM_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalSRAM*/

#else

SCB->VTOR=FLASH_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalFLASH*/

#endif

}

SetSysClock函數(shù)分析,在SetSysClock函數(shù)中,配置了系統(tǒng)時鐘,PLL倍頻以及分頻系數(shù):


staticvoidSetSysClock(void)

{

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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

系統(tǒng)時鐘是STM32微控制器中最重要的部分之一,它負(fù)責(zé)提供時序信號以驅(qū)動處理器核心、外設(shè)和其他系統(tǒng)模塊的運(yùn)行。

關(guān)鍵字: STM32 系統(tǒng)時鐘

基于ARM? Cortex?-M4的STM32F4 MCU系列采用了意法半導(dǎo)體的NVM工藝和ART Accelerator?,在高達(dá)180 MHz的工作頻率下通過閃存執(zhí)行時其處理性能達(dá)到225 DMIPS/608 Cor...

關(guān)鍵字: stm32f4 ARM

stm32f4和f1都有哪些區(qū)別?除了需要的頭文件不一樣,管腳配置什么的有區(qū)別么?

關(guān)鍵字: stm32f4 f1 比較

STM32F407VET6引腳圖及中文資料

關(guān)鍵字: stm32f4 引腳圖

本文以6MHz時鐘的單片機(jī)AT89C51系統(tǒng)為例,說明時鐘中斷的應(yīng)用:

關(guān)鍵字: at89c51 中斷 單片機(jī) 系統(tǒng)時鐘

STM32F10x內(nèi)核中都具有一個系統(tǒng)時鐘基定時器,是一個24位的遞減計(jì)數(shù)器。在其設(shè)置處置并使能后,每經(jīng)過一個系統(tǒng)時鐘周期,計(jì)數(shù)值減1.檔計(jì)數(shù)值減到0時系統(tǒng)時基定時器又會自動重載初值。系統(tǒng)時基定時器每10ms就會產(chǎn)生一

關(guān)鍵字: STM32 系統(tǒng)時鐘 基定時器

比較F1的片子對于F4的RTC來說有很大提升,F(xiàn)4的RTC提供了日歷時鐘和兩個可編程鬧鐘中斷,一個周期性可編程喚醒標(biāo)志。這樣很方便設(shè)置系統(tǒng)時間,并不會像F1的RTC那樣要自己計(jì)算年月日時分秒。F4的RTC是一個獨(dú)立的BC...

關(guān)鍵字: rtc stm32f4

【實(shí)驗(yàn)?zāi)康摹枯敵?路占空比不同的PWM信號是各個版本ST庫必備的例子。本實(shí)驗(yàn)的主要目的不是表現(xiàn)ST芯片PWM功能的強(qiáng)大,而是要完成輸出的精確計(jì)算?!緦?shí)驗(yàn)內(nèi)容】輸出7路PWM信號,并用示波器測量輸出?!緦?shí)驗(yàn)原理】1、時

關(guān)鍵字: pwm stm32f4 tim1 信號輸出

STM32F4的隨機(jī)數(shù)發(fā)生器RNG,以環(huán)境噪聲為種子,產(chǎn)生32位隨機(jī)數(shù)供主機(jī)使用?!局饕匦浴?、產(chǎn)生32位隨機(jī)數(shù) 2、兩次轉(zhuǎn)換時間間隔40PLL48CLK 3、隨機(jī)數(shù)熵檢測以發(fā)現(xiàn)不正常位,以產(chǎn)生穩(wěn)定序列 3、可被關(guān)閉以...

關(guān)鍵字: stm32f4 隨機(jī)數(shù)發(fā)生器

書接上文,開始折騰ADC的DMA傳輸。因?yàn)榇蠹叶荚谡fDMA,就連ST的例子里邊也是使用DMA的。 ADC采集到的數(shù)據(jù)都存儲在一個固定的寄存器中。當(dāng)常規(guī)采樣方式采樣多個通道時候,使用DMA可以較好地避免將采集到的數(shù)據(jù)...

關(guān)鍵字: adc dma stm32f4 數(shù)據(jù)傳輸 采集數(shù)據(jù)
關(guān)閉