IDE/去讀懂STM32CubeMX 時鐘配置圖(有源/無源晶振、旁路/晶振模式、倍頻/分頻)

文章目錄

  • 概述
  • 配置圖元素說明
    • RCC
    • HSI/LSI/HSE/LSE
    • AHB 和 APB
    • SYSCLK 和 HCLK
    • Mux 多路復用器
    • Prescaler 預分頻器
    • PLL 鎖相環
    • PLL 配置寄存器
  • 時鐘物理源
    • 內部時鐘和驅動
    • 無源晶振和驅動
    • 有源晶振和驅動
    • MCO 時鐘信號
    • 音頻時鐘配置
  • 晶體振蕩器?
    • 外部時鐘源類型
    • RCC 如何選擇
    • 旁路模式-有源晶振
    • 旁路模式-時鐘信號
  • 頻率沖突和計算
  • 時鐘給誰用?

概述

閱讀本文的內容后,我們便可以真正地去讀懂STM32時鐘配置圖的全部內容,打開理解STM32時鐘樹的第一道大門。
1、邏輯電路符號(如PLL、Mux等)說明、名詞(HSI/LSI/HSE/LSE、AHB/APB、SYSCLK/HCLK)說明等;
2、Crystal/Ceramic Resonator、BYPASS Clock Source、有源晶振、無源晶振、旁路模式、晶振模式等概念及其關聯。
3、有源晶振/無源晶振管腳、電路圖設計和分析。
4、了解頻率自動計算和頻率沖突問題。

@History
202306 此時,我應該連半個嵌入式程序員都算不上,雖然基于STM32+FreeRTOS搞過半年多的嵌入式編程,但是環境都是別人搭建的,就連GPIO配置、OS配置等都是別人幫助我搞得,我充其量就是完成了一次C程序設計和代碼編碼。即使是在參與了許多嵌入式項目后的,我依然對于嵌入式編程,都是一知半解,算不上入門。借著學習 STM32Cube 的機會,開啟一段新里程,加深個人對嵌入式開發的理解。我通常的學習路徑是,粗實踐-細理論-細實踐。本文,MX時鐘樹解讀就是我細理論的第一戰。

配置圖元素說明

要實實在在的看懂時鐘配置圖,第一步,要理解時鐘圖中的各個名稱或縮寫名稱的含義,理解圖中的器件的功能。我們新建一個基于STM32F427的MX工程,默認情況下的時鐘配置如下圖,STM32F427ZIT6,
在這里插入圖片描述

RCC

RCC 是 Reset and Clock Control(復位與時鐘控制器) 的縮寫,控制外設的硬件復位,為CPU內核、外設提供穩定的時鐘信號。
在這里插入圖片描述

HSI/LSI/HSE/LSE

HS和LS,是High Sped 和 Low Speed 的縮寫,這些通過上圖都可以意識到。那么I和E呢?其實這里它們分別是Internal和External。即內部高低速時鐘和外部高低速時鐘。內部高低速時鐘,不需要任何外部電路,不涉及GPI配置過程。相關標識如下圖紅色和綠色框。
在這里插入圖片描述
LSE(低速外部晶振):LSE是一種低頻率的外部晶振,通常使用 32.768KHz 的頻率。它主要用于提供低功耗時鐘,例如RTC(實時時鐘)和低功耗模式中的時鐘源。LSE適用于需要長時間穩定運行的應用,如實時時鐘和定時器。
HSE(高速外部晶振):HSE是一種高頻率的外部晶振,通常使用 4MHz 到26MHz的頻率。它用于提供高速時鐘源,供微控制器的內部邏輯和外設使用。HSE適用于需要高性能和高速通信的應用,如高速串行接口(例如SPI、I2C、USART)和高速計時器。

AHB 和 APB

