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

stm32的五個時鐘源參數設置經驗

發布者:ShiningSmile最新更新時間:2024-09-04 來源: elecfans關鍵字:stm32  時鐘源  參數設置 手機看文章 掃描二維碼
隨時隨地手機看文章

一、在STM32中,有五個時鐘源,為HSI、HSE、LSI、LSE、PLL。

①HSI是高速內部時鐘,RC振蕩器,頻率為8MHz。

②HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。

③LSI是低速內部時鐘,RC振蕩器,頻率為40kHz。

④LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。

⑤PLL為鎖相環倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。


二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用內部RC振蕩器而不使用外部晶振,請按照下面方法處理:

①對于100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。②對于少于100腳的產品,有2種接法:第1種:OSC_IN和OSC_OUT分別通過10K電阻接地。此方法可提高EMC性能;第2種:分別重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1為推挽輸出并輸出'0'。此方法可以減小功耗并(相對上面)節省2個外部電阻。


三、用HSE時鐘,程序設置時鐘參數流程:01、將RCC寄存器重新設置為默認值RCC_DeInit;02、打開外部高速時鐘晶振HSERCC_HSEConfig(RCC_HSE_ON);03、等待外部高速時鐘晶振工作HSEStartUpStatus=RCC_WaitForHSEStartUp();04、設置AHB時鐘RCC_HCLKConfig;05、設置高速AHB時鐘RCC_PCLK2Config;06、設置低速速AHB時鐘RCC_PCLK1Config;07、設置PLLRCC_PLLConfig;08、打開PLLRCC_PLLCmd(ENABLE);09、等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)10、設置系統時鐘RCC_SYSCLKConfig;11、判斷是否PLL是系統時鐘while(RCC_GetSYSCLKSource()!=0x08)12、打開要使用的外設時鐘RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()


四、下面是STM32軟件固件庫的程序中對RCC的配置函數(使用外部8MHz晶振)

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

*FunctionName:RCC_Configuration

*Description:RCC配置(使用外部8MHz晶振)

*Input:無

*Output:無

*Return:無

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

voidRCC_Configuration(void)

