RCC主要作用:時鐘
設置SYSCLK 設置AHB分頻因子····配置好這些因子就能對時鐘進行完整的配置。
時鐘樹如圖:
系統時鐘的選擇是在啟動時進行,復位時內部8MHz的RC振蕩器被選為默認的CPU時鐘,隨后可以
選擇外部的、具失效監控的4~16MHz時鐘;當檢測到外部時鐘失效時,它將被隔離,系統自動地切
換到內部的RC振蕩器,如果使能了中斷,軟件可以接收到相應的中斷。同樣,在需要時可以采取對
PLL時鐘完全的中斷管理(如當一個間接使用的外部振蕩器失效時)。
多個預分頻器用于配置AHB的頻率、高速APB(APB2)和低速APB(APB1)區域。AHB和APB的最高頻
率是36MHz。
編程要領:
1)開啟HSE/HSI 等待HSE/HSI 穩定
2)設置AHB,APB2,APB1的預分頻因子
3)設置PLL的時鐘來源和PLL的倍頻因子,各個頻率主要在這里設置
4)開啟PLL 等待PLL穩定
5)把PLLCK切換為系統時鐘SYSCLK
6)讀取時鐘切換狀態位,確保PLLCLK被選中為系統時鐘
HSE配置系統時鐘
#include "stm32f10x.h"
#include "bsp_rccclkconfig.h"
void HSE_SetSysClk(uint32_t RCC_PLLMul_x) //設置HSE為系統時鐘
{
//把RCC外設初始化成復位狀態
ErrorStatus HSEStatus;
//把RCC寄存器復位
RCC_DeInit();
//使能HSE,開啟外部晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待HSE啟動
HSEStatus=RCC_WaitForHSEStartUp();
//當HSE穩定之后繼續往下執行
if(HSEStatus== SUCCESS )
{
//使能預取指
FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//LATENCY:時延
//這些位表示SYSCLK(系統時鐘)周期與閃存訪問時間的比例
//000:零等待狀態,當 0 < SYSCLK ≤ 24MHz
//001:一個等待狀態,當 24MHz < SYSCLK ≤ 48MHz
//010:兩個等待狀態,當 48MHz < SYSCLK ≤ 72MHz
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div2);
//配置PLLCLK = HSE *RCC_PLLMul_x
RCC_PLLConfig( RCC_PLLSource_HSE_Div1,RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL時鐘穩定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET )
{
//選擇系統時鐘
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() !=0x08);
}
}
else
{
}
}
void MCO_GPIO_Config()
{
//定義一個GPIO_InitTypeDef類型的結構體
GPIO_InitTypeDef GPIO_InitStructure;
//開啟LED相關GPIO的外設時鐘
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
//選擇控制的引腳
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
//選擇輸出方式為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//設置引腳速率為50MHZ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//調用庫函數,初始化GPIO
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
使用HSI作為系統時鐘
#include "stm32f10x.h"
#include "bsp_rccclkconfig.h"
void HSI_SetSysClk(uint32_t RCC_PLLMul_x) //設置HSE為系統時鐘
{
//把RCC外設初始化成復位狀態
__IO uint32_t HSIStatus=0;
//把RCC寄存器復位
RCC_DeInit();
//使能HSI,開啟外部晶振
RCC_HSICmd(ENABLE);
//等待HSE啟動
HSIStatus =RCC->CR & RCC_CR_HSIRDY;
//當HSE穩定之后繼續往下執行
if(HSIStatus== SUCCESS )
{
//使能預取指
FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//設置SYSCLK周期與flash的訪問時間比例,這里為2
//設置成2的時候,SYSCLK低于48MHz也可以工作,設置成0或者1
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div2);
//配置PLLCLK = HSE *RCC_PLLMul_x
RCC_PLLConfig( RCC_PLLSource_HSI_Div2,RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL時鐘穩定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET )
{
//選擇系統時鐘
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() !=0x08);
}
}
else
{
}
}
void MCO_GPIO_Config()
{
//定義一個GPIO_InitTypeDef類型的結構體
GPIO_InitTypeDef GPIO_InitStructure;
//開啟LED相關GPIO的外設時鐘
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
//選擇控制的引腳
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
//選擇輸出方式為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//設置引腳速率為50MHZ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//調用庫函數,初始化GPIO
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
上一篇:STM32-EXTI中斷的分析及應用
下一篇:【菜鳥入門】stm32 之 pwm
推薦閱讀
史海拾趣
Ferroperm公司成立于XXXX年,由一群熱衷于電磁材料研究的科學家和工程師共同創立。創立之初,公司便致力于電磁材料和相關產品的研發和生產。通過對市場需求的精準把握和對技術創新的持續投入,Ferroperm很快在電磁材料領域取得了初步的成功,并積累了一定的客戶基礎。
CYANLITE公司一直秉持著綠色環保的理念,致力于推廣節能減排的照明產品。他們不僅在產品設計上注重節能和環保,還積極參與各種環保公益活動,向公眾普及LED照明的優勢。這種積極的環保態度使得CYANLITE公司在市場上樹立了良好的形象,也吸引了越來越多的消費者選擇他們的產品。同時,公司還積極與政府部門合作,推動LED照明在公共領域的普及和應用。
隨著技術的不斷進步和市場需求的不斷變化,CORPRO始終保持著對創新的追求和投入。近年來,公司不僅加強了在集成電路設計、微波組件開發等領域的研發能力,還積極拓展物聯網、大數據等新興領域的應用場景。這些努力使得CORPRO在行業內獲得了廣泛認可,并多次榮獲各類榮譽獎項。例如,在2022年5月20日,CORPRO入選了四川省擬推薦2022年度國家技術創新示范企業公示名單,這一榮譽再次證明了CORPRO在電子行業的實力和影響力。
總之,成都振芯/國騰(CORPRO)公司的發展歷程充滿了挑戰與機遇。通過不斷的努力和創新,CORPRO已經成長為電子行業中一家具有強大實力和廣泛影響力的企業。未來,CORPRO將繼續致力于技術創新和市場拓展,為電子行業的發展貢獻更多力量。
在電子行業的激烈競爭中,D+H Mechatronic AG公司憑借其在精密機械與電子技術結合領域的深厚積累,成功研發出一款具有劃時代意義的智能機械臂。這款機械臂不僅具有高精度、高速度的運動性能,還能通過智能算法實現自主學習和優化操作路徑。這一技術的突破為公司在工業自動化領域贏得了極高的聲譽,也為其后續的市場拓展奠定了堅實的基礎。
隨著全球市場的不斷擴展,Herrmann Kg積極實施全球化發展戰略。公司在德國和匈牙利設有生產廠房,并在歐洲、美洲和亞洲等多個國家設有分支機構。通過全球化布局,Herrmann Kg能夠更好地服務全球客戶,同時利用各地的資源和優勢進行技術創新和市場拓展。這種全球化戰略不僅提升了公司的市場影響力,還為其未來的持續發展奠定了堅實的基礎。
請注意,以上故事是基于Herrmann Kg在超聲波焊接技術領域的整體發展情況進行構想的,并非直接來源于特定事件的報道或官方聲明。因此,在描述過程中可能存在一定的想象和推測成分。然而,這些故事旨在展示Herrmann Kg在電子行業及相關領域中的發展成就和趨勢。
Bkc深知人才是企業發展的核心動力。因此,公司高度重視研發團隊的建設和人才培養。通過引進業內頂尖的技術人才和提供完善的培訓機制,Bkc逐漸打造出一支技術實力雄厚的研發團隊。這支團隊不僅為公司帶來了源源不斷的技術創新,也為公司的長遠發展奠定了堅實的基礎。
小弟對單片機零基礎,老師給的題目是《汽車后視鏡自動控制》,自學了一段時間困難重重,光看書,感覺太過抽象,而且對一些術語不懂,請各位大俠指點迷經,我現在該怎么來學,還2個多月時間,可以搞定么,對這個題目有什么見解,幫小弟一下,過兩天 ...… 查看全部問答∨ |
1000元求教Yacc Lex C到VHDL最基本功能編譯器 各位前輩,本人求一個C到VHDL轉換編譯器的代碼, 功能: 只需要最基本的功能,這里給出一個C寫的加法器程序并給出一個相應應該轉換成的VHDL(見附件2頁的論文中),當然您也可以自行修改,或是直接給個另外的程序,當然越簡單越好。但是只需要完成 ...… 查看全部問答∨ |
小弟是軟件開發的,目前要寫一款與GPRS通訊的上位機軟件,但是不明白軟件與GPRS的通訊流程,簡單點說就是不知道軟件的數據包該發送到哪,比如說 數據→軟件→串口→單片機 ;就類似這種的說明,到底整套系統的結構是什么樣的 ...… 查看全部問答∨ |
|
哪位有完整的代碼,可以發一下嗎? 或者說個有效的地址,謝謝! 也可以發到信箱或者qq聯系我 big-genie@163.com qq:279166805 … 查看全部問答∨ |
|
MRS R0, PRIMASK CPSID I 這兩個指令應該是在特權級下才能訪問的吧,在用戶級下使用的話,產生BusFault的 但是,我在移植ucosii操作系統的時候,在任務切換時,切換到用戶級 PSP下運行,運行到關中斷 ...… 查看全部問答∨ |
|
設計資源 培訓 開發板 精華推薦
- 利用STM32MP1和STM32MP2在嵌入式 Linux 平臺上部署有效的安全保護機制
- 超小但強大:MCU 的小尺寸封裝和集成如何幫助優化空間受限的設計
- 德州儀器推出全球超小型 MCU,助力微型應用創新
- Microchip推出電動兩輪車(E2W)生態系統,加速電動出行創新
- 意法半導體推出STM32U3微控制器,面向遠程、智能和可持續應用,拓展超低功耗系列創新
- (一) ECloudIDE入門STM32-CubeMX工程創建與導入
- (二)ECloudIDE入門STM32-官方寄存器版例程使用
- Simulink STM32F407VGT6實現硬件在環
- openharmony:hilog_lite組件移植