它自己預設每個管腳有自己的復用功能,但是這個管腳你用了,但你想要用它的其他功能,你就可以將這個功能重對映到其他管腳。使用復用功能是要保持乙個功能使能,其他功能非使能狀態
重對映指的是內部功能轉移到別的引腳上去,晶元內部已經固定了只能對映到固定的地方。若使用tim3重對映到其他引腳上,則先要配置tim3重對映到該引腳,然後在按該引腳的復用功能配置f103重對映例項:1.開啟重對映時鐘和
usart
重對映後的
i/o口引腳時鐘
,
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob|rcc_apb2periph_afio,enable);
//使能對應
io口的時鐘,因為是復用功能所以還要使能
afio
時鐘2.i/o口重對映開啟
.gpio_pinremapconfig(gpio_remap_usart1,enable);
3.配製重對映後的引腳: 這裡只需配置重對映後的
i/o(pb6,pb7),原來的不需要去配置
(pa9,
pa10
).gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpiob, &gpio_initstructure);
gpio_initstructure.gpio_pin = gpio_pin_7;
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
gpio_init(gpiob, &gpio_initstructure);
f429重對映例項:以
usart2
的tx,rx
為例
usart2
的tx,rx
對應的pin
腳分別為:
pd5,pd6
1) 首先
,我們要使用
io復用功能外設,必須先開啟對應的
io時鐘和復用功能外設時鐘。
[cpp]view plain
copy
/*使能gpiod時鐘*/
rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiod,enable);
usart2
在apb1
匯流排上
[cpp]view plain
copy
/*使能usart2時鐘*/
rcc_apb1periphclockcmd(rcc_apb1periph_usart2,enable);
這裡需要說明一下,官方庫提供了五個開啟
gpio
和外設時鐘的函式分別為:
[cpp]view plain
copy
void
rcc_ahb1periphclockcmd(uint32_t rcc_ahb1periph,functionalstate newstate);
void
rcc_ahb2periphclockcmd(uint32_trcc_ahb2periph, functionalstate newstate);
void
rcc_ahb3periphclockcmd(uint32_trcc_ahb3periph, functionalstate newstate);
void
rcc_apb1periphclockcmd(uint32_trcc_apb1periph, functionalstate newstate);
void
rcc_apb2periphclockcmd(uint32_trcc_apb2periph, functionalstate newstate);
這五個函式分別用來開啟相應的匯流排下
gpio
和外設時鐘。比如我們的串列埠
2是掛載在
apb1
匯流排之下,所以我們呼叫對應的
apb1
匯流排下外設時鐘使能函式
rcc_apb1periphclockcmd
來使能串列埠
2時鐘。對於其他外設我們呼叫相應的函式即可。
2) 其次,我們在
gipox_moder
暫存器中將所需
io(對於串列埠2是
pd5,pd6
)配置為復用功能(
adc和
dac設定為模擬通道)。
3)再次
,我們還需要對
io口的其他引數,例如型別,上拉
/下拉以及輸出速度。
上面兩步,在我們庫函式中是通過
gpio_init
[cpp]view plain
copy
/*gpiod5與gpiod6初始化*/
gpio_initstructure.gpio_pin= gpio_pin_5 | gpio_pin_6;
gpio_initstructure.gpio_mode= gpio_mode_af;//復用功能
gpio_initstructure.gpio_speed= gpio_speed_50mhz;//速度50mhz
gpio_initstructure.gpio_otype= gpio_otype_pp; //推挽復用輸出
gpio_initstructure.gpio_pupd= gpio_pupd_up; //上拉
gpio_init(gpiod,&gpio_initstructure);//初始化pd5,pd6
4)最後,我們配置
gpiox_afrl
或者gpiox_afrh
暫存器,將
io連線到所需的
afx。這些步驟對於我們使用庫函式來操作的話,是呼叫的
[cpp]view plain
copy
gpio_pinafconfig函式來實現的。具體操作**如下:
/*pd5連線af7,復用為usart2_tx */
gpio_pinafconfig(gpiod,gpio_pinsource5,gpio_af_usart2);
/* pd6連線af7,復用為usart2_rx*/
gpio_pinafconfig(gpiod,gpio_pinsource6,gpio_af_usart2);
f4的重對映是開啟該引腳重對映功能,直接將功能重對映的引腳上
gpio_pinafconfig(gpiod,gpio_pinsource5,gpio_af_usart2),無重對映時鐘;
f1的重對映需開啟重對映時鐘和使用gpio_pinpremapconfig()開啟改功能時鐘來使能該功能,然後然後再初始化
引腳為重對映功能,該引腳會自動鏈結上它的重對映功能。
STM32F429除錯記錄(一)
stm32f429的晶元有兩路can介面 四路串列埠 內部乙太網以及內部dsp處理器等硬體,硬體的豐富程度可見一斑,而且主頻達到180mhz,雖然比a8 a9架構的arm晶元還是差一大截,但是在工業控制上的應用還是比較多的。在程式編寫方面stm32f4系列不管在mdk還是庫函式都有挺大改動,剛著手除...
STM32F429 如何使用SDRAM
關於stm32f429 控制sdram fmc 擴充套件外部sdram 1 原理介紹 為什麼是fmc 不是 fsmc 區別在那裡!stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。它可以用於驅動包括sram...
STM32F429 如何使用NAND Flash
1 原理介紹 flash即是儲存晶元的一種,其結合了rom和ram的特點,既具備電可擦除程式設計的效能,又可以快速讀取資料,資料不會因斷電丟失。目前市面上flash主要有nor flash和nand flash。nor flash具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...