初學stm32 --- 時鐘配置

?

目錄

?

stm32時鐘系統

時鐘源

(1) 2 個外部時鐘源:

(2)2 個內部時鐘源:

鎖相環 PLL

????????PLLXTPRE: HSE 分頻器作為 PLL 輸入 (HSE divider for PLL entry)

????????PLLSRC: PLL 輸入時鐘源 (PLL entry clock source)

????????PLLMUL: PLL 倍頻系數 (PLL multiplication factor)

系統時鐘 SYSCLK

????????APB1 總線時鐘

????????APB2 總線時鐘

時鐘信號輸出 MCO

RCC相關配置寄存器


stm32時鐘系統

圖1 STM32F1 時鐘系統圖

????????圖中A表示其他電路需要的輸入源時鐘信號;B為一個特殊的振蕩電路“PLL”,由幾個部分構成;C為重點要關注的MCU內的注釋中“SYSCLK”; AHB預分配器將SYSCLK分頻或不分頻后分發給其他外設進行處理,包括到F部分的Cortex-M內核系統時鐘。D和E部分分別為定時器等外設的時鐘源APB/APB2。G是STM32的時鐘輸出功能。

時鐘源

? ? ? ? 對于STM32F1,輸入時鐘源主要包括HSI,HSE,LSI,LSE。其中,從時鐘頻率來可以分為高速時鐘源和低速時鐘源,其中HSI、HSE高速時鐘,LSI、LSE是低速時鐘。從來源可分為外部時鐘源和內部時鐘源,外部時鐘源就是從外部通過接晶振的方式獲取時鐘源,其中 HSE 和 LSE 是外部時鐘源;其他是內部時鐘源,芯片上電即可產生,不需要借助外部電路。

(1) 2 個外部時鐘源:

  • ? ? ? ? 高速外部震蕩器HSE(High Speed External Clock signal)

????????外接石英/陶瓷諧振器,頻率為 4MHz~16MHz。本開發板使用的是 8MHz。

  • ????????低速外部振蕩器 LSE (Low Speed External Clock signal)

????????外接 32.768kHz 石英晶體,主要作用于 RTC 的時鐘源。

(2)2 個內部時鐘源:

  • ????????高速內部振蕩器 HSI(High Speed Internal Clock signal)

????????由內部 RC 振蕩器產生,頻率為 8MHz。

  • ????????低速內部振蕩器 LSI(Low Speed Internal Clock signal)

????????由內部 RC 振蕩器產生,頻率為 40kHz,可作為獨立看門狗的時鐘源

????????芯片上電時默認由內部的 HSI 時鐘啟動,如果用戶進行了硬件和軟件的配置,芯片才會根據用戶配置調試嘗試切換到對應的外部時鐘源,所以同時了解這幾個時鐘源信號還是很有必要的。

鎖相環 PLL

????????鎖相環是自動控制系統中常用的一個反饋電路, 在 STM32 主控中,鎖相環的作用主要有兩個部分:輸入時鐘凈化和倍頻。 前者是利用鎖相環電路的反饋機制實現,后者我們用于使芯片在更高且頻率穩定的時鐘下工作。

????????在 STM32 中, 鎖相環的輸出也可以作為芯片系統的時鐘源。 根據圖 1 的時鐘結構,使用鎖相環時只需要進行三個部分的配置。為了方便查看,截取了使用 PLL 作為系統時鐘源的配置部分,如圖 2?所示。

圖2 PLL 時鐘配置圖

????????圖 2 借用了在 CubeMX 下用鎖相環配置 72MHz 時鐘的一個示例:

  • ????????PLLXTPRE: HSE 分頻器作為 PLL 輸入 (HSE divider for PLL entry)

????????即圖2在標注為①的地方, 它專門用于 HSE, ST 設計它有兩種方式,并把它的控制功能放在 RCC_CFGR 寄存器中, 我們引用如圖3。
?

圖3 設置選項值

?????????從 F103 參考手冊可知它的值有兩個:一是 2 分頻, 另一種是 1 分頻(不分頻)。經過 HSE 分頻器處理后的輸出振蕩時鐘信號比直接輸入的時鐘信號更穩定。

  • ????????PLLSRC: PLL 輸入時鐘源 (PLL entry clock source)

????????圖2中②表示的是 PLL 時鐘源的選擇器, 同樣的,參考 F103 參考手冊:

圖4 PLLSRC 鎖相環時鐘源選擇

?????????它有兩種可選擇的輸入源:設計為 HSI 的二分頻時鐘, 另一個是 A 處的 PLLXTPRE 處理后的 HSE 信號。

  • ????????PLLMUL: PLL 倍頻系數 (PLL multiplication factor)

????????圖2中③所表示的配置鎖相環倍頻系數,同樣地可以查到在 STM32F1 系列中, ST 設置它的有效倍頻范圍為 2~16 倍。

????????結合圖 2,要實現 72MHz 的主頻率,我們通過選擇 HSE 不分頻作為 PLL 輸入的時鐘信號, 即輸入 8Mhz,通過標號③選擇倍頻因子,可選擇 2-16 倍頻,我們選擇 9 倍頻,這樣可以得到時鐘信號為 8*9=72MHz。??????

系統時鐘 SYSCLK

?????????STM32 的系統時鐘 SYSCLK 為整個芯片提供了時序信號。我們已經大致知道 STM32 主控是時序電路鏈接起來的。對于相同的穩定運行的電路,時鐘頻率越高,指令的執行速度越快,單位時間能處理的功能越多。 STM32 的系統時鐘是可配置的,在 STM32F1 系列中,它可以為HSI、 PLLCLK、 HSE 中的一個,通過 CFGR 的位 SW[1:0]設置。

????????講解 PLL 作為系統時鐘時,根據我們開發板的資源,可以把主頻通過 PLL 設置為 72MHz。仍使用 PLL 作為系統時鐘源,如果使用 HSI/2,那么可以得到最高主頻 8MHz/2*16=64MHz。

????????從上面的圖 2 時鐘樹圖可知, AHB、 APB1、 APB2、內核時鐘等時鐘通過系統時鐘分頻得到。根據得到的這個系統時鐘,下面我們結合外設來看一看各個外設時鐘源
?

圖5 STM32F103 系統時鐘生成圖

?????????看圖5 STM32F103 系統時鐘, 標號 C 為系統時鐘輸入選擇,可選時鐘信號有外部高速時鐘 HSE(8M)、內部高速時鐘 HSI(8M)和經過倍頻的 PLL CLK(72M),選擇 PLL CLK 作為系統時鐘,此時系統時鐘的頻率為 72MHz。系統時鐘來到標號 D 的 AHB 預分頻器,其中可選擇的分頻系數為 1, 2, 4, 8, 16, 32, 64, 128, 256,我們選擇不分頻,所以 AHB 總線時鐘達到最大的 72MHz。

????????下面介紹一下由 AHB 總線時鐘得到的時鐘:

????????APB1 總線時鐘

????????由 HCLK 經過標號 E 的低速 APB1 預分頻器得到,分頻因子可以選擇 1, 2, 4, 8, 16,這里我們選擇的是 2 分頻,所以 APB1 總線時鐘為 36M。由于 APB1 是低速總線時鐘,所以 APB1 總線最高頻率為 36MHz,片上低速的外設就掛載在該總線上,例如有看門狗定時器、定時器 2/3/4/5/6/7、 RTC 時鐘、 USART2/3/4/5、 SPI2(I2S2)與 SPI3(I2S3)、 I2C1 與 I2C2、CAN、 USB 設備和 2 個 DAC。

????????APB2 總線時鐘

????????由 HCLK 經過標號 F 的高速 APB2 預分頻器得到,分頻因子可以選擇 1, 2, 4, 8, 16,這里我們選擇的是 1 即不分頻,所以 APB2 總線時鐘頻率為 72M。與 APB2 高速總線鏈接的外設有外部中斷與喚醒控制、 7 個通用目的輸入/輸出口(PA、 PB、 PC、 PD、 PE、 PF和 PG)、定時器 1、定時器 8、 SPI1、 USART1、 3 個 ADC 和內部溫度傳感器。其中標號 G 是ADC 的預分頻器。

????????此外, AHB 總線時鐘直接作為 SDIO、 FSMC、 AHB 總線、 Cortex 內核、存儲器和 DMA 的HCLK 時鐘,并作為 Cortex 內核自由運行時鐘 FCLK。

圖6?USB、 RTC、 MCO 相關時鐘