在STM32微控制器中,AHB(Advanced High-performance Bus,高級高性能總線) 和 APB(Advanced Peripheral Bus,高級外設總線) 是 片上總線架構 的核心組成部分,用于連接CPU、內存和外設,實現數據傳輸。AHB專注于高帶寬、低延遲,APB專注于低功耗、外設兼容性。
AHB是STM32的系統主干總線,連接CPU、內存(SRAM/Flash)和高帶寬外設,設計目標是高吞吐率、低延遲,支持突發傳輸(Burst Transfer)和流水線操作。仔細觀察是時鐘圖和閱讀數據手冊,便可以窺探一二。關于,AHB和APB上外設的掛載,我們在后續文章中會繼續談。這里先不多說了。可以先提一點,
在這里插入圖片描述
最累的是AHB1,下圖中的灰色實心線表示了與它相關的設備,
在這里插入圖片描述

SYSCLK 和 HCLK

在這里插入圖片描述
SYSCLK(System Clock,系統時鐘)
它是STM32的主時鐘源,是CPU(Cortex-M內核)運行的基準時鐘,也是其他所有時鐘(如HCLK、PCLK)的源頭。其頻率直接決定了CPU的運算速度,如168MHz SYSCLK對應CPU最大168MIPS的處理能力。事實上SYSCLK類似于我們常說的主頻的意思,該時鐘驅動CPU的指令執行。即在CubeMX中,通過 Clock Configuration 界面的 System Clock Mux(系統時鐘多路選擇器)選擇SYSCLK的來源,默認優先使用PLLCLK,此時頻率最高,性能最優。

HCLK(AHB Clock,高速總線時鐘)
HCLK高速總線的時鐘,由SYSCLK經過 AHB Prescaler(AHB分頻器) 分頻得到,分頻系數可配置為1、2、4、8、16、64、128、256、512(默認1分頻,即HCLK = SYSCLK)。該時鐘為連接在AHB總線上的高帶寬外設提供時鐘,同時也是CPU的“總線接口時鐘”(CPU通過AHB總線訪問內存和外設)。再直白點說就是,驅動AHB總線及外設:如SRAM、Flash、DMA控制器、SDIO、ETH、Timer等需要高帶寬的外設。

Mux 多路復用器

在時鐘配置圖中,我們可以看到多個Mux邏輯電路符號,
在這里插入圖片描述
Mux 是 Multiplexer(多路復用器) 的縮寫,可以認為它是一種電子選通開關電路,可從多個輸入信號中選擇一個,并將其輸出到單一通道。這里以兩個最主要的Mux為例,它們的功能介紹大約如下,PLL Source Mux(PLL源多路選擇器) 是一個硬件開關,用于選擇PLL的輸入時鐘源(即“喂給”PLL的原始時鐘)。System clock Mux(系統時鐘多路選擇器) 是STM32時鐘樹的“總開關”,用于選擇系統時鐘(SYSCLK)的最終來源,直接決定CPU內核、內存和大多數外設的工作頻率。

Prescaler 預分頻器

美 /'pri:skeil?/ 預分頻器。在STM32CubeMX的“Clock Configuration”(時鐘配置)界面中,預分頻器(Prescaler) 是降低時鐘頻率的核心組件,通過對輸入時鐘進行“分頻”(除以某個整數),為不同外設提供匹配其最高工作頻率的時鐘信號。預分頻器是STM32時鐘樹的“流量控制器”,確保高速系統時鐘(如168MHz)能適配低速外設(如UART最高支持42MHz)。

PLL 鎖相環

PLL(Phase-Locked Loop,鎖相環) 是STM32中用于倍頻/分頻時鐘的核心模塊,可將低頻時鐘(如8MHz HSE)倍頻至高頻(如168MHz),供系統時鐘和高速外設使用。
以STM32F427為例,其PLL輸入頻率,無論是使用HSI還是HSE,通常都要先分頻處理。分頻的核心目的是將原始高頻時鐘(HSI/HSE)降至PLL的輸入頻率范圍(如2 MHz),保證PLL穩定工作。若原始時鐘頻率 恰好落在PLL輸入范圍內,則無需分頻。

PLL 配置寄存器

