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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32的GPIO为输出模式时获取其输出状态

發布時間:2024/1/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32的GPIO为输出模式时获取其输出状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拋出一個問題,STM32的GPIO能否在不改變模式的情況下同時做輸入和輸出呢?答案是可以

STM32F103 的參考手冊GPIO章節摘錄:

第5點,在開漏模式時,對輸入數據寄存器的讀訪問可得到I/O狀態。從這一點我們可以看出,STM32的GPIO設置為開漏輸出模式時,改變輸出電平可以生效(但輸出1時受外部上拉電阻影響),同時可以通過輸入數據寄存器即GPIOx_IDR讀取該IO口的狀態。(開漏輸出加外部上拉電阻,實際上就是相當于51單片機的準雙向IO了。)

這里還要注意第6點,在推挽輸出模式下,讀取輸出數據寄存器即GPIOx_ODR只能讀到該IO口最后一次設定的輸出電平狀態,而不一定是實際的IO口狀態。比如說,寫寄存器使IO輸出低,但外部電路使其強拉到高,這時讀GPIOx_ODR只能讀到低,因為最后一次寫操作就是低。
注意:讀最后一次設定的輸出電平狀態,在推挽輸出模式時,除了GPIOx_ODR,讀GPIOx_IDR也是一樣的(假定外部電路不影響其輸出電平)。(讀GPIOx_ODR寄存器用的是GPIO_ReadOutputDataBit函數,讀GPIOx_IDR寄存器用的是GPIO_ReadInputDataBit函數)

讀最后一次設定的輸出電平狀態在一些特定應用場合非常有用,比如

uint8_t pwr_state=0; void pwr_on(void) {pwr_state = 1;GPIO_SetBits(GPIOA, GPIO_Pin_1); } void pwr_off(void) {pwr_state = 0;GPIO_ResetBits(GPIOA, GPIO_Pin_1); } uint8_t get_pwr_state(void) {return pwr_state; }

上述代碼為了便于判斷當前電源的開關狀態,用了一個變量pwr_state作為指示電源開關狀態,實際上可以將GPIOx_ODR用起來,這個寄存器就可以反映最后一次對該IO的操作。舉例如下:

void pwr_on(void) {GPIO_SetBits(GPIOA, GPIO_Pin_1); } void pwr_off(void) {GPIO_ResetBits(GPIOA, GPIO_Pin_1); } uint8_t get_pwr_state(void) {return GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1); }

這樣省略了一個變量的操作。

總結

以上是生活随笔為你收集整理的STM32的GPIO为输出模式时获取其输出状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。