{

/*將外設RCC寄存器重設為缺省值*/

RCC_DeInit();

/*設置外部高速晶振(HSE)*/

RCC_HSEConfig(RCC_HSE_ON);//RCC_HSE_ON——HSE晶振打開(ON)

/*等待HSE起振*/

HSEStartUpStatus=RCC_WaitForHSEStartUp();

if(HSEStartUpStatus==SUCCESS)//SUCCESS:HSE晶振穩定且就緒

{

/*設置AHB時鐘(HCLK)*/

RCC_HCLKConfig(RCC_SYSCLK_Div1);//RCC_SYSCLK_Div1——AHB時鐘=系統時鐘

/*設置高速AHB時鐘(PCLK2)*/

RCC_PCLK2Config(RCC_HCLK_Div1);//RCC_HCLK_Div1——APB2時鐘=HCLK

/*設置低速AHB時鐘(PCLK1)*/

RCC_PCLK1Config(RCC_HCLK_Div2);//RCC_HCLK_Div2——APB1時鐘=HCLK/2

/*設置FLASH存儲器延時時鐘周期數*/

FLASH_SetLatency(FLASH_Latency_2);//FLASH_Latency_22延時周期

/*選擇FLASH預取指緩存的模式*/

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//預取指緩存使能

/*設置PLL時鐘源及倍頻系數*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

//PLL的輸入時鐘=HSE時鐘頻率;RCC_PLLMul_9——PLL輸入時鐘x9

/*使能PLL*/

RCC_PLLCmd(ENABLE);

/*檢查指定的RCC標志位(PLL準備好標志)設置與否*/

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

{

}

/*設置系統時鐘(SYSCLK)*/

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//RCC_SYSCLKSource_PLLCLK——選擇PLL作為系統時鐘

/*PLL返回用作系統時鐘的時鐘源*/

while(RCC_GetSYSCLKSource()!=0x08)//0x08:PLL作為系統時鐘

{

}

}

/*使能或者失能APB2外設時鐘*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|

RCC_APB2Periph_GPIOC,ENABLE);

//RCC_APB2Periph_GPIOAGPIOA時鐘

//RCC_APB2Periph_GPIOBGPIOB時鐘

//RCC_APB2Periph_GPIOCGPIOC時鐘

//RCC_APB2Periph_GPIODGPIOD時鐘

}


五、時鐘頻率

STM32F103內部8M的內部震蕩,經過倍頻后最高可以達到72M。目前TI的M3系列芯片最高頻率可以達到80M。

在stm32固件庫3.0中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在后臺進行。系統給出的函數為SystemInit()。但在調用前還需要進行一些宏定義的設置,具體的設置在system_stm32f10x.c文件中。

文件開頭就有一個這樣的定義://#define SYSCLK_FREQ_HSEHSE_Value//#define SYSCLK_FREQ_20MHz 20000000//#define SYSCLK_FREQ_36MHz 36000000//#define SYSCLK_FREQ_48MHz 48000000//#define SYSCLK_FREQ_56MHz 56000000#define SYSCLK_FREQ_72MHz 72000000

ST 官方推薦的外接晶振是 8M,所以庫函數的設置都是假定你的硬件已經接了 8M 晶振來運算的.以上東西就是默認晶振 8M 的時候,推薦的 CPU 頻率選擇.在這里選擇了:#define SYSCLK_FREQ_72MHz 72000000也就是103系列能跑到的最大值72M

然后這個 C文件繼續往下看#elif defined SYSCLK_FREQ_72MHzconst uint32_t SystemFrequency= SYSCLK_FREQ_72MHz;const uint32_t SystemFrequency_SysClk = SYSCLK_FREQ_72MHz;const uint32_t SystemFrequency_AHBClk = SYSCLK_FREQ_72MHz;const uint32_t SystemFrequency_APB1Clk = (SYSCLK_FREQ_72MHz/2);const uint32_t SystemFrequency_APB2Clk = SYSCLK_FREQ_72MHz;

這就是在定義了CPU跑72M的時候,各個系統的速度了.他們分別是:硬件頻率,系統時鐘,AHB總線頻率,APB1總線頻率,APB2總線頻率.再往下看,看到這個了:#elif defined SYSCLK_FREQ_72MHzstatic void SetSysClockTo72(void);

這就是定義 72M 的時候,設置時鐘的函數.這個函數被 SetSysClock ()函數調用,而SetSysClock ()函數則是被 SystemInit()函數調用.最后 SystemInit()函數,就是被你調用的了

所以設置系統時鐘的流程就是:首先用戶程序調用 SystemInit()函數,這是一個庫函數,然后 SystemInit()函數里面,進行了一些寄存器必要的初始化后,就調用 SetSysClock()函數. SetSysClock()函數根據那個#define SYSCLK_FREQ_72MHz 72000000 的宏定義,知道了要調用SetSysClockTo72()這個函數,于是,就一堆麻煩而復雜的設置~!@#$%^然后,CPU跑起來了,而且速度是 72M. 雖然說的有點累贅,但大家只需要知道,用戶要設置頻率,程序中就做的就兩個事情:

第一個: system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000第二個:調用SystemInit()


關鍵字:stm32  時鐘源  參數設置 引用地址:stm32的五個時鐘源參數設置經驗

上一篇:STM32 BSRR BRR ODR寄存器詳情解析
下一篇:STM32F407 GPIO口輸入配置配置步驟

推薦閱讀最新更新時間:2025-04-19 10:49

ATmega64 時鐘源
時鐘源 ATmega64 芯片有如下幾種通過熔絲位選擇的時鐘源。時鐘輸入到AVR 時鐘發生器,并通往其他合 適的模塊。 Note: 1. 對于所有的熔絲位, “1” 表示未編程, “0” 代表已編程。 每個時鐘源在后續部分單獨介紹。當CPU 自掉電模式或省電模式喚醒之后,被選擇的時 鐘源用來為啟動過程定時,保證振蕩器在開始執行指令之前進入穩定狀態。當CPU 從復 位開始工作時,還有額外的延遲時間以保證在開始正常工作之前電源達到穩定電平。看門 狗振蕩器用來為自己的啟動時間定時。看門狗溢出時間所對應的WDT 振蕩器周期數列于 Table 7。看門狗振蕩器的頻率與工作電壓有關,具體請參見 P328“ATmega64 典型特性 –
[單片機]
ATmega64 <font color='red'>時鐘源</font>
Arduino 與 STM32 進行 CAN 通訊
接線 image.png Arduino 部分使用 MCP2515 模塊 MCP 2515 Arduino VCC 5V GND GND CS D10 SO (MISO) D12 SI (MOSI) D11 SCK D13 INT 不使用 Arduino 程序 /** CAN_test.ino */ #include SPI.h #include mcp2515.h struct can_frame canMsg1; struct can_frame canMsg2; struct can_frame recv_frame; MCP2515 mcp2515(10); void s
[單片機]
Mac搭建STM32環境(基于M1 PRO)報錯問題(No such file or directory))
首先寫出我的配置是跟著這位知乎大佬配置的: https://zhuanlan.zhihu.com/p/503001037 但是配置結束后報錯類似于: 編譯的時候報錯 找不到 stdint.h ,如下圖: /Users/plumyu/Desktop/NWatch源碼/Core/Inc/main.h:34:10: fatal error: common.h: No such file or directory 報錯信息 根據知乎評論里面的一個大佬說的如圖: 評論區 在我的電腦里面,用brew安裝的arm-none-eabi-gcc,確實也報了同樣的錯誤 解決方案就是去官網自行下載一個arm-none-eabi-gcc,然后配
[單片機]
STM32 - Retarget printf to usart
實現串口發送字符串函數。 /** * @brief USART1 send data * @param None * @retval None * @author shizj * @date 2019.07.10 */inline void USART1_SendData(uint8_t data){ /* Loop until the end of transmission */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { // __nop(); } /* Write a character to the USART *
[單片機]
入門單片機stm32定時器詳解
一、基本定時器介紹 在STM32中,基本定時器有TIM6、TIM7等。基本定時器主要包含時基單元,提供16位的計數,能計數0~65535。基本定時器除了計數功能以外,還能輸出給DAC模塊一個TRGO信號。基本定時器框圖如下: 二、時基單元介紹 STM32的所有定時器都具備時基單元,時基單元的功能就是簡單的計數,即計數時鐘源TMxCLK的脈沖個數,這個時鐘源來至APB1總線。高級和通用定時器還可以使用其他的時鐘源進行計數,在高級定時器和通用定時器中會詳細介紹。在基本定時器框架中可知時基單元包含如下三個部分: 1.ARR 自動重裝載寄存器 2.CNT 計數器 3.PSC 預分頻器 基本定時器的定時(計數)功能配置如下
[單片機]
stm32之can總線過濾器研究
stm32的can總線的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止時間觸發通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN報文只被發送1次,不管發送的結果如何(成功、出錯或仲裁丟失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure
[單片機]
STM32 庫函數處理 串口的例程
stm32使用庫函數編寫USART還是很方便的,現在轉幾個例子: 首先是不使用中斷的方法使用usart1,管腳pa9,pa10,此方法已在f3discovery上驗證通過,來源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902
[單片機]
Linux下開發STM32 使用gcc-arm-none-eabi工具鏈編譯生成bin、hex文件
1.為什么不是gcc 在開發stm32的時候,編譯工具鏈要使用gcc-arm-none-eabi,為什么不是gcc呢?這就要說到linux下的交叉編譯了,因為我們要在PC機上編譯出可以運行在ARM上的程序,使用gcc編譯出的是在PC上運行的程序,所以我們要使用gcc-arm-none-eabi進行交叉編譯~ 2.gcc-arm-none-eabi toolchain 介紹及安裝 gcc-arm-none-eabi是一個開源的ARM開發工具鏈,適用于Arm Cortex-M和Coretex-A系列處理器,包括GNU編譯器(GCC),以及GDB,可用于Windows,Linux,MacOS上的交叉編譯。 gcc-arm-none-
[單片機]
Linux下開發<font color='red'>STM32</font> 使用gcc-arm-none-eabi工具鏈編譯生成bin、hex文件
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 安岳县| 河源市| 永新县| 慈溪市| 陈巴尔虎旗| 芦溪县| 读书| 鹤庆县| 和林格尔县| 朝阳县| 那曲县| 将乐县| 台东县| 安阳市| 云龙县| 玉田县| 砀山县| 江达县| 博野县| 奉新县| 洛扎县| 视频| 杭锦后旗| 龙山县| 县级市| 连江县| 百色市| SHOW| 新乐市| 陈巴尔虎旗| 响水县| 那坡县| 鲁山县| 青岛市| 财经| 康保县| 鄯善县| 台湾省| 克东县| 闽清县| 鹿泉市|