當我首次注意到PLL鎖相環的M、N、O、P、R時,稍微有點蒙,難道它們有什么特殊含義嗎?
在這里插入圖片描述
RCC PLL 配置寄存器 (RCC_PLLCFGR) RCC PLL configuration register
在這里插入圖片描述
其實,這里的MNOP并沒有特殊的含義,純粹的是PLL寄存器字段的編號。如上寄存器位域分配表所示,
位 5:0 PLLM:
主 PLL (PLL) 和音頻 PLL (PLLI2S) 輸入時鐘的分頻系數,由軟件置 1 和清零,用于在 VCO 之前對 PLL 和 PLLI2S 輸入時鐘進行分頻。
位 14:6 PLLN:
適用于 VCO 的主 PLL (PLL) 倍頻系數 (Main PLL (PLL) multiplication factor for VCO) 由軟件置 1 和清零,用于控制 VCO 的倍頻系數。壓控振蕩器 VCO(Voltage-Controlled Oscillator) 是 PLL 核心組成部分,負責根據輸入電壓生成高頻振蕩信號,其輸出頻率隨控制電壓線性變化。
位 17:16 PLLP:
適用于主系統時鐘的主 PLL (PLL) 分頻系數 (Main PLL (PLL) division factor for main system clock) 由軟件置 1 和清零,用于控制常規 PLL 輸出時鐘的頻率。軟件必須正確設置這些位,使其在此域中不超過系統時鐘最大頻率限制。
位 27:24 PLLQ:
主 PLL (PLL) 分頻系數,適用于 USB OTG FS、SDIO 和隨機數發生器時鐘 (Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks) 由軟件置 1 或清零,用于控制 USB OTG FS 時鐘、隨機數發生器時鐘和 SDIO 時鐘的頻率。在默認的情況下,PLLQ這條線是灰色不可用的,除非你使能了USB或RNG或SDIO,此處才是可編輯狀態。

時鐘物理源

在MX的PCC時鐘源配置界面,都是針對外部時鐘源的,在使能 HSE 或 LSE 前,整個Clock Configuration 選項卡大多是灰色,時鐘樹上只有內部時鐘的部分樹枝是可以配置的。

內部時鐘和驅動

STM32是內置高低兩個時鐘源的,它們的震蕩電路應該不是晶體震蕩電路吧?
STM32內置的高/低時鐘源(HSI、LSI) 的振蕩電路是RC振蕩器,而非外置晶振使用的晶體振蕩電路。兩者的核心區別在于是否依賴外部石英晶體,內置時鐘源通過芯片內部的RC網絡實現振蕩,而外置時鐘源(HSE、LSE)則依賴外部石英晶體/陶瓷諧振器(晶體振蕩電路)。這種設計的主要好處在于,無需外部元件,完全集成在芯片內部,上電即可工作(無需等待外部晶振起振)。但是它們頻率精度低,而且受溫度和電壓影響大。詳細的,這里不再過多的討論。
在這里插入圖片描述
STM32的內置時鐘源和外置無源晶振時鐘源,這兩種模式,它們有交集,但更多的是獨立。
相同之處在于,它們會共用芯片內部的電源域和基礎模擬電路(如穩壓器、噪聲濾波電路)。不同之處在于,核心驅動電路(振蕩器)是獨立的。前者的驅動電路是,高精度RC網絡、低功耗反相放大器(為RC網絡提供正反饋,維持振蕩),驅動電路與RC網絡完全集成,上電后自動起振。后者的驅動電路是,高增益反相放大器(為外部晶體提供正反饋激勵,使其產生機械振動并輸出電信號)、負載電容匹配電路,驅動電路本身不產生振蕩(依賴外部晶體),僅通過反相放大器的正反饋使外部晶體諧振。

無源晶振和驅動

