STM32配置系統時鐘

1、STM32配置系統時鐘的步驟

1、系統時鐘配置步驟
先配置系統時鐘,后面的總線才能使用時鐘頻率
2、外設時鐘使能和失能
STM32為了低功耗,一開始是關閉了所有的外設的時鐘,所以外設想要工作,首先就要打開時鐘,所以后面在使用外設的時候必須先用這個宏打開相應的時鐘,比如打開GPIOA、ADC等外設的時鐘
3、sys_stm32_clock_init 函數(F1)
系統時鐘初始化函數

2、系統時鐘配置步驟

在這里插入圖片描述

3、外設時鐘使能和失能

在這里插入圖片描述

4、sys_stm32_clock_init 函數(F1)

在這里插入圖片描述

HAL_RCC_OscConfig()  //選擇時鐘源、配置PLL
HAL_RCC_ClockConfig() //選擇系統時鐘源,配置總線分頻器
//主要使用這兩個HAL庫函數實現系統時鐘配置

1、HAL_RCC_OscConfig()函數

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)

參數含義

typedef struct 
{ uint32_t  OscillatorType; 		/* 選擇需要配置的振蕩器,比如選擇HSE高速外部時鐘 */ uint32_t  HSEState; 			/* HSE 狀態 */ uint32_t  HSEPredivValue; 		/* HSE 預分頻值 */ uint32_t  LSEState; 			/* LSE 狀態 */ uint32_t  HSIState; 			/* HSI狀態 */ uint32_t  HSICalibrationValue; 	/* HSI 校準值 */ uint32_t  LSIState; 			/* LSI 狀態,看門狗需要使用 */ RCC_PLLInitTypeDef  PLL; 		/* PLL 結構體 */ 
}RCC_OscInitTypeDef;

PLL配置結構體

typedef struct 
{ uint32_t  PLLState; 		/* PLL 狀態 */ uint32_t  PLLSource; 	/* PLL 時鐘源 */ uint32_t  PLLMUL; 		/* PLL 倍頻系數 2-16倍頻 */ 
}RCC_PLLInitTypeDef;

2、HAL_RCC_ClockConfig函數(F1)

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)
typedef struct 
{ uint32_t  ClockType; 		/* 要配置的時鐘(SYSCLK/HCLK/PCLK1/PCLK2) */ uint32_t  SYSCLKSource; 		/* 系統時鐘源 */ uint32_t  AHBCLKDivider; 		/* AHB  時鐘預分頻系數 */ uint32_t  APB1CLKDivider; 	/* APB1 時鐘預分頻系數 */ uint32_t  APB2CLKDivider; 	/* APB2 時鐘預分頻系數 */ 
}RCC_ClkInitTypeDef;
uint32_t FLatency #define  FLASH_LATENCY_0   0x00000000U 				/* FLASH 0個等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_0 		/* FLASH 1個等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_1 		/* FLASH 2個等待周期 */

實際設置FLASH_ACR寄存器LATENCY位域,請參考《 STM32F10xxx閃存編程參考手冊.pdf 》3.1小節
在這里插入圖片描述

程序舉例

1、先配置HSE_VALUE,先告訴HAL庫實際高速外部晶振是多少MHz的
在這里插入圖片描述
可以看到HSE_VALUE 8000000U其實就是8MHz,就是在HAL庫中寫明了8MHz的外部晶振頻率
2、在啟動文件.s中,在復位函數Reset_Handler部分調用SystemInit函數
在這里插入圖片描述
3、調用HAL庫函數正式設置時鐘
在這里插入圖片描述

