日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32学习笔记(三) STM32的GPIO的深入学习

發(fā)布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32学习笔记(三) STM32的GPIO的深入学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

STM32的開發(fā)學(xué)習(xí)主要涉及軟硬件兩個部分的實現(xiàn),包含眾多外設(shè)和總線的理解配置。STM32的整個學(xué)習(xí)曲線并不陡峭,但入門卻相當(dāng)困難,因此在學(xué)習(xí)之初,多動手實驗和測試相當(dāng)重要,GPIO作為整個STM32與外部連接的端口,難度不高,卻十分重要。從深入解析GPIO外設(shè)開始,一步步熟悉掌握STM32各個模塊,就是STM32的整個學(xué)習(xí)流程。

GPIO模塊回顧

? ? 在嵌入式軟件開發(fā)中,幾乎所有功能的實現(xiàn)都需要GPIO端口輸出才能發(fā)揮作用。GPIO端口的操作包括時鐘使能,寄存器配置,端口信息修改。這些基礎(chǔ)的東西上一章已經(jīng)講過,我這里就不在細(xì)說,我這里主要講GPIO涉及到的其它庫函數(shù)。

1. 讀取GPIO端口數(shù)據(jù)函數(shù)

????GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_y);//讀取單個輸入端口的數(shù)據(jù)

????GPIO_ReadInputData(GPIOx);//讀取整個輸入端口的數(shù)據(jù)

? ??GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin_y);//讀取單個輸出端口的數(shù)據(jù)

????GPIO_ReadOutputData (GPIOx);//讀取整個輸入出端口的位數(shù)據(jù)

? ? 這4個庫函數(shù)是用來直接讀取端口數(shù)據(jù)的,其中x:A-G y: 0~15

? ? 上面的函數(shù)實現(xiàn)的是讀取當(dāng)前GPIO口或位的輸入輸出數(shù)據(jù),庫函數(shù)沒有什么可說的。

? ? 但這幾個函數(shù)涉及到下面兩個寄存器:

? ? 端口數(shù)據(jù)輸入寄存器(GPIOA_IDR~GPIOG_IDR);

??? 端口數(shù)據(jù)輸出寄存器(GPIOA_ODR~GPIOG_ODR);

? ? 這兩個寄存器都是16位的,高16位保留,讀取值為0,低16位代表著對應(yīng)GPIO端口位[15:0]的狀態(tài),偏移值位0cH,具體地址可參考寄存器表。上面的庫函數(shù)讀取Data就是讀取這兩個寄存器中選定那個的低16位,讀取DataBit就是讀取選定寄存器16位中的任意選定位。

?2 . 寫入GPIO端口數(shù)據(jù)函數(shù)

???GPIO_WriteBit(GPIOx, GPIO_Pin_y,BIT_SET/BIT_RESET);//置位或者復(fù)位單個輸出端口的數(shù)據(jù)

???GPIO_Write(GPIOx, 0x1111);//置位或者復(fù)位整個輸出端口的數(shù)據(jù)

?? 其中x:A-G y: 0~15

?? 這兩個函數(shù)是對GPIO_SetBits和GPIO_ResetBits的補充,可以滿足對多個端口同時設(shè)置狀態(tài)的特性。

?? 端口復(fù)位置位寄存器(GPIOA_BSRR~GPIOG_BSRR) ,32bit復(fù)位置位寄存器,w(只寫,下同),

?? [31~16]寫0無效,寫1對應(yīng)GPIOx_ODR位置0

?? [15~0]寫0無效,寫1對應(yīng)GPIOx_ODR位置1

?? 端口復(fù)位寄存器(GPIOA_BRR~GPIOG_BRR),32bit復(fù)位寄存器w

  高16位保留,低16位

?? [15~0]寫0無效,寫1對應(yīng)GPIOx_ODR位置0?若GPIOx_BRR和GPIOx_BSRR同時設(shè)置,以GPIOx_BSRR為準(zhǔn)。

?3. GPIO功能鎖存函數(shù)

???GPIO_PinLockConfig(GPIOx, GPIO_Pin_y);//鎖存選擇端口配置寄存器的對應(yīng)位

? 端口鎖存寄存器(GPIOA_LCKR~GPIOG_LCKR),32bit寄存器,高16位保留,低16可隨時讀出,1代表對應(yīng)配置位被激活鎖存,0代表可以被激活,激活是有固定的寫入順序的。鎖存是不能亂用的,如果鎖存了一個端口的功能寄存器,那么在下次系統(tǒng)復(fù)位前,端口的功能就不可更改,這在某些情況下是有利的,特別是在程序中如果重新定義某些GPIO口的功能時,在確定其中某一GPIO端口在整個系統(tǒng)運行中狀態(tài)保持不變,鎖存就避免誤修改,但是如果鎖存的GPIO在后續(xù)的代碼段中有不同的功能,就會無法修改,產(chǎn)生錯誤。因此鎖存和GPIO_StructInit, GPIO_DeInit,GPIO_AFIODeInit這些初始化函數(shù)一樣,使用前要考慮清楚。

4.GPIO特殊功能函數(shù)

? 函數(shù)GPIO_EventOutputConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcey);事件輸出。

? 函數(shù)GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcey);?外設(shè)端口作為中斷線號輸入

? 這兩個函數(shù)我就不多說了,在EXTI-NVIC中會有詳細(xì)解釋。

? 函數(shù)GPIO_PinRemapConfig(u32GPIO_Remap, FunctionalState NewState);改變指定管腳的映射,很多復(fù)用功能的引出腳可以通過重映射,從不同的I/O管腳引出,即復(fù)用功能的引出腳位是可通過程序改變的。就是上面庫函數(shù)。

函數(shù)GPIO_AFIODeInit();?取消所有的復(fù)用功能。

總結(jié)

以上是生活随笔為你收集整理的STM32学习笔记(三) STM32的GPIO的深入学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。