先來看兩款無源晶振的數據手冊,直觀的感受下,無源晶振本質就是快石頭。
32.768kHz無源晶振,8MHz無源晶振,如上鏈接可以下載手冊。我們以TAXM8M4RDBCCT2T 為例,看看其管腳和電路原理圖,
在這里插入圖片描述
別看這小子有4個引腳,但實際上,只有兩個是有效的,這是為了和有源的晶振管腳兼容,方便以后擴展,即上圖P2和P4懸空或接地。無源晶振的兩端接在主芯片的OSC_IN和OSC_OUT管腳之間,OSC_OUT是主芯片內部驅動電路的輸出腳,以此敲打晶振動起來。

外部無源晶振的驅動電路,
是 STM32 內部集成的“晶體驅動電路”,核心是 反相放大器 和 正反饋網絡。上電后,反相放大器輸出噪聲信號,通過正反饋網絡(電容/電阻)選頻,使外部晶體在其固有頻率(如8MHz HSE)上產生機械諧振。晶體諧振產生的正弦波信號再次通過反相放大器放大,輸出穩定的時鐘信號。反相放大器的核心作用,在于提供能量和正反饋。外部無源晶體本身無能量來源,反相放大器通過 電源供電(AVDD)為晶體提供振蕩所需的能量(類似“推秋千”,放大器的能量輸入維持晶體持續振動)。反相放大器的輸出信號通過反饋網絡(如電容分壓)送回輸入端,形成 正反饋環路,使晶體僅在固有頻率上諧振(抑制其他頻率的噪聲)。

有源晶振和驅動

先來做個基本理解:這里的“源”它不僅僅是電源,應該是指 “能量和驅動來源”。無源晶振,無內置能量來源,需外部電路驅動(“借別人的力振動”)。有源晶振,自帶能量轉換電路,獨立驅動振動(“自己有力氣振動”)。因此,無源晶振需要接STM32的兩個引腳(OSC_IN/OSC_OUT形成振蕩回路),而有源晶振只需接一個輸入引腳(自帶驅動,直接送信號)。以 型號NT0507BH3I507EA10 為例,
在這里插入圖片描述
有源晶振的電路原來圖,通常如下圖這個樣子,
在這里插入圖片描述
管腳1,懸空或者接壓控電壓。在支持壓控評率的情況下,為了電路板對晶振選擇的兼容性,壓控的引腳可能會選擇 OSC_OUT管腳。

MCO 時鐘信號

在文中前面的小節中我們講到過一次了,MCO 是 Microcontroller Clock Output 的縮寫,即,微控制器時鐘輸出,是STM32芯片的一種特殊功能引腳,用于將內部時鐘信號(如PLL輸出、HSI、HSE等)通過GPIO引腳輸出到外部,供調試或外部設備使用。要使能這種時鐘輸出功能,首先要在RCC配置界面,啟用 Master Clock Output,否則對應的時鐘樹是不可編輯的。
在這里插入圖片描述
在合理的配套的硬件設計基礎上,結合上述配置,就可以將自己的內外部高低時鐘信號的一路,分頻后,借給其他MCU使用。前文也提到過,STM32F429 的評估板就是這么干的,將ST-LINK-STM32F103的HSE,給了F429主芯片使用。此時F103/ST-LINK固件程序的時鐘配置,當如上圖,啟用時鐘輸出,并進行分頻配置。而F429的程序時鐘配置中,與使用有源晶振時配置是相同的。

當我們在MX配置實驗操作中啟用 Master Clock Output 1 時,MX GPIO 配置會自動配置 PA8為MCO_1,如下圖,
在這里插入圖片描述
ST評估板也是這么搞的,
在這里插入圖片描述

音頻時鐘配置

在STM32微控制器中,SAI(Serial Audio Interface,串行音頻接口) 是一種高性能、多通道的音頻專用接口,專為數字音頻信號的傳輸設計,支持I2S、PCM、TDM等多種音頻協議,廣泛用于音頻播放、錄音、語音處理等場景(如智能音箱、車載音響、工業音頻采集)。要啟用此SAI接口后,其在時鐘樹中的時鐘才會處于可配置狀態,
在這里插入圖片描述
SAI接口的時鐘,可以從 HSE 獲得,當然也可以使用獨立的定時器,此時需要勾選RCC配置中的 Audio Clock Input (IIS_CKIN)選項。
在這里插入圖片描述
音頻獨立時鐘,不是所有型號芯片都有的,比如,STM32F103就沒有,哈哈其時鐘樹看起來干凈了許多,
在這里插入圖片描述

