STM32 RCC基本原理和配置流程
邏輯框圖
本文引用地址:http://m.butianyuan.cn/article/201611/318306.htm芯片運(yùn)行所需的時(shí)鐘源分為四種,HSE (High Speed External),HSI,LSE,LSI (Low Speed Internal)。系統(tǒng)時(shí)鐘頻率可以通過軟件進(jìn)行控制,設(shè)置分頻倍頻值和該計(jì)算的時(shí)鐘源;對(duì)于芯片各外設(shè)和總線來說,都有自己運(yùn)行所需要的時(shí)鐘,要根據(jù)用戶的使用與否,對(duì)它們分別加以配置,達(dá)到節(jié)約資源的目的。對(duì)于上述復(fù)雜的邏輯結(jié)構(gòu),我很喜歡ST
藍(lán)線是將要進(jìn)行操作和配置的時(shí)鐘源,綠線是需要配置的PLL分頻和倍頻器,紅線是某時(shí)鐘源可以供給的外設(shè),紫線是允許的頻率最大值。結(jié)合RCC設(shè)置的代碼,把這個(gè)圖看熟了,對(duì)于芯片各部分的工作頻率和名稱將會(huì)有一個(gè)較清晰的認(rèn)識(shí)。
對(duì)于AHB和APB上的外設(shè)和頻率,根據(jù)上述文檔中的Table1,小結(jié)如下:
AHB (最大72M)
APB1 (最大36M): DAC, PWR, BKP, CAN, SRAM, I2C, UART2~5, SPI2/3, RTC, TIM2~7
APB2 (最大72M): ADC, SPI1, TIM1/8, GPIOA~F, EXTI, AFIO
寄存器
RCC寄存器大致分為以下幾種;1. AHB, APB1, APB2時(shí)鐘使能和復(fù)位寄存器;2. 查詢和開關(guān)各時(shí)鐘源,中斷源;3. 設(shè)置時(shí)鐘源連接情況,分頻倍頻值;4. 備份域控制,與RTC和LSE相關(guān)。
時(shí)鐘源配置流程
結(jié)合ST提供的例程,看程序剛啟動(dòng)時(shí)對(duì)于RCC的配置,大致步驟為:
1. 在控制寄存器CR里,打開HSI;2. 在配置寄存器CFGR里,清除各預(yù)分頻器,斷開系統(tǒng)時(shí)鐘的連接;3. 在CR里,關(guān)閉HSE, CSS, PLL, HSE旁路;4. 在CFGR里,斷開PLL連接,清空預(yù)分頻器和倍頻器;5. 清除中斷使能和掛起;6. 設(shè)置系統(tǒng)時(shí)鐘。之所以需要2,3步驟的順序,是因?yàn)樵诟淖冞B接前,不能斷開時(shí)鐘源。
以STM32F107VC為例,設(shè)置72M系統(tǒng)時(shí)鐘的步驟為:
1. 在CR里打開HSE并等待打開成功。2. 在CFGR里設(shè)置預(yù)分頻值,使HCLK = SYSCLK, PCLK2 = HCLK, PCLK1 = HCLK/2。3. 在CFGR2中設(shè)置PREDIV1的來源為PLL2,預(yù)分頻值為5;PLL2為HSE (25M) / 5 * 8 (= 40M) 所得;在CR中使能PLL2并等待設(shè)置成功。4. 在CFGR中設(shè)置PLLCLK的來源為PREDIV1,倍頻值為9 (40 / 5 * 9 = 72M為PLLCLK的頻率);在CR中使能PLL并等待設(shè)置成功。5. 在CFGR中設(shè)置SYSCLK為PLLCLK。完成系統(tǒng)時(shí)鐘設(shè)置。
至此,程序時(shí)鐘源頻率初始化完成。再通過修改AHB, APB時(shí)鐘使能寄存器的值,使能所需外設(shè),即可使系統(tǒng)正常運(yùn)行。另外,在初始化各外設(shè)時(shí),應(yīng)先將RCC中APB置位寄存器中的對(duì)應(yīng)項(xiàng)置位,恢復(fù)初始狀態(tài)。
評(píng)論