STM32的AFIO時鐘什麼時候需要開啟

2021-08-22 18:11:19 字數 1694 閱讀 9069

**

相比於普通微控制器,stm32 擁有複雜的時鐘系統,相應的控制器稱為 rcc(reset clock controller,復位與時鐘控制器)。每個外設都配備了外設時鐘的開關,當我們不使用某個外設時,可以把這個外設時鐘關閉,從而降低 stm32 的整體功耗。因此,在我們使用外設前,必須要開啟相應外設的時鐘。可以使用的庫函式有:

void rcc_ahbperiphclockcmd(uint32_t rcc_ahbperiph, functionalstate newstate);

void rcc_apb1periphclockcmd(uint32_t rcc_apb1periph, functionalstate newstate);

void rcc_apb2periphclockcmd(uint32_t rcc_apb2periph, functionalstate newstate);

顯然,在開啟外設時鐘前,先要知道該外設掛載在哪個匯流排上。以 gpioc 的 pin4 引腳為例:

rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable);
stm32 中的大部分 gpio 都有復用功能,所以對於有復用功能的 i/o 引腳,還要開啟其復用功能時鐘。如 gpio 的 pin4 可以用作 adc1 的輸入引腳,當我們把它作為 adc1 使用時,需要開啟 adc1 的時鐘:

rcc_apb2periphclockcmd(rcc_apb2periph_adc1, enable);
另外, stm32 的所有 gpio 都引入到 exti 外部中斷線上,使得所有的 gpio 都能作為外部中斷的輸入源。所以如果把 gpio 用作 exti 外部中斷時,還需要開啟 afio 時鐘。

rcc_apb2periphclockcmd(rcc_apb2periph_afio, enable);
那麼,問題來了!

afio 是什麼?afio 時鐘什麼時候需要開啟?

我們從《stm32中文參考手冊_v10》中找到:對暫存器 afio_evcr、afio_mapr 和 afio_exticrx 進行讀寫操作前,應當首先開啟 afio 的時鐘(設定 apb2 外設時鐘使能暫存器 rcc_apb2enr)。 

也就是說:當你需要配置 afio 這些暫存器的時候,就需要把 rcc_apb2enr 暫存器的 afio 位置『1』開啟 afio 時鐘。 

跟 afio 相關的暫存器有: 

1、 事件控制暫存器(afio_evcr) 

2、 復用重對映和除錯i/o 配置暫存器(afio_mapr) 

3、 外部中斷配置暫存器1(afio_exticr1) 

4、 外部中斷配置暫存器2(afio_exticr2) 

5、 外部中斷配置暫存器3(afio_exticr3) 

6、 外部中斷配置暫存器4(afio_exticr4)

看看這些暫存器的定義,我們就明白,這些暫存器是用於「事件控制」、「重對映」、「除錯io配置」、「外部中斷」的。例如 afio_exticrx 用於選擇 extix 外部中斷的輸入源。 

總結:當我們需要配置這些 afio 暫存器的時候,就需要開啟 rcc_apb2enr 暫存器的 afio 時鐘,而不是用到引腳復用功能的時候開啟。

stm32何時使用AFIO時鐘

afio 英文解釋為 alternate function i o?alternate 備用的 可替代的,因此,afio可譯為 備用功能i o 以備不時之需。但是我們一般都理解為復用時鐘,因為使用復用功能常常開啟這個時鐘,但是 串列埠也是復用,但是不需要開啟這個時鐘,為什麼spi相關的引腳也配置為復...

STM32的AFIO時鐘何時開啟

首先為什麼要開啟時鐘?答 因為要對暫存器進行讀寫!而在stm32中對暫存器的讀寫都是要開啟暫存器對應的時鐘才可以的 就像人一樣,有了跳動的脈搏手臂才能有能量才能進行各種動作 然後就什麼時候 afio 時鐘開啟 所有時鐘都是這樣 就清楚了 當需要對 afio 時鐘管理的暫存器 進行讀寫時 afio 時...

STM32的AFIO時鐘什麼時候需要開啟

相比於普通微控制器,stm32 擁有複雜的時鐘系統,相應的控制器稱為 rcc reset clock controller,復位與時鐘控制器 每個外設都配備了外設時鐘的開關,當我們不使用某個外設時,可以把這個外設時鐘關閉,從而降低 stm32 的整體功耗。因此,在我們使用外設前,必須要開啟相應外設的...