晶體振蕩器?

正式開談前,必須要有的知識是,振蕩電路的類型,可不止RC電路哦,常見的震蕩電路類型有:
RC振蕩電路:由 電阻(R)和電容(C) 作為選頻網絡,輸出低頻信號(kHz級,如1kHz~1MHz)。
LC振蕩電路:由 電感(L)和電容(C) 作為選頻網絡,輸出高頻信號(MHz級,如射頻通信)。
晶體振蕩電路:由 石英晶體 作為選頻網絡,輸出高精度信號(MHz級,如MCU的HSE/LSE時鐘)。

針對物理外部時鐘源分類,其還會被分為晶振模式和旁路模式,此分類法的根本在于,是否使用了STM32內部晶體震蕩電路。下文將圍繞 Crystal/Ceramic Resonator、BYPASS Clock Source、有源晶振、無源晶振、旁路模式、晶振模式等概念及其關聯展開。

外部時鐘源類型

針對非專用外部時鐘源(或者是可以叫外部系統時鐘源吧),HSE 和 LSE 的配置選項都是下圖中,Disable、BYPASS Clock Source、Crystal/Ceramic Resonator 三個選項。MX中RCC如下配置中,為什么又是依據什么,如此劃分?
在這里插入圖片描述
溫習幾個單詞,crystal /?kr?stl/ 晶體的 ceramic /s??r?m?k/ 陶瓷的 resonator /'r?z?’net?/ 共振器 BYPASS 旁路的
知識繼續補充,Crystal Resonator(晶體諧振器) 和 Ceramic Resonator(陶瓷諧振器) 是兩種常見的無源諧振器類型,均用于為芯片提供穩定時鐘信號,通常情況下,晶體諧振器精度高、可靠性較好,但成本較高。
在這里插入圖片描述
針對外部時鐘源(HSE/LSE),將時鐘源分為 “晶振模式”(Crystal Mode) 和 “旁路模式”(Bypass Mode) 的分類依據是 “外部時鐘源是否需要STM32內部振蕩器提供激勵”,核心區別在于 外部器件是否自帶振蕩電路。內部時鐘源的振蕩電路和RC網絡 完全集成在STM32內部,無需外部元件,因此不存在“是否需要內部激勵”的問題。而外部時鐘源需根據 外部器件的類型決定是否啟用STM32內部振蕩器。

RCC 如何選擇

本小節算是結論先行吧。“晶振模式”和“旁路模式” 可統稱為“外部時鐘模式”,兩者的共同目標是為STM32提供 “外部時鐘源”(區別于內部時鐘源HSI/LSI),因此可統稱為 “外部時鐘配置模式”。有源晶振或外部時鐘信號,它們都是直接接收外部信號,無需借助STM32內部電路驅動,統稱為旁路模式,即 MX選項 BYPASS Clock Source。由于概念泛化或者什么歷史因素,無論是陶瓷諧振器還是晶體諧振器,這種無源的諧振器,都可以統稱為無源晶振,無源晶振本身不產生時鐘信號,需配合STM32內部的晶體振蕩器電路OSC來工作,此為晶振模式,即MX選項 Crystal/Ceramic Resonator。

旁路模式-有源晶振

曾經,我有一個疑問,使用有源晶振時,應該配置為那種模式,是旁路模式嗎?直接接入外部有源時鐘信號(由外部電路生成,如信號發生器、另一塊MCU的時鐘輸出),此時STM32內部振蕩器電路被旁路/BYPASS,時鐘信號直接從引腳輸入。

