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