/*** @brief       系統時鐘初始化函數* @param       plln: PLL倍頻系數(PLL倍頻), 取值范圍: 2~16中斷向量表位置在啟動時已經在SystemInit()中初始化* @retval      無*/
void sys_stm32_clock_init(uint32_t plln)
{HAL_StatusTypeDef ret = HAL_ERROR;RCC_OscInitTypeDef rcc_osc_init = {0};RCC_ClkInitTypeDef rcc_clk_init = {0};rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;       /* 選擇要配置HSE,也就是選擇高速外部時鐘振蕩器 */rcc_osc_init.HSEState = RCC_HSE_ON;                         /* 打開HSE */rcc_osc_init.HSEPredivValue = RCC_HSE_PREDIV_DIV1;          /* HSE預分頻系數 */rcc_osc_init.PLL.PLLState = RCC_PLL_ON;                     /* 打開PLL */rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;             /* PLL時鐘源選擇HSE */rcc_osc_init.PLL.PLLMUL = plln;                             /* PLL倍頻系數 */ret = HAL_RCC_OscConfig(&rcc_osc_init);                     /* 初始化 */if (ret != HAL_OK){while (1);                                              /* 時鐘初始化失敗,之后的程序將可能無法正常執行,可以在這里加入自己的處理 */}/* 選中PLL作為系統時鐘源并且配置HCLK,PCLK1和PCLK2*/rcc_clk_init.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;        /* 設置系統時鐘來自PLL */rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;               /* AHB分頻系數為1 */rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV2;                /* APB1分頻系數為2 */rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV1;                /* APB2分頻系數為1 */ret = HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_2);  /* 同時設置FLASH延時周期為2WS,也就是3個CPU周期。 */if (ret != HAL_OK){while (1);                                              /* 時鐘初始化失敗,之后的程序將可能無法正常執行,可以在這里加入自己的處理 */}
}

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

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

相關文章

[安全實戰]逆向工程核心名詞詳解

逆向工程核心名詞詳解 一、調試與執行類 1. 斷點(Breakpoint) 定義:在代碼中設置標記,使程序執行到此處時暫停類型: 普通斷點:通過INT3指令實現條件斷點:滿足特定條件時觸發內存斷點&#xf…

Mac mini 安裝mysql數據庫以及出現的一些問題的解決方案

首先先去官網安裝一下mysql數據庫,基本上都是傻瓜式安裝的流程,我也就不詳細說了。 接下來就是最新版的mysql安裝的時候,他就會直接讓你設置一個新的密碼。 打開設置,拉到最下面就會看到一個mysql的圖標: 我設置的就是…

聚寬策略----國九條后中小板微盤小改,年化135.40%

最近在研究的聚寬策略,一般技術分析的我直接轉qmt了,財務因子有一點麻煩,我直接利用我開發強大的服務器系統,直接讀取信號,最近在優化一下系統,最近在開發對接bigquant的交易系統,完成了api數據…

C語言狀態字與庫函數詳解:概念辨析與應用實踐

C語言狀態字與庫函數詳解:概念辨析與應用實踐 一、狀態字與庫函數的核心概念區分 在C語言系統編程中,"狀態字"和"庫函數"是兩個經常被混淆但本質完全不同的概念,理解它們的區別是掌握系統編程的基礎。 1. 狀態字&…

End-to-End從混沌到秩序:基于LLM的Pipeline將非結構化數據轉化為知識圖譜

摘要:本文介紹了一種將非結構化數據轉換為知識圖譜的端到端方法。通過使用大型語言模型(LLM)和一系列數據處理技術,我們能夠從原始文本中自動提取結構化的知識。這一過程包括文本分塊、LLM 提示設計、三元組提取、歸一化與去重,最終利用 NetworkX 和 ipycytoscape 構建并可…

Leetcode 3523. Make Array Non-decreasing

Leetcode 3523. Make Array Non-decreasing 1. 解題思路2. 代碼實現 題目鏈接:3523. Make Array Non-decreasing 1. 解題思路 這一題思路上來說就是一個棧的問題,就是從后往前依次考察每一個元素,顯然,當前位置要么被舍棄&…

探秘STM32如何成為現代科技的隱形引擎

STM32單片機原理與應用 前言:微型計算機的硅腦 在我們身邊的每一個智能設備中,都隱藏著一個小小的"硅腦"——單片機。它們體積微小,卻能執行復雜的運算和控制功能,就像是現代科技世界的"神經元"。STM32系列…

機制的作用

“機制”是一個廣泛使用的概念,其含義和應用范圍因領域而異。在不同的學科和實際應用中,機制有著不同的定義和功能。以下從幾個主要領域對“機制”進行詳細解釋: 一、自然科學中的機制 (一)物理學 定義 在物理學中&…

prim最小生成樹+最大生成樹【C++】板子題

什么是最小生成樹? 在一給定的無向圖G (V, E) 中,(u, v) 代表連接頂點 u 與頂點 v 的邊,而 w(u, v) 代表此的邊權重,若存在 T 為 E 的子集(即)且為無循環圖,使得的 w(T) 最小,則此 …

