娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

基于LinkedInSTM32F4時鐘系統(tǒng)初始化設(shè)置

發(fā)布者:PositiveVibes最新更新時間:2024-05-13 來源: elecfans關(guān)鍵字:LinkedIn  STM32F4  時鐘系統(tǒng)  初始化設(shè)置 手機看文章 掃描二維碼
隨時隨地手機看文章

LinkedInSTM32F4 時鐘系統(tǒng)初始化是在system_stm32f4xx.c中的 SystemInit()函數(shù)中完成的。 對于系統(tǒng)時鐘關(guān)鍵寄存器設(shè)置主要是在 SystemInit 函數(shù)中調(diào)用 SetSysClock()函數(shù)來設(shè)置的。我們可以先看看 SystemInit ()函數(shù)體:
 

基于LinkedInSTM32F4時鐘系統(tǒng)初始化設(shè)置

void SystemInit(void)

{

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

SCB-》CPACR |= ((3UL 《《 10*2)|(3UL 《《 11*2));

#endif

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

RCC-》CFGR = 0x00000000;

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

RCC-》PLLCFGR = 0x24003010;

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

RCC-》CIR = 0x00000000;

#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)

SystemInit_ExtMemCtl();

#endif

SetSysClock();

#ifdef VECT_TAB_SRAM

SCB-》VTOR = SRAM_BASE | VECT_TAB_OFFSET;

#else

SCB-》VTOR = FLASH_BASE | VECT_TAB_OFFSET;

#endif

}

SystemInit函數(shù)開始先進行浮點運算單元設(shè)置,然后是復(fù)位PLLCFGR,CFGR寄存器,同時通過設(shè)置 CR 寄存器的 HSI 時鐘使能位來打開 HSI 時鐘。默認情況下如果 CFGR 寄存器復(fù)位,那么是選擇HSI作為系統(tǒng)時鐘,這點大家可以查看RCC-》CFGR 寄存器的位描述最低2位可以得知,當(dāng)?shù)蛢晌慌渲脼?00的時候(復(fù)位之后),會選擇 HSI振蕩器為系統(tǒng)時鐘。也就是說,調(diào)用 SystemInit 函數(shù)之后,首先是選擇 HSI 作為系統(tǒng)時鐘。

在設(shè)置完相關(guān)寄存器后,接下來SystemInit函數(shù)內(nèi)部會調(diào)用 SetSysClock函數(shù)。這個函數(shù)比較長,我們就把函數(shù)一些關(guān)鍵代碼行截取出來給大家講解一下。這里我們省略一些宏定義標識符值的判斷而直接把針對STM32F407 比較重要的內(nèi)容貼出來:

static void SetSysClock(void)