?????????標號 H 是 USBCLK,是一個通用串行接口時鐘,時鐘來源于 PLLCLK。 STM32F103 內置全速功能的 USB 外設,其串行接口引擎需要一個頻率為 48MHz 的時鐘源。該時鐘源只能從PLL 輸出端獲取,可以選擇為 1.5 分頻或者 1 分頻,也就是,當需要使用 USB 模塊時, PLL 必須使能,并且時鐘頻率配置為 48MHz 或 72MHz。

????????標號 I 是 MCO 輸出內部時鐘, STM32 的一個時鐘輸出 IO(PA8),它可以選擇一個時鐘信號輸出,可以選擇為 PLL 輸出的 2 分頻、 HSI、 HSE、或者系統時鐘。這個時鐘可以用來給外部其他系統提供時鐘源。

?????????標號 J 是 RTC 定時器,其時鐘源為 HSE/128、 LSE 或 LSI。

時鐘信號輸出 MCO

?STM32 允許通過設置, 通過 MCO 引腳輸出一個穩定的時鐘信號。在圖1 中標注為“G”的部分。以下四個時鐘信號可被選作 MCO 時鐘:

????????● SYSCLK

????????● HSI

????????● HSE

????????● 除 2 的 PLL 時鐘

????????時鐘的選擇由時鐘配置寄存器(RCC_CFGR)中的 MCO[2:0]位控制。

????????我們可以通過 MCO 引腳來輸出時鐘信號, 測試輸出時鐘的頻率,或作為其它需要時鐘信號的外部電路的時鐘。

RCC相關配置寄存器

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

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

相關文章

【Java基礎面試題025】什么是Java的Integer緩存池?

回答重點 Java的Integer緩存池(Integer Cache)是為了提升性能和節省內存。根據實踐發現大部分的數據操作都集中在值比較小的范圍,因此緩存這些對象可以減少內存分配和垃圾回收的負擔,提升性能 在 -128到127范圍內的Integer對象會…

Nginx IP優化限制策略

Nginx 如何限制每個 IP 地址的連接數,優化資源分配? Nginx 限制每個 IP 地址的連接數 Nginx 提供了多種機制來限制單個 IP 地址所能建立的同時連接數,這對于防止資源耗盡和提高服務穩定性至關重要。以下是幾種有效策略: 1. 使用…

[spring]XML配置文件標簽

spring的XML配置文件的標簽大體可以分為兩種: 其中的默認標簽,我們前面文章里面出現的標簽都是默認標簽,是spring本身自帶的,不需要我們去引入其他東西。而自定義標簽則是指非默認標簽的其他的由我們或產品發行方自定義的對接spir…

簡單的bytebuddy學習筆記

簡單的bytebuddy學習筆記 此筆記對應b站bytebuddy學習視頻進行整理,此為視頻地址,此處為具體的練習代碼地址 一、簡介 ByteBuddy是基于ASM (ow2.io)實現的字節碼操作類庫。比起ASM,ByteBuddy的API更加簡單易用。開發者無需了解class file …

【信息系統項目管理師】高分論文:論信息系統項目的進度管理(人力資源管理系統)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文1、規劃進度管理3、排列活動順序4、估算活動持續時間5、制訂進度計劃6、控制進度論文 2022年2月,我作為項目經理參與了XX電網公司人力資源管理系統建設項目,該項目是2022年XX電網公司“十三五”信息化規…

vue3項目結合Echarts實現甘特圖(可拖拽、選中等操作)

效果圖: 圖一:選中操作 圖二:上下左右拖拽操作 本案例在echarts???????示例機場航班甘特圖的基礎上修改??????? 封裝ganttEcharts組件,測試數據 airport-schedule.jsonganttEcharts代碼: 直接復制粘貼可測????…

GIT安裝過程

