今天給大家分享兩點(diǎn)內(nèi)容: 一是,為什么我們要先開啟STM32外設(shè)時(shí)鐘;二是,關(guān)于STM32的 I/O 復(fù)用功能及什么時(shí)候開啟AFIO時(shí)鐘。
STM32為什么要先開啟外設(shè)時(shí)鐘?
相信很多朋友都曾遇到過這種坑,我最初學(xué)習(xí)STM32的時(shí)候同樣也遇到過。下面,我就來說說為什么我們要先開啟STM32外設(shè)模塊時(shí)鐘,再對(duì)其外設(shè)模塊初始化配置?
1、系統(tǒng)架構(gòu)
不同類型的STM32,它的系統(tǒng)架構(gòu)各有不同,但原理都類似,由多條主控總線和多條被控總線組成(請(qǐng)參看【參考手冊(cè)】存儲(chǔ)器和總線架構(gòu)章節(jié))。
以STM32F4為例:
● 八條主控總線:
— Cortex-M4F 內(nèi)核 I 總線、 D 總線和 S 總線 — DMA1 存儲(chǔ)器總線 — DMA2 存儲(chǔ)器總線 — DMA2 外設(shè)總線 — 以太網(wǎng) DMA 總線 — USB OTG HS DMA 總線 ● 七條被控總線: — 內(nèi)部 Flash ICode 總線 — 內(nèi)部 Flash DCode 總線 — 主要內(nèi)部 SRAM1 (112 KB) — 輔助內(nèi)部 SRAM2 (16 KB) — 輔助內(nèi)部 SRAM3 (64 KB)(僅適用于 STM32F42xxx 和 STM32F43xxx 器件) — AHB1 外設(shè)(包括 AHB-APB 總線橋和 APB 外設(shè)) — AHB2 外設(shè) — FSMC ? 借助總線矩陣,可以實(shí)現(xiàn)主控總線到被控總線的訪問,這樣即使在多個(gè)高速外設(shè)同時(shí)運(yùn)行期間,系統(tǒng)也可以實(shí)現(xiàn)并發(fā)訪問和高效運(yùn)行。 2、關(guān)于AHB和APB總線 AHB:Advanced High-performance Bus,即先進(jìn)的高性能總線。 APB:Advanced Peripheral Bus,即先進(jìn)的外圍(外設(shè))總線。 上面說了系統(tǒng)總線的架構(gòu)引伸出來的就是AHB和APB總線,那為什么要講述AHB和APB總線呢? 我們操作的外圍設(shè)備一般都是位于AHB和APB總線上,而AHB可以引伸出AHB1、AHB2,甚至AHB3。同樣APB也存在APB1、APB2等。 比如,USART1外設(shè)位于APB1總線上,GPIOA位于AHB1高速總線上。 請(qǐng)注意參考手冊(cè)中“AHB/APB 總線橋”這一小節(jié),有一條重要的內(nèi)容:每次芯片復(fù)位后,所有外設(shè)時(shí)鐘都被關(guān)閉( SRAM 和 Flash 接口除外)。使用外設(shè)前,必須在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其時(shí)鐘。 3、STM32時(shí)鐘控制 請(qǐng)參看STM32參考手冊(cè)關(guān)于【復(fù)位與時(shí)鐘控制RCC】章節(jié)。 ? STM32的時(shí)鐘控制模塊因MCU芯片不同,各有差異,但原理都類似,功能也相當(dāng)豐富。主要的目的就是給相對(duì)獨(dú)立的外設(shè)模塊提供時(shí)鐘,也是為了降低整個(gè)芯片的功能。 降低功耗是主要原因,還有一個(gè)原因,就是為了兼容不同速度的設(shè)備,有些高速,有些低速,如果都用高速時(shí)鐘,勢(shì)必造成浪費(fèi)。 RCC給外設(shè)提供時(shí)鐘是一個(gè)主要目的,那么為什么要提供時(shí)鐘呢?原因在于外圍設(shè)備的寄存器需要時(shí)鐘才能工作。你可以把外設(shè)當(dāng)做一個(gè)設(shè)備,而這個(gè)設(shè)備需要給它提供電源(時(shí)鐘)才能工作。 你在STM32參考手冊(cè)的“RCC”章節(jié)可能會(huì)看到這么一句話:當(dāng)外設(shè)時(shí)鐘沒有啟用時(shí),軟件不能讀出外設(shè)寄存器的數(shù)值,返回的數(shù)值始終是0x0。 4、總結(jié) 看到這里,相信聰明的你已經(jīng)明白了為什么我們要先開啟STM32外設(shè)模塊時(shí)鐘,再配置其外設(shè)模塊了。 簡(jiǎn)單來說,就是操作外設(shè)是通過外設(shè)總線來實(shí)現(xiàn),只有外設(shè)總線有時(shí)鐘了才能操作外設(shè)。 坑: A.先使能外設(shè)時(shí)鐘,再對(duì)其進(jìn)行配置 ? B.時(shí)鐘配置需對(duì)應(yīng)總線 ? 這種基于標(biāo)準(zhǔn)外設(shè)庫(kù)的低級(jí)錯(cuò)誤,相信肯定有不少人遇到過,希望提高警惕。 ?
AFIO復(fù)用時(shí)鐘
有朋友問:“什么時(shí)候開啟AFIO時(shí)鐘”。寫了上面章節(jié),就順便再講述一下關(guān)于STM32的I/O復(fù)用功能及什么時(shí)候開啟AFIO時(shí)鐘。
1、什么是I/O 復(fù)用功能?
簡(jiǎn)單來說,就是把普通I/O用作其它的功能。如:將PA9引腳用作USART1的Tx引腳,那么我們就把這個(gè)Tx引腳稱為PA9的復(fù)用功能。
打開數(shù)據(jù)手冊(cè),會(huì)發(fā)現(xiàn)類似如下的列表:
2、什么時(shí)候開啟AFIO時(shí)鐘?
為了優(yōu)化芯片引腳封裝的外設(shè)數(shù)目,可以把一些復(fù)用功能重新映射到其他引腳上。設(shè)置復(fù)用重映射和調(diào)試I/O配置寄存器實(shí)現(xiàn)引腳的重新映射。這時(shí),復(fù)用功能不再映射到它們的原始分配上,而是映射到“重定義功能”上(見上圖)。
這種將引腳重定義到其它引腳上的功能在幾乎所有STM32芯片中都有這個(gè)功能,但是實(shí)現(xiàn)的方法可能有所不同,其中STM32F1就是通過事件控制的方式將特定功能引腳連接到對(duì)應(yīng)PORT和PIN上。
簡(jiǎn)單來說,如果需要使用重定義功能,那么就需要開啟AFIO時(shí)鐘。
最后,如果你覺得你的程序可能是因?yàn)闀r(shí)鐘配置的問題,不妨上電第一步使能所有時(shí)鐘試試。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7430瀏覽量
163514 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354293 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1714瀏覽量
131274
原文標(biāo)題:STM32為什么要先開啟外設(shè)時(shí)鐘?
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論