{

__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

RCC-》CR |= ((uint32_t)RCC_CR_HSEON);

do

{

HSEStatus = RCC-》CR & RCC_CR_HSERDY;

StartUpCounter++;

} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

if ((RCC-》CR & RCC_CR_HSERDY) != RESET)

{

HSEStatus = (uint32_t)0x01;

}

else

{

HSEStatus = (uint32_t)0x00;

}

if (HSEStatus == (uint32_t)0x01)

{

RCC-》APB1ENR |= RCC_APB1ENR_PWREN;

PWR-》CR |= PWR_CR_VOS;

RCC-》CFGR |= RCC_CFGR_HPRE_DIV1;

RCC-》CFGR |= RCC_CFGR_PPRE2_DIV2;

RCC-》CFGR |= RCC_CFGR_PPRE1_DIV4;

RCC-》CFGR |= RCC_CFGR_PPRE2_DIV1;

RCC-》CFGR |= RCC_CFGR_PPRE1_DIV2;

RCC-》PLLCFGR = PLL_M | (PLL_N 《《 6) | (((PLL_P 》》 1) -1) 《《 16) |

(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q 《《 24);

RCC-》CR |= RCC_CR_PLLON;

while((RCC-》CR & RCC_CR_PLLRDY) == 0)

{

}

FLASH-》ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN

|FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;

RCC-》CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

RCC-》CFGR |= RCC_CFGR_SW_PLL;

while ((RCC-》CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);

{

}

}

else

{

}

}

這段代碼的大致流程是這樣的:先使能外部時鐘 HSE,等待 HSE 穩(wěn)定之后,配置AHB,APB1,APB2 時鐘相關(guān)的分頻因子,也就是相關(guān)外設(shè)的時鐘。等待這些都配置完成之后,打開主PLL時鐘,然后設(shè)置主PLL作為系統(tǒng)時鐘 SYSCLK時鐘源。如果HSE 不能達到就緒狀態(tài)(比如外部晶振不能穩(wěn)定或者沒有外部晶振),那么依然會是HSI作為系統(tǒng)時鐘。

在這里要特別提出來,在設(shè)置主PLL時鐘的時候,會要設(shè)置一系列的分頻系數(shù)和倍頻系數(shù)參數(shù)。大家可以從SetSysClock函數(shù)的這行代碼看出:

RCC-》PLLCFGR = PLL_M | (PLL_N 《《 6) | (((PLL_P 》》 1) -1) 《《 16) |

(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q 《《 24);

這些參數(shù)是通過宏定義標識符的值來設(shè)置的。默認的配置在 System_stm32f4xx.c 文件開頭的地方配置。對于我們開發(fā)板,我們的設(shè)置參數(shù)值如下:

#define PLL_M 8

#define PLL_Q 7

#define PLL_N 336

#define PLL_P 2

所以我們的主PLL時鐘為:

PLL=8MHz * N/ (M*P)=8MHz* 336 /(8*2) = 168MHz

在開發(fā)過程中,我們可以通過調(diào)整這些值來設(shè)置我們的系統(tǒng)時鐘。

這里還有個特別需要注意的地方,就是我們還要同步修改 stm32f4xx.h 中宏定義標識符HSE_VALUE 的值為我們的外部時鐘:

#if !defined (HSE_VALUE)

#define HSE_VALUE ((uint32_t)8000000)

#endif

這里默認固件庫配置的是25000000,我們外部時鐘為8MHz,所以我們根據(jù)我們硬件情況修改為8000000即可。

講到這里,大家對 SystemInit 函數(shù)的流程會有個比較清晰的理解。那么 SystemInit 函數(shù)是怎么被系統(tǒng)調(diào)用的呢?SystemInit是整個設(shè)置系統(tǒng)時鐘的入口函數(shù)。這個函數(shù)對于我們使用ST提供的 STM32F4 固件庫的話,會在系統(tǒng)啟動之后先執(zhí)行main函數(shù),然后再接著執(zhí)行SystemInit函數(shù)實現(xiàn)系統(tǒng)相關(guān)時鐘的設(shè)置。這個過程設(shè)置是在啟動文件 startup_stm32f40_41xxx.s中間設(shè)置的,我們接下來看看啟動文件中這段啟動代碼:

; Reset handler

Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT SystemInit

IMPORT __main

LDR R0, =SystemInit

BLX R0

LDR R0, =__main

BX R0

ENDP

這段代碼的作用是在系統(tǒng)復(fù)位之后引導(dǎo)進入main函數(shù),同時在進入main函數(shù)之前,首先

要調(diào)用 SystemInit系統(tǒng)初始化函數(shù)完成系統(tǒng)時鐘等相關(guān)配置。

最后我們總結(jié)一下SystemInit()函數(shù)中設(shè)置的系統(tǒng)時鐘大小:

SYSCLK(系統(tǒng)時鐘) =168MHz

AHB總線時鐘(HCLK=SYSCLK) =168MHz

APB1總線時鐘(PCLK1=SYSCLK/4) =42MHz

APB2總線時鐘(PCLK2=SYSCLK/2) =84MHz

PLL主時鐘 =168MHz


關(guān)鍵字:LinkedIn  STM32F4  時鐘系統(tǒng)  初始化設(shè)置 引用地址:基于LinkedInSTM32F4時鐘系統(tǒng)初始化設(shè)置

上一篇:STM32單片機ADC的模擬看門狗的測試
下一篇:基于STM32四軸飛行器電路設(shè)計的詳細圖解資料概述

推薦閱讀最新更新時間:2025-05-12 22:55

STM32F4學(xué)習(xí)筆記2——時鐘與復(fù)位系統(tǒng)
STM32F4采用了三種不同的時鐘用來驅(qū)動系統(tǒng)時鐘(SYSCLK) ·HSI振蕩器時鐘(內(nèi)部時鐘) ·HSE振蕩器時鐘(外部時鐘) ·PLL時鐘(鎖相環(huán)時鐘) 這些設(shè)備有以下兩種二級時鐘源 ·32kHz低速內(nèi)部RC,可用于驅(qū)動獨立看門狗和通過程序選擇驅(qū)動RTC。RTC用于從停機/待機模式下自動喚醒系統(tǒng)。 ·32.768kHz低速外部晶振也可以用來通過程序選擇驅(qū)動RTC(RTCCLK)。 AHB總線最高支持168MHz的時鐘,通過AHB總線分頻APB2最高支持84MHz,APB1最高支持42MHz。 所有外設(shè)驅(qū)動全部來至于SYSCLK除了下面幾個: ·USB OTG FS時鐘48MHz,隨機信號發(fā)生器時
[單片機]
51單片機的定時器初始化設(shè)置的流程
51單片機的定時/計數(shù)器是一種可編程部件。它的工作方式、計數(shù)初值以及啟停操作均應(yīng)在定時/計數(shù)器工作前進行初始化,即向相應(yīng)的寄存器寫入相應(yīng)的控制字。 標準的51單片機內(nèi)部有T0和T1兩個定時器,與這兩個定時器有關(guān)的特殊功能寄存器主要由定時值存儲寄存器、定時器控制寄存器和定時器模式寄存器。 在使用定時器的時候,需要完成對定時器配置,配置步驟如下: 第一:設(shè)置特殊功能寄存器TMOD,配置好工作模式。 第二:設(shè)置計數(shù)寄存器TH0和TL0的初值。 第三:設(shè)置TCON,通過TRX置1來讓定時器開始計數(shù)。 第四:判斷TCON寄存器的TFX位,監(jiān)測定時器溢出情況 這里TRX和TFX中的X指的是0或者1。 下面程序使用定時器0,工作模式1,
[單片機]
51單片機的定時器<font color='red'>初始化</font><font color='red'>設(shè)置</font>的流程
stm32系統(tǒng)架構(gòu)及其時鐘系統(tǒng)
1 系統(tǒng)組成 八個單元----4主動,4被動,主動或被動單元與總線矩陣有關(guān)。 2 時鐘信號處理模式 3 時鐘設(shè)計 3.1 時鐘源分類 3.1.1RC時鐘 RC時鐘其特點是精度低,但體積小,因此經(jīng)常被單片機作為內(nèi)置時鐘 3.1.2 OSC時鐘 osc時鐘與RC正好相反,即更高的精度與更大的體積,在需要高精度時鐘信號的場景中作為外接時鐘接入 4 選擇器開關(guān) 4.1 作用 他的作用為選擇時鐘信號由它來絕定何種時鐘信號可以通過,下圖中用綠線標出 4.2分頻器 4.2.1預(yù)分頻器 預(yù)分頻器對時鐘信號進行預(yù)分頻 4.2.2倍頻器 5 控制器(與門)
[單片機]
STM32—時鐘樹(結(jié)合系統(tǒng)時鐘函數(shù)理解)
時鐘樹的概念: 我們可以把MCU的運行比作人體的運行一樣,人最重要的是什么?是心跳! 心臟的周期性收縮將血液泵向身體各處。心臟對于人體好比時鐘對于MCU,微控制器(MCU)的運行要靠周期性的時鐘脈沖來驅(qū)動,而這個脈沖的始源往往是由外部晶體振蕩器提供時鐘輸入,最終轉(zhuǎn)換為多個外部設(shè)備的周期性運作。這種時鐘“能量”的傳遞路徑猶如大樹的養(yǎng)分由主干流向個分支,因此稱為時鐘樹。 STM32時鐘: 在STM32中每個外設(shè)都有其單獨的時鐘,在使用某個外設(shè)之前必須打開該外設(shè)的時鐘 ,為什么要這么麻煩來設(shè)置每一個外設(shè)的時鐘而不是將所有外設(shè)的時鐘統(tǒng)一打開?因為STM32的外設(shè)繁多,外設(shè)的運作所需要的最佳時鐘各不相同,如果所有時鐘同時運行會給MCU帶
[單片機]
STM32—<font color='red'>時鐘</font>樹(結(jié)合<font color='red'>系統(tǒng)</font><font color='red'>時鐘</font>函數(shù)理解)
msp430系統(tǒng)時鐘詳解
  SP430 系列單片機基礎(chǔ)時鐘主要是由低頻晶體振蕩器,高頻晶體振蕩器,數(shù)字控振蕩器(DCO),鎖頻環(huán)(FLL)及 FLL+等模塊構(gòu)成。由于 430 系列單片機中的型號不同而時鐘模塊也將有所不同。雖然不同型號的單片機的時基模塊有所不同,但這些模塊生出來的結(jié)果是相同的。在MSP430F13、 14中是有TX2振蕩器的, 而MSP430F11X,F(xiàn)11中是用LFXT1CLK來代替XT2CLK時鐘信號的。在時鐘模塊中有3個(對于F13,F(xiàn)14)時信號源(或 2個時鐘信號源,對于F11X、F11X1):   1-LFXT1CLK: 低頻/高頻時鐘源。由外接晶體振蕩器,而無需外接兩個振蕩電容器常使用的晶體振蕩器是32768HZ。   2-
[單片機]
msp430<font color='red'>系統(tǒng)</font><font color='red'>時鐘</font>詳解
STM32的時鐘系統(tǒng)體系結(jié)構(gòu)
一、STM32 有5個時鐘源:HSI、HSE、LSI、LSE、PLL。   ①HSI振蕩器(RC振蕩器)時鐘是高速內(nèi)部時鐘,一般很少使用,因為精度沒有外部高速時鐘(晶振)那么高    ②HSE是高速外部時鐘接石英/陶瓷諧振器,或接外部時鐘源,頻率范圍為4MHz~26MHz,M4開發(fā)板是8M ③LSI是低速內(nèi)部時鐘,RC振蕩器,頻率為32kHz提供低功耗時鐘。主要供獨立看門狗和自動喚醒單元使用。    ④LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。用于驅(qū)動 RTC 時鐘 (RTCCLK)    ⑤PLL為鎖相環(huán)倍頻輸出(倍頻時鐘)。STM32F4有兩個PLL: 1、主PL
[單片機]
STM32的<font color='red'>時鐘</font><font color='red'>系統(tǒng)</font>體系結(jié)構(gòu)
ARM9的系統(tǒng)時鐘和串口(非流控 + 非FIFO + 查詢方式)
實驗的目的: 設(shè)置系統(tǒng)時鐘,并在串口上輸入一個字符,單板接收后將它的ASCII值加1后,從串口輸出。 實驗的源程序: /************************************************************************* s3c24xx.h *************************************************************************/ /* WOTCH DOG register */ #define WTCON (*(volatile unsigned long *)0x53000000) /* SDRAM regi
[單片機]
STM32值系統(tǒng)時鐘初始化程序設(shè)計
正如之前文章所述,在使用外設(shè)功能時,都必須提前對其精心初始化才能使用其功能。 以下是系統(tǒng)定時器初始化的程序清單。 #include stm32f10x_lib.h unsigned char sys_nub;//系統(tǒng)定時器中斷計數(shù)變量 //SysTick 設(shè)置 void Systick_Config(void) { //失能SysTick定時器 SysTick_CounterCmd(SysTick_Counter_Disable); //失能SysTick中斷 SysTick_ITConfig(DISABLE); //設(shè)置SysTick時鐘源 SysTick_ClockSourceConfig(SysTick_Source_HC
[單片機]
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 响水县| 凯里市| 福建省| 广平县| 潼关县| 博白县| 澳门| 昭通市| 罗山县| 喜德县| 左权县| 嘉黎县| 手游| 顺义区| 肥西县| 米易县| 嵊州市| 宣恩县| 铜梁县| 城固县| 满洲里市| 泌阳县| 始兴县| 雷波县| 罗定市| 大方县| 天水市| 田东县| 康定县| 峨眉山市| 怀集县| 嘉禾县| 长沙市| 青田县| 海盐县| 永兴县| 平湖市| 庄浪县| 石渠县| 南陵县| 博湖县|