嵌入式應用程式設計經驗之談 引腳復用

2021-07-29 05:50:44 字數 1585 閱讀 9042

目標晶元:stm32f101r6

這裡談到關於stm32f1系列的晶元的io口的使用,想必每個朋友在學習這款晶元的時候,第一件事情就是學習怎麼控制晶元的io口去點亮led燈。這裡我要談到的不是各種io口的模式的配置,而是有關於其引腳復用的問題。

問題發現:這裡我在專案中需要檢測幾個io口,配置成輸入模式並且檢測其io口的輸入狀態。但是發現無論外部條件怎麼變化,讀到的io口的值出現與外部條件不對應的狀態。下面給出我的io口配置**。

gpio_inittypedef gpio_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_gpiob|rcc_apb2periph_gpioc|rcc_apb2periph_gpiod, enable);

//pa15

gpio_initstructure.gpio_pin = dip_sw1_pin;

gpio_initstructure.gpio_mode = gpio_mode_ipu;

gpio_init(dip_sw1_port, &gpio_initstructure);

//pb3

gpio_initstructure.gpio_pin = dip_sw2_pin;

gpio_initstructure.gpio_mode = gpio_mode_ipu;

gpio_init(dip_sw2_port, &gpio_initstructure);

//pa14

gpio_initstructure.gpio_pin = dip_sw3_pin;

gpio_initstructure.gpio_mode = gpio_mode_ipu;

gpio_init(dip_sw3_port, &gpio_initstructure);

//pa13

gpio_initstructure.gpio_pin = dip_sw4_pin;

gpio_initstructure.gpio_mode = gpio_mode_ipu;

gpio_init(dip_sw4_port, &gpio_initstructure);

問題解決:這裡我反覆的去檢查和檢視自己讀取io口的邏輯**,並沒有發現問題,這裡配置更是感覺沒有任何問題。對於io口的使用自己也是經常配置,自己也沒想到問題便是處在io配置上。在配置**中增加這句話問題便得到解決。
// 關閉jtag,jtag口用作普通io口

gpio_pinremapconfig(gpio_remap_swj_disable, enable);

問題總結:這裡我們需要注意stm32並不是所有的io口預設狀態都是作為普通io口使用。這裡這個專案的主控pa13、pa14預設情況下是用於jtms、jtck埠使用,這裡我們需要作為普通的io口便需要把這兩個的腳的復用功能開啟。上面的**便是關閉swj功能,使得io口作為普通io口。這裡大家在使用一款晶元的同時需要對其io口的功能有乙個全面的了解,才不會犯這樣的錯誤。

嵌入式Linux串列埠應用程式設計之串列埠讀寫

2013 08 27 在配置完串列埠的相關屬性後,就可以對串列埠進行開啟和讀寫操作了。它所使用的函式和普通檔案的讀寫函式一樣,都是open write 和read 它們之間區別的只是串列埠是乙個終端裝置,因此在選擇函式的具體引數時會有一些區別。另外,這裡會用到一些附加的函式,用於測試終端裝置的連線情...

嵌入式資料庫應用程式設計(四) 程式設計

嵌入式資料庫應用程式設計 四 程式設計 本篇涉及的函式,主要用於資料庫表中記錄的修改 1 資料庫表為table basic editrecord.h ifndef editrecorddlg h define editrecorddlg h include class editrecorddlg p...

嵌入式應用程式開發

嵌入式應用程式開發 實驗目的 1.編寫程式,用交叉工具鏈編譯連線 實驗原理 1.嵌入式應用程式的開發一般都在宿主機平台上進行,利用交叉編譯器編譯,生成可以在目標平台上執行的可執行 本實驗使用的交叉編譯器是arm linux gcc 實驗內容 l include include int main l2...