在一個工程下,我們分別將RCC配置為旁路模式和晶振模式,生成兩套代碼,來比較下驅動代碼,看看到底哪里不同,
在這里插入圖片描述
哈哈,全工程比較,就只有上述1行代碼不同(和我的想象不太一樣),我們繼續追 HAL_RCC_OscConfig 函數,

  */
__weak HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef  *RCC_OscInitStruct) {.../* Set the new HSE configuration ---------------------------------------*/__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
}
//上述宏函數定義如下
#define __HAL_RCC_HSE_CONFIG(__STATE__)                         \do {                                        \if ((__STATE__) == RCC_HSE_ON)            \{                                         \SET_BIT(RCC->CR, RCC_CR_HSEON);         \}                                         \else if ((__STATE__) == RCC_HSE_BYPASS)   \{                                         \SET_BIT(RCC->CR, RCC_CR_HSEBYP);        \SET_BIT(RCC->CR, RCC_CR_HSEON);         \}                                         \else                                      \{                                         \CLEAR_BIT(RCC->CR, RCC_CR_HSEON);       \CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);      \}                                         \} while(0U)

從上述代碼分析可知,RCC_HSE_BYPASS 類型是包含了 RCC_HSE_ON 類型的操作的,其包含兩步寄存器位設置操作。可以粗略的認為,設置完寄存器,剩下的過程,就交給CPU就跑就行了。從外層代碼看,無論是晶振/旁路模式,都要等待啟振,只耗時不同吧。

旁路模式-時鐘信號

ST官方STM32F429開發板例程中,其HSE配置就是旁路模式,
在這里插入圖片描述
通過評估板使用手冊和電路原理圖,可以清晰的卡到此時的旁路接線模式,
在這里插入圖片描述
MCO 是 Microcontroller Clock Output 的縮寫,即,微控制器時鐘輸出,是STM32芯片的一種特殊功能引腳,用于將內部時鐘信號(如PLL輸出、HSI、HSE等)通過GPIO引腳輸出到外部,供調試或外部設備使用。評估板的STLink部分使用的是STM32F103,通過其PA8管腳完成 MCO 功能,并鏈接到 F429 的 PH0/PF0-OSC_IN 管腳,這就完成了時鐘源旁路模式的硬件接線。另外,如果我們的板卡要共用背板上的時鐘總線,此時的時鐘源配置,也要是旁路模式。

頻率沖突和計算

在MX時鐘配置卡中,頻率是會自動去計算的。但需要意識到的一點是,原始的時鐘源,經過復用器、分頻器、鎖相環,以及MNPQ等參數的混合作用下,對于末端的頻率值,可能不會滿足各方需求,這時候自動頻率計算就會產生頻率沖突。我們以USB獨立時鐘和系統主時鐘之間的沖突來進行說明。在啟用USB2.0并配置其工作時鐘的過程中,注意到一個現象,
前文提到,USB使用頻率必須是48,不能是別的。這個48MHz的值,需要PLLM、PLLN,而PLLP到主時鐘的線路也要用到它們,這樣就可能會產生沖突。
在不啟用USB的情況下,我們很容易將系統時鐘配置為180MHz,
在這里插入圖片描述
接下來我們啟用USB,并配置其指定的工作頻率48MHz,此時會觸發以下自動時鐘配置,
在這里插入圖片描述
系統時鐘被自動配置成了72MHz,這顯然有點小啊。改回180MHz試試?
請添加圖片描述
如上動圖中,輸入主時鐘180,然后回車,MX將自動計算時鐘配置解決方案,其內部可能要經過權重和多方面的分析,以得到最優解。當然也有可能無解,如上圖的情況。想要PLLQ是48,同時HCLK=180,是沒辦法實現的。最終,
在這里插入圖片描述
這個時候,你要去靠你的大腦做分析,并手動調整。如調整PLLN=168,然后修改USB-CLOCK和HCLK為目標值,并回車,觸發自動分配。
在這里插入圖片描述

時鐘給誰用?

