今天給大家分享兩點內容:
一是,為什么我們要先開啟STM32外設時鐘;二是,關于STM32的 I/O 復用功能及什么時候開啟AFIO時鐘。
STM32為什么要先開啟外設時鐘?
相信很多朋友都曾遇到過這種坑,我最初學習STM32的時候同樣也遇到過。下面,我就來說說為什么我們要先開啟STM32外設模塊時鐘,再對其外設模塊初始化配置?
1、系統架構
不同類型的STM32,它的系統架構各有不同,但原理都類似,由多條主控總線和多條被控總線組成(請參看【參考手冊】存儲器和總線架構章節)。
以STM32F4為例:
● 八條主控總線:
— Cortex-M4F 內核 I 總線、 D 總線和 S 總線
— DMA1 存儲器總線
— DMA2 存儲器總線
— DMA2 外設總線
— 以太網 DMA 總線
— USB OTG HS DMA 總線
● 七條被控總線:
— 內部 Flash ICode 總線
— 內部 Flash DCode 總線
— 主要內部 SRAM1 (112 KB)
— 輔助內部 SRAM2 (16 KB)
— 輔助內部 SRAM3 (64 KB)(僅適用于 STM32F42xxx 和 STM32F43xxx 器件)
— AHB1 外設(包括 AHB-APB 總線橋和 APB 外設)
— AHB2 外設
— FSMC
借助總線矩陣,可以實現主控總線到被控總線的訪問,這樣即使在多個高速外設同時運行期間,系統也可以實現并發訪問和高效運行。
2、關于AHB和APB總線
AHB:Advanced High-performance Bus,即先進的高性能總線。
APB:Advanced Peripheral Bus,即先進的外圍(外設)總線。
上面說了系統總線的架構引伸出來的就是AHB和APB總線,那為什么要講述AHB和APB總線呢?
我們操作的外圍設備一般都是位于AHB和APB總線上,而AHB可以引伸出AHB1、AHB2,甚至AHB3。同樣APB也存在APB1、APB2等。
比如,USART1外設位于APB1總線上,GPIOA位于AHB1高速總線上。
請注意參考手冊中“AHB/APB 總線橋”這一小節,有一條重要的內容:每次芯片復位后,所有外設時鐘都被關閉( SRAM 和 Flash 接口除外)。使用外設前,必須在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其時鐘。
3、STM32時鐘控制
請參看STM32參考手冊關于【復位與時鐘控制RCC】章節。
STM32的時鐘控制模塊因MCU芯片不同,各有差異,但原理都類似,功能也相當豐富。主要的目的就是給相對獨立的外設模塊提供時鐘,也是為了降低整個芯片的功能。
降低功耗是主要原因,還有一個原因,就是為了兼容不同速度的設備,有些高速,有些低速,如果都用高速時鐘,勢必造成浪費。
RCC給外設提供時鐘是一個主要目的,那么為什么要提供時鐘呢? 原因在于外圍設備的寄存器需要時鐘才能工作。你可以把外設當做一個設備,而這個設備需要給它提供電源(時鐘)才能工作。
你在STM32參考手冊的“RCC”章節可能會看到這么一句話:當外設時鐘沒有啟用時,軟件不能讀出外設寄存器的數值,返回的數值始終是0x0。
4、總結
看到這里,相信聰明的你已經明白了為什么我們要先開啟STM32外設模塊時鐘,再配置其外設模塊了。
簡單來說,就是操作外設是通過外設總線來實現,只有外設總線有時鐘了才能操作外設。
坑:
A.先使能外設時鐘,再對其進行配置
B.時鐘配置需對應總線
這種基于標準外設庫的低級錯誤,相信肯定有不少人遇到過,希望提高警惕。
AFIO復用時鐘
有朋友問:“什么時候開啟AFIO時鐘”。寫了上面章節,就順便再講述一下關于STM32的I/O復用功能及什么時候開啟AFIO時鐘。
1、什么是I/O 復用功能?
簡單來說,就是把普通I/O用作其它的功能。如:將PA9引腳用作USART1的Tx引腳,那么我們就把這個Tx引腳稱為PA9的復用功能。
打開數據手冊,會發現類似如下的列表:
2、什么時候開啟AFIO時鐘?
為了優化芯片引腳封裝的外設數目,可以把一些復用功能重新映射到其他引腳上。設置復用重映射和調試I/O配置寄存器實現引腳的重新映射。這時,復用功能不再映射到它們的原始分配上,而是映射到“重定義功能”上(見上圖)。
這種將引腳重定義到其它引腳上的功能在幾乎所有STM32芯片中都有這個功能,但是實現的方法可能有所不同,其中STM32F1就是通過事件控制的方式將特定功能引腳連接到對應PORT和PIN上。
簡單來說,如果需要使用重定義功能,那么就需要開啟AFIO時鐘。
最后,如果你覺得你的程序可能是因為時鐘配置的問題,不妨上電第一步使能所有時鐘試試。
審核編輯 :李倩
-
存儲器
+關注
關注
38文章
7530瀏覽量
164401 -
STM32
+關注
關注
2273文章
10926瀏覽量
357769 -
時鐘
+關注
關注
11文章
1747瀏覽量
131849 -
總線
+關注
關注
10文章
2904瀏覽量
88442 -
AFIO
+關注
關注
0文章
6瀏覽量
2986
發布評論請先 登錄
相關推薦
STM32 | STM32的復用時鐘何時開啟?精選資料推薦
STM32的IO口基本操作:初始化結構體,設置系統時鐘,開啟外設時鐘資料下載
![<b class='flag-5'>STM32</b>的IO口基本操作:初始化結構體,設置系統<b class='flag-5'>時鐘</b>,<b class='flag-5'>開啟</b><b class='flag-5'>外設</b><b class='flag-5'>時鐘</b>資料下載](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論