讀書筆記--MySQL索引

索引(在 MySQL 中也叫做“鍵(key)”)是存儲引擎用于快速找到記錄的一種數據結構。 索引對于良好的性能非常關鍵。尤其是當表中的數據量越來越大時,索引對性能的影響愈發重要。在數據量較小且負載較低時,不恰當的索引對性能的影響可能還不明顯&#xff0c…

VS Code 遠程連接服務器:Anaconda 環境與 Python/Jupyter 運行全指南。研0大模型學習(第六、第七天)

VS Code 遠程連接服務器:Anaconda 環境與 Python/Jupyter 運行全指南 在使用 VS Code 通過 SSH 遠程連接到服務器進行開發時,尤其是在進行深度學習等需要特定環境的工作時,正確配置和使用 Anaconda 環境以及理解不同的代碼運行方式非常關鍵。…

字節頭條golang二面

docker和云服務的區別 首先明確Docker的核心功能是容器化,它通過容器技術將應用程序及其依賴項打包在一起,確保應用在不同環境中能夠一致地運行。而云服務則是由第三方提供商通過互聯網提供的計算資源,例如計算能力、存儲、數據庫等。云服務…

數據結構和算法(七)--樹

一、樹 樹是我們計算機中非常重要的一種數據結構,同時使用樹這種數據結構,可以描述現實生活中的很多事物,例如家譜、單位的組織架構、等等。 樹是由n(n>1)個有限結點組成一個具有層次關系的集合。把它叫做"樹"是因為它看起來像一…

狀態管理最佳實踐:Provider使用技巧與源碼分析

狀態管理最佳實踐:Provider使用技巧與源碼分析 前言 Provider是Flutter官方推薦的狀態管理解決方案,它簡單易用且功能強大。本文將從實戰角度深入講解Provider的使用技巧和源碼實現原理,幫助你更好地在項目中應用Provider進行狀態管理。 基…

使用 NEAT 進化智能體解決 Gymnasium 強化學習環境

使用 NEAT 進化智能體解決 Gymnasium 強化學習環境 0. 前言1. 環境定義2. 配置 NEAT3. 解決強化學習問題小結系列鏈接0. 前言 在本節中,我們使用 NEAT 解決經典強化學習 (reinforcement learning, RL) Gym 問題。但需要注意的是,我們用于推導網絡和解決方程的方法不是 RL,而…

Pandas高級功能

在數據科學與機器學習的廣闊天地中,Pandas宛如一把瑞士軍刀,以其強大的數據處理和分析能力,成為眾多數據從業者的得力助手。從基礎的數據讀寫、清洗到復雜的數據聚合、轉換,Pandas的功能豐富多樣。本文將深入探索Pandas的一些高級…

英語學習4.15

amateur amateur 🔤 讀音:/?m?t?r/ 或 /?m?t??r/ ? 詞性:名詞 / 形容詞 ? 中文釋義: (名詞)業余愛好者 ??👉 指不是以此為職業的人,通常出于興趣而從事某項活動。 ??…

Java開發軟件

Main.java // 主類,用于測試學生管理系統 public class Main { public static void main(String[] args) { StudentManagementSystem sms new StudentManagementSystem(); // 添加學生 sms.addStudent(new Student(1, "Alice", 20)…

多Agent框架及協作機制詳解

文章目錄 一、多智能體系統介紹1.1 多智能體系統定義1.2 多智能體協作1.3 協作類型1.4 協作策略1.5 通信結構1.6 協調與編排 1.3 多智能體與單智能體對比1.4 應用場景 二、多Agent開發框架AutoGenMetaGPTLangGraphSwarmCrewAI 三、多智能體協作方式3.1 MetaGPT:SOP驅…

AI Agent破局:智能化與生態系統標準化的顛覆性融合!

Hi!好久不見 云邊有個稻草人-個人主頁 熱門文章_云邊有個稻草人的博客-本篇文章所屬專欄~ 目錄 一、引言 二、AI Agent的基本概念 2.1 定義與分類 2.2 AI Agent的工作原理 2.3 示例代碼:AI Agent的基本實現 三、AI Agent在企業數字化轉型中的應用 …