我在SPI編程實踐的過程中,配置SPI時鐘參數時,結合之前的知識,我給自己提出來這個問題。
在這里插入圖片描述
這個問題看似不難回答,CPU、DMA、各種高速和低速外設都要依賴時鐘來工作。更深的問題是,它們如何使用時鐘?我會在后續文章中整理對于 STM32 總線矩陣架構的筆記,屆時再戰吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919426.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

8 文本分析

全文檢索與常規關系型數據庫SQL查詢的顯著區別,就是全文檢索具備對大段文本進行分析的能力,它可以通過文本分析把大段的文本切分為細粒度的分詞。 elasticsearch在兩種情況下會用到文本分析: 原始數據寫入索引時,如果索引的某個字…

告別 Count Distinct 慢查詢:StarRocks 高效去重全攻略

在大數據分析中,去重計算(如 Count Distinct)是一個常見但計算開銷極高的操作,尤其在高基數和高并發場景下,常常成為查詢性能的瓶頸。以用戶訪問行為為例,同一用戶一天內多次訪問頁面時,PV 會累…

MVC、MVP、MVCC 和 MVI 架構的介紹及區別對比

?作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續分享Java技術內容。 🍎個人主頁:Meteors.的博客 💞當前專欄: ?特色專欄: 知識分享 🥭本…

【運維進階】Ansible 角色管理

Ansible 角色管理 實驗環境 [lthcontroller ~ 21:47:45]$ mkdir web && cd web[lthcontroller web 21:47:50]$ cat > ansible.cfg <<EOF [defaults] remote_user lth inventory ./inventory[privilege_escalation] become True become_user root become_m…

個人筆記SpringMVC

SpringMVC 1. 1.新建一個Maven-webapp項目 2.導入依賴pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.…

arcgis-提取范圍中最大占比面積的信息或唯一值

此方法本來應用于計算圖斑占最大面積的房屋質量等別/高程/坡度級別&#xff08;房屋質量等別/高程/耕地坡度計算在無特定條件下&#xff0c;遵循按面積占比最大值信息賦值&#xff09;。1、測試數據中&#xff0c;增加唯一值字段&#xff1a;WYZ&#xff0c;并刷上圖斑唯一值信…

Webapi發布后IIS超時(.net8.0)

文章目錄前言一、報錯信息二、日志分析三、分析四、最終解決辦法&#xff1a;前言 最近實現服務器數據導出&#xff1a; .net8.0的webapi 獲取到post請求&#xff0c;查詢數據后dbReader導出到workbook. 并保存Excel到遠程的文件服務器。 問題&#xff1a;本地調試無問題&…

linux中的hostpath卷、nfs卷以及靜態持久卷的區別

在 Linux 容器環境中&#xff0c;HostPath 卷、NFS 卷和靜態持久卷&#xff08;Static PersistentVolume&#xff09;是數據持久化的重要方案。三者的核心差異體現在管理方式、適用場景、跨節點能力等方面。核心定義與工作原理1. HostPath 卷定義&#xff1a;直接將容器所在宿主…

Unity 中控開發 多路串口服務器(一)

一 Unity 中控開發 多路串口服務器 多路串口服務器基礎型號配置被控投影設備LG-UART8 算法配置軟件結果測試多路串口服務器 你好&#xff01; 這是關于一篇使用TCP調用多路串口服務器的系列文章。在后續文章中,會結合使用Unity做一個中控系統 基礎 型號 ULEGS 多路串口服務…

服務器數據恢復—硬盤壞道離線導致raid崩潰的StorNext文件系統數據恢復案例

服務器存儲數據恢復環境&故障&#xff1a; 一臺昆騰存儲設備中有一組raid5磁盤陣列。陣列上有兩塊硬盤先后離線&#xff0c;raid5磁盤陣列不可用。服務器存儲數據恢復過程&#xff1a; 1、將故障服務器存儲內的所有磁盤編號后取出&#xff0c;將所有沒有離線的硬盤以只讀方…

