目標晶元: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...