久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6848|回復: 0
打印 上一主題 下一主題
收起左側

STM32-RCC時鐘詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:85681 發表于 2015-7-15 02:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32中在使用任何一個外設都必須打開相應的時鐘,所以我從STM32的時鐘學起。

在STM32中有5個時鐘源:①、HSI是高速內部時鐘,RC震蕩器,頻率為 8MHz。
②、HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。
③、LSI是低速內部時鐘,RC振蕩器,頻率為40kHz。
④、LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。
⑤、PLL為鎖相環倍頻輸出,其時鐘輸入源可選擇為HIS/2、HSE或HSE/2。倍頻可選擇為2~16倍,但其輸出頻率最大不得超過72MHz。
系統時鐘SYSCLK,它是供STM32中絕大部分器件工作的時鐘源,系統時鐘可選擇為PLL輸出、HSI或者HSE。系統時鐘的做大頻率為72MHz,它通過AHB分頻器分頻后送給個模塊使用,AHB分頻器可選擇1、2、4、8、16、32、64、128、256、512分頻。AHB分頻器輸出的時鐘送給5大模塊使用:
1.       送給AHB總線、內核、內存和DMA使用的HCLK時鐘。
2.       通過8分頻后送給Cortex的系統定時器時鐘。
3.       直接送給Cortex的空閑運行時鐘PCLK。
4.       送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設使用(PCLK1,最大頻率36MHz),另一路送給定時器(Timer)2、3、4倍頻器使用。該倍頻器可選擇1或者2倍頻,時鐘輸出供定時器234使用。
5.       送給APB2分頻器。APB2分頻器可選擇124816分頻,其輸出一路供APB2外設使用(PCLK2,最大頻率72MHz),另一路送給定時器(Timer)1倍頻器使用。該倍頻器可選擇1或者2倍頻,時鐘輸出供定時器1使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2468分頻。
連接在APB1(低速外設)上的設備有:電源接口、備份接口、CANUSBI2C1I2C2UART2UART3SPI2、窗口看門狗、Timer2Timer3Timer4
連接在APB2(高速外設)上的設備有:UART1SPI1Timer1ADC1ADC2、所有普通IO口、第二功能IO口。
寄存器描述:
typedef struct
{
vu32 CR;                  //HSI,HSE,CSS,PLL
等的使能
vu32 CFGR;              //PLL
等的時鐘源選擇以及分頻系數設定
vu32 CIR;                //
清除/使能時鐘就緒中斷
vu32 APB2RSTR;      //APB2
線上外設復位寄存器
vu32 APB1RSTR;      //APB1
線上外設復位寄存器
vu32 AHBENR;         //DMA
SDIO等時鐘使能
vu32 APB2ENR;       //APB2
線上外設時鐘使能
vu32 APB1ENR;      //APB1
線上外設時鐘使能
vu32 BDCR;           //
備份域控制寄存器
vu32 CSR;            
} RCC_TypeDef;