C++小游戲NO.1游戲機

#include<conio.h> #include<windows.h> #include<bits/stdc.h> #include<cstdlib> #include<ctime> #include<vector> #include<string> using namespace std; int Your6,Other6; string daojuname[]{"放大鏡","sho…

OpenHarmony WebView引擎:從Chromium魔改到分布式渲染的終極解析

??? 架構解析 arkweb是OpenHarmony webview組件的Native引擎,基于Chromium和CEF構建。 OpenHarmony WebView是基于Chromium CEF構建的高性能Web渲染引擎,為OpenHarmony系統提供完整的Web內容展示能力。該引擎采用分層架構設計,實現了與ArkUI的深度集成。 ??? 架構設…

Mybatis-3自己實現MyBatis底層機制

MyBatis整體架構分析一圖勝千言1、Mybatis核心框架示意圖2、對上圖的解讀1)mybatis的核配置文件mybatis-config.xml:進行全局配置&#xff0c;全局只能有一個這樣的配置文件XxxMapper.xml配置多個SQL,可以有多個XxxMappe.xml配置文件 2)通過mybatis-config.xml配置文件得到SqlS…

Uniapp 之renderjs解決swiper+多個video卡頓問題

一、效果圖二、示例代碼 test.vue<template><view style"" :style"{height: windowHeightpx}"><swiper class"video-swiper" vertical change"swiperChange" :current"current" animationfinish"swiper…

設計模式之【快速通道模式】,享受VIP的待遇

文章目錄一、快速通道模式簡介1、簡介2、適用場景二、示例1、JDK源碼&#xff1a;ArrayList構造方法2、String.intern()方法3、緩存系統設計&#xff08;典型&#xff09;三、注意事項1、核心設計原則2、避坑指南參考資料一、快速通道模式簡介 1、簡介 快速通道模式是一種基于…

NineData云原生智能數據管理平臺新功能發布|2025年7月版

本月發布 23 項更新&#xff0c;其中重點發布 8 項、功能優化 15 項。重點發布數據庫 DevOps - 非表對象調試新增存儲過程、函數、包的調試功能&#xff0c;支持對象編譯、斷點設置、執行控制&#xff08;continue/step into/step over&#xff09;、變量調試等全流程操作。數據…

APM32芯得 EP.29 | 基于APM32F103的USB鍵盤與虛擬串口復合設備配置詳解

如遇開發技術問題&#xff0c;歡迎前往開發者社區&#xff0c;極海技術團隊將在線為您解答~ 極海官方開發者社區?https://community.geehy.cn/ 《APM32芯得》系列內容為用戶使用APM32系列產品的經驗總結&#xff0c;均轉載自21ic論壇極海半導體專區&#xff0c;全文未作任何修…

css過渡屬性

前言 該屬性用于元素各種 “改變” 后的過渡效果動畫&#xff0c;包括但不限于顏色、寬高、縮放等。 如下圖所示&#xff0c;使用過渡屬性便可輕松完成。 示例代碼 您可以直接復制運行&#xff0c;查看效果。 <div>demo</div>div {width:100px; height:100px;/* …

云計算核心技術之云存儲技術

一、云存儲技術1.1、云存儲是什么從狹義上來說&#xff0c;云存儲是指通過虛擬化、分布式技術、集群應用、網格技術、負載均衡等技術&#xff0c;將網絡中大量的存儲設備通過軟件集合起來高效協同工作&#xff0c;共同對外提供低成本、高擴展性的數據存儲服務。從廣義上來講&am…

在Ubuntu上安裝并使用Vue2的基本教程

我也準備要嘗試一些前端開發了&#xff01;發現網上有些教程寫得挺好&#xff0c;但是還是有點老&#xff08;并且有點錯誤&#xff09;&#xff0c;所以這里更新一下&#xff1a; 主要參考了這篇教程&#xff1a;Vue2——1. 安裝教程_vue2 cdn-CSDN博客 并且使用NPM方式進行…