[STM32學(xué)習(xí)筆記]I/O的數(shù)字輸出輸入
STM32輸入與輸出的工作方式
_____________________________________________________________________________
輸入
輸入浮空
輸入上拉
輸入下拉
模擬輸入
輸出
開漏輸出
推挽式輸出
推挽式復(fù)用功能
開漏復(fù)用功能
比較難以理解的是什么叫開漏輸出,什么叫推挽式輸出了。
開漏輸出:CPU輸出1時(shí),I/O狀態(tài)由外部上拉或下拉決定。
CPU輸出0時(shí),I/O狀態(tài)為0。
推挽式輸出:
CPU輸出1時(shí),I/O狀態(tài)為1。
CPU輸出0時(shí),I/O狀態(tài)為0。
開漏復(fù)用功能: 跟開漏輸出相似,I/O狀態(tài)由復(fù)用功能決定。
推挽式復(fù)用功能:跟推挽式輸出相似,I/O狀態(tài)由復(fù)用功能決定。(暫時(shí)不理解)
STM32輸入與輸出相關(guān)的寄存器
______________________________________________________________________________________________________
GPIO寄存器
GPIOx_CRL(32bit) , GPIOx_CRH(32bit)
GPIOx_IDR(32bit), GPIOx_ODR(32bit)
GPIOx_BSRR(32bit)
GPIOx_BRR(16bit)
GPIOx_LCKR(32bit)
GPIOx_CRL (低8位IO口)與GPIOxCRH(高8位IO口)
_____________________________________________________________________________
通過CRL與CRH,我們可以設(shè)置輸入還是輸出,如果是輸入的話,是什么類型的輸入。如果是輸出的話,是什么類型的輸出,還有輸出的速度是多少。
GPIOx_IDR(32bit)
_____________________________________________________________________________
通過IDR寄存器,當(dāng)I/O口設(shè)置為輸入時(shí),可以讀取某個(gè)位的狀態(tài)
GPIOx_ODR(32bit)
_____________________________________________________________________________
通過這個(gè)寄存器,我們可以讀取I/O為輸出時(shí)的狀態(tài),也可以向它寫0或1。它與IDR的區(qū)別在于IDR是讀取I/O設(shè)置為輸入時(shí)的狀態(tài),而ODR是讀取I/O為輸出時(shí)的狀態(tài)。通過我們只用ODR讀取狀態(tài),操作I/O輸出0或1是通過其他寄存器GPOPx_BSRR.
GPIOx_BSRR(32bit)
_____________________________________________________________________________
雖然ODR也能使I/O輸出0或1(當(dāng)對(duì)應(yīng)的GPIO設(shè)置為輸出時(shí)),但是BSRR操作I/O輸出0或1更加方便。
GPIOx_BRR(16bit)
_____________________________________________________________________________
BRR寄存器與BSRR的高16位的功能是一樣的。
庫函數(shù)與寄存器的對(duì)應(yīng)關(guān)系
_____________________________________________________________________________
GPIOx_CRL . GPIOx_CRH
2.GPIOx_IDR <-------> GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_x)
3. GPIOx_ODR <-------> GPIO_Write()
4. GPIOx_BSRR <------->GPIO_SetBits(GPIOx,GPIO_PIN_x)
5. GPIOx_BRR <-------->GPIO_ResetBits(GPIOx,GPIO_PIN_x)
代碼實(shí)現(xiàn)流程圖
_____________________________________________________________________________