相比於普通微控制器,stm32 擁有複雜的時鐘系統,相應的控制器稱為 rcc(reset clock controller,復位與時鐘控制器)。每個外設都配備了外設時鐘的開關,當我們不使用某個外設時,可以把這個外設時鐘關閉,從而降低 stm32 的整體功耗。因此,在我們使用外設前,必須要開啟相應外設的時鐘。可以使用的庫函式有:
1void
rcc_ahbperiphclockcmd(uint32_t rcc_ahbperiph, functionalstate newstate);23
void
rcc_apb1periphclockcmd(uint32_t rcc_apb1periph, functionalstate newstate);45
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 的整體功耗。因此,在我們使用外設前,必須要開啟相應外設的...