文章目錄 ?下載安裝包?安裝過程?驗證安裝?Git的基本使用? ?Git的安裝可以通過以下步驟完成? ?下載安裝包? 首先,訪問Git官網(https://git-scm.com/)或Git for Windows(https://gitforwindows.org/)下載對應系統的安裝包。 對于Windows系統,通常…

Java 技術面試常見問題解析

1.說說Mybatis的緩存機制: MyBatis 是一個優秀的持久層框架,它簡化了企業應用開發中數據庫操作的代碼。MyBatis 提供了一級緩存和二級緩存機制來優化對數據庫的訪問。 一級緩存 (SqlSession級別的緩存) 一級緩存是 MyBatis 中默認開啟且無法關閉的緩存機制。它存…

Word使用分隔符實現頁面部分分欄

文章目錄 Word使用分隔符實現頁面部分分欄分隔符使用頁面設置 Word使用分隔符實現頁面部分分欄 分隔符使用 word中的分隔符: 前面不分欄,后面分欄(或前面分欄,后面不分欄),只需要在分隔位置處插入分隔符:“連續”即…

掌握 Spring Boot 中的 WebClient:何時以及為何使用它而不是 RestTemplate

在開發 Spring Boot 應用程序時,與 RESTful Web 服務進行通信是一項常見需求。從歷史上看,開發人員已將RestTemplate用于此目的。然而,隨著反應式編程的出現和對更高效資源利用的需求,WebClient已成為首選。本文探討了RestTemplat…

主曲率為常數時曲面分類

主曲率為常數 ? K , H \Leftrightarrow K,H ?K,H 為常數,曲面分類: 1.若 k 1 k 2 0 k_1k_20 k1?k2?0,則 S S S為全臍點曲面——平面的一部分; 2.若 k 1 k 2 ≠ 0 k_1k_2\neq0 k1?k2?0,則 S S S為全臍點曲面——球面的一部分&…

asp.net core發布配置端口號,支持linux

方式一,修改配置文件 appsettings.json 找到文件 appsettings.json, 添加如下節點配置,在linux環境需要設置0.0.0.0才可以正常代表本機,然后被其他機器訪問,此處設置端口8000, "Kestrel": {&quo…

【安當產品應用案例100集】033-安當TDE透明加密在移動存儲加密中的應用案例

背景介紹 隨著移動互聯網的普及,企業和個人越來越依賴移動存儲設備,如U盤、移動硬盤以及云存儲服務進行數據的存儲和傳輸。然而,這種便捷性也帶來了數據安全的隱患。如何確保存儲在移動設備上的數據不被非法訪問和泄露,成為企業和…

【linux 內存】cat /proc/meminfo、free

cat /proc/meminfo 各字段詳解 /proc/meminfo是了解Linux系統內存使用狀況的主要接口,我們最常用的”free”、”vmstat”等命令就是通過它獲取數據的 ,/proc/meminfo所包含的信息比”free”等命令要豐富得多,因此需要了解這些字段的含義。 …

Android HandlerThread、Looper、MessageQueue 源碼分析

Android HandlerThread、Looper、MessageQueue 源碼分析 簡介 在 Android 開發中,大家應該對 HandlerThread 有一定了解。顧名思義,HandlerThread 是 Thread 的一個子類。與普通的 Thread 不同,Thread 通常一次只能執行一個后臺任務&#x…

配置PostgreSQL用于集成測試的步驟

在進行軟件開發時,集成測試是確保各個組件能夠協同工作的關鍵環節。PostgreSQL作為一種強大的開源數據庫系統,常被用于集成測試中。下面將詳細介紹如何在不同的環境中配置PostgreSQL以支持集成測試。 1. 選擇并安裝PostgreSQL 首先,你需要根…

WebRTC搭建與應用(一)-ICE服務搭建

WebRTC搭建與應用(一) 近期由于項目需要在研究前端WebGL渲染轉為云渲染,借此機會對WebRTC、ICE信令協議等有了初步了解,在此記錄一下,以防遺忘。 第一章 ICE服務搭建 文章目錄 WebRTC搭建與應用(一)前言一、ICE是什么?二、什么…

【學習筆記】深入淺出詳解Pytorch中的View, reshape, unfold,flatten等方法。

文章目錄 一、寫在前面二、Reshape(一)用法(二)代碼展示 三、Unfold(一)torch.unfold 的基本概念(二)torch.unfold 的工作原理(三) 示例代碼(四&a…

深入理解 MySQL 索引

引言 在數據庫管理中,索引(Index)是提高查詢性能的關鍵技術之一。MySQL 是最流行的關系型數據庫管理系統之一,廣泛應用于各種規模的應用程序中。本文將深入探討 MySQL 中的索引概念、類型、工作原理以及最佳實踐,幫助…

利用notepad++刪除特定關鍵字所在的行

1、按組合鍵Ctrl H,查找模式選擇 ‘正則表達式’,不選 ‘.匹配新行’ 2、查找目標輸入 : ^.*關鍵字.*\r\n (不保留空行) ^.*關鍵字.*$ (保留空行)3、替換為:(空) 配置界面參考下圖: ??…