時鐘控制寄存器(RCC_CR

31~26
25
24
23~20
19
18
17
16
保留
PLLRDY
PLLON
保留
CSSON
HSEBYP
HSERDY
HSEON

eg:RCC->CR|=0x00010000;   //外部高速時鐘使能HSEON
RCC->CR|=0x01000000;   //使能PLLON
RCC->CR>>25;     //等待PLL鎖定
時鐘配置寄存器(RCC_CFGR)

31:27
26:24
23
22
21:18
17
16
保留
MCO[2:0]
保留
USBPRE
PLLMUL[3:0]
PLLXTPRE
PLLSRC
15:14
13:11
10:8
7:4
3:2
1:0
ADCPRE[1:0]
PPRE2[2:0]
PPRE1[2:0]
HPRE[3:0]
SWS[1:0]
SW[1:0]



位26:24
MCO: 微控制器時鐘輸出 (Microcontroller clock output)
由軟件置’1’或清零。
0xx:沒有時鐘輸出;
100:系統時鐘(SYSCLK)輸出;
101:內部RC振蕩器時鐘(HSI)輸出;
110:外部振蕩器時鐘(HSE)輸出;
111:PLL時鐘2分頻后輸出。
位22
USBPRE:USB預分頻 (USB prescaler)
由軟件置’1’或清’0’來產生48MHz的USB時鐘。在RCC_APB1ENR寄存器中使能USB時鐘之前,必須保證該位已經有效。如果USB時鐘被使能,該位不能被清零。
0:PLL時鐘1.5倍分頻作為USB時鐘
1:PLL時鐘直接作為USB時鐘
位21:18
PLLMUL:PLL倍頻系數 (PLL multiplication factor)
由軟件設置來確定PLL倍頻系數。只有在PLL關閉的情況下才可被寫入。
注意:PLL的輸出頻率不能超過72MHz
0000:PLL 2倍頻輸出 1000:PLL 10倍頻輸出
0001:PLL 3倍頻輸出 1001:PLL 11倍頻輸出
0010:PLL 4倍頻輸出 1010:PLL 12倍頻輸出
0011:PLL 5倍頻輸出 1011:PLL 13倍頻輸出
0100:PLL 6倍頻輸出 1100:PLL 14倍頻輸出
0101:PLL 7倍頻輸出 1101:PLL 15倍頻輸出
0110:PLL 8倍頻輸出 1110:PLL 16倍頻輸出
0111:PLL 9倍頻輸出 1111:PLL 16倍頻輸出
位17
PLLXTPRE:HSE分頻器作為PLL輸入 (HSE divider for PLL entry)
由軟件置’1’或清’0’來分頻HSE后作為PLL輸入時鐘。只能在關閉PLL時才能寫入此位。
0:HSE不分頻
1:HSE 2分頻
位16
PLLSRC:PLL輸入時鐘源 (PLL entry clock source)
由軟件置’1’或清’0’來選擇PLL輸入時鐘源。只能在關閉PLL時才能寫入此位。
0:HSI振蕩器時鐘經2分頻后作為PLL輸入時鐘
1:HSE時鐘作為PLL輸入時鐘。
位15:14
ADCPRE[1:0]:ADC預分頻 (ADC prescaler)
由軟件置’1’或清’0’來確定ADC時鐘頻率
00:PCLK2 2分頻后作為ADC時鐘
01:PCLK2 4分頻后作為ADC時鐘
10:PCLK2 6分頻后作為ADC時鐘
11:PCLK2 8分頻后作為ADC時鐘
位13:11
PPRE2[2:0]:高速APB預分頻(APB2) (APB high-speed prescaler (APB2))
由軟件置’1’或清’0’來控制高速APB2時鐘(PCLK2)的預分頻系數。
0xx:HCLK不分頻
100:HCLK 2分頻
101:HCLK 4分頻
110:HCLK 8分頻
111:HCLK 16分頻
位10:8
PPRE1[2:0]:低速APB預分頻(APB1) (APB low-speed prescaler (APB1))
由軟件置’1’或清’0’來控制低速APB1時鐘(PCLK1)的預分頻系數。
警告:軟件必須保證APB1時鐘頻率不超過36MHz。
0xx:HCLK不分頻
100:HCLK 2分頻
101:HCLK 4分頻
110:HCLK 8分頻
111:HCLK 16分頻
位7:4
HPRE[3:0]: AHB預分頻 (AHB Prescaler)
由軟件置’1’或清’0’來控制AHB時鐘的預分頻系數。
0xxx:SYSCLK不分頻
1000:SYSCLK 2分頻  1100:SYSCLK 64分頻
1001:SYSCLK 4分頻  1101:SYSCLK 128分頻
1010:SYSCLK 8分頻  1110:SYSCLK 256分頻
1011:SYSCLK 16分頻 1111:SYSCLK 512分頻
位3:2
SWS[1:0]:系統時鐘切換狀態 (System clock switch status)
由硬件置’1’或清’0’來指示哪一個時鐘源被作為系統時鐘。
00:HSI作為系統時鐘;
01:HSE作為系統時鐘;
10:PLL輸出作為系統時鐘;
11:不可用。
位1:0
SW[1:0]:系統時鐘切換 (System clock switch)
由軟件置’1’或清’0’來選擇系統時鐘源。
00:HSI作為系統時鐘;
01:HSE作為系統時鐘;
10:PLL輸出作為系統時鐘;
11:不可用

eg: RCC->CFGR=0x00000400;   //APB1=DIV2;APB2=DIV1(不分頻);AHB=DIV1(不分頻);
根據STM32庫函數設置時鐘流程:
RCC_DeInit();     //設置RCC寄存器重新設置為默認值
RCC_HSEConfig(RCC_HSE_ON);   //打開外部高速時鐘晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();   //等待外部高速時鐘晶振工作
if(HSEStartUpStatus == SUCCESS)        //外部就緒
{
       //Add here PLL ans system clock config
       RCC_HCLKConfig(RCC_SYSCLK_Div1);     //設置AHB時鐘不分頻
       RCC_PCLK2Config(RCC_HCLK_Div1);       //設置APB2時鐘不分頻
       RCC_PCLK1Config(RCC_HCLK_Div2);       //設置APB1時鐘二分頻
       RCC_ADCCLKConfig(RCC_PCLK2_Div6);    //設置ADC時鐘六分頻
       //設置PLL時鐘將8M時鐘9倍頻到72M
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE); //使能PLL

FlagStatus Status;
Status = RCC_GetFlagStatus(RCC_FLAG_PLLRDY);
if(Status == RESET)
{
       ……
}
RCC_SYSCLKConfig(RCC-SYSCLKSource_PLLCLK);   //將PLL輸出設置為系統時鐘
while(RCC_GetSYSCLKSource()!=0x08) //測試PLL是否被用作系統時鐘等待校驗完成
{}
}
else
{
       //Add here some code to deal with this error
}
//使能外圍接口總線時鐘
RCC_APB2PeriphClockCmd() / RCC_APB1PeriphClockCmd()

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品欧美精品 | 国产欧美在线一区 | 欧美激情精品久久久久久变态 | 国产精品永久免费视频 | 国产三级一区二区三区 | 久久久久久久久国产精品 | 福利视频网站 | 日韩毛片在线免费观看 | 中文字幕视频在线观看 | 亚洲精品久久嫩草网站秘色 | 羞羞网站在线观看 | 伊人网99| 91看片官网 | 欧美1—12sexvideos | 中日韩欧美一级片 | 国产精品99久久久久久宅男 | 视频一区二区在线观看 | 成人免费共享视频 | 欧美日韩福利视频 | 欧美日韩免费视频 | 自拍偷拍视频网 | 99久久精品一区二区毛片吞精 | 四虎永久免费黄色影片 | 中文字幕高清av | 亚洲a视| 亚洲先锋影音 | 成人精品在线观看 | 日韩毛片在线观看 | 99综合 | 国产精品一区在线观看 | 成人免费观看视频 | 国产专区在线 | 99精品国产一区二区三区 | 99免费视频| 久久精品一区二区三区四区 | 综合亚洲视频 | 成人一区在线观看 | 日本大香伊一区二区三区 | 欧美成ee人免费视频 | 亚洲影音| 亚洲一区二区免费视频 |