1概述
端口
I/O端口主要功能是用於內部單片機和外設進行通信的媒介。一個端口最多有8個引腳。
引腳
每個引腳都是獨立的,也就是說當我們對其中一個引腳進行操作的時候不會影響到其他引腳。我們可以對引腳單獨設置為數字輸入或者數字輸出。其中有些引腳還可以用着模擬輸入和和外設中斷。同一時刻只有一個功能映射到同一個引腳。
GPIO主要功能(我只列舉我比較陌生的)
輸入兼容5v電壓
I/O口工作電壓范圍為1.6V到Vddiomax
I/O口的配置和使用
IO口常用的寄存器有5個ODR IDR DDR CR1 CR2
數據輸出寄存器ODR 輸入寄存器IDR 和方向寄存器DDR 控制寄存器1CR1 控制寄存器2CR2
需要注意的是這里的引腳位和寄存器的位是一一對應的,即寄存器中的位n對應於口的引腳n。
通過這個表我們可以看出配置好一個I/O口只需要DDR方向寄存器,CR1控制寄存器,和CR2控制寄存器
下面我們先來看看輸入模式
將方向寄存器DDRx位清零就選擇了輸入模式,在該模式下讀IDR寄存器的位將返回對應I/O口引腳上的電頻值。
理論上可以通過軟件配置得到4中不同的輸入模式:懸浮不帶中斷輸入,懸浮帶中斷輸入,上拉不帶中斷輸入,上拉帶中斷輸入。但是在實際情況下不是所有的I/O口都具有外部中斷和上啦,我們應該參考數據手冊中關於每個引腳的實際硬件性能描述。
懸浮輸入或者上拉輸入
端口的輸入功能是不會自動選擇,用戶可以通過寫相應的外設寄存器的控制位來選擇輸入功能,通過上表可以看出我們可以通過設置DDR和CR1寄存器的相應位來配置輸懸浮輸入或者上拉輸入。
中斷功能
我們可以在I/O口引腳為輸入模式時通過設置PX_CR2寄存器的相應位來配置某個I/O作為外部輸入中斷模式。在這種配置下,I/O引腳上的一個信號沿或者是低電頻會產生一個中斷請求。
在EXTI_CR[2:1]J寄存器中對於每一個中斷向量都可以單獨編程為上升沿或者下降沿觸發。
外部中斷只對I/O口設置為輸入模式才有效
中斷屏蔽
可以通過對PX_CR2寄存器的相應位進行編程來單獨使能/關閉外部中斷功能,復位后外部中斷是關閉的。
模擬通道
ADC外設可以選擇某些I/O口作為模擬輸入通道。當使用模擬通道的時候,ADC_TDR寄存器的輸入施密特觸發器必須被關閉。
施密特觸發器
部分I/O口包括一個內嵌的輸入施密特觸發器。可以通過ADC_TDR施密特觸發器禁止寄存器來使能/禁止施密特觸發器
輸出模式
將DDRX位置1就選擇了輸出模式。在該模式下向ODR寄存器的位寫入數據將會通過鎖存器輸出對應數字值到I/O口。讀IDR的位將會返回相應的I/O引腳電頻值。通過軟件配置CR1,CR2寄存器可以得到不同的輸出模式:上拉輸出,開漏輸出。
輸出功能為單片機輸出到外部或者I/O引腳提供一個方便的操作方法,輸出功能使能時,輸出功能模塊接管了輸出鎖存寄存器(PX_ODR)並強制PX_ODR相應的位為1
輸出功能可以是上拉或者開漏輸出,取決於外設本身和控制寄存器1(PX_CR1),輸出頻率取決於控制寄存器2(PX_CR2)的值。
例如:
考慮達到最佳性能,SPI輸出引腳必須設置為上拉,快速擺率. uart_TX可以被配置為上拉或者開漏外部帶上啦來實現從機的配置。
擺率控制
擺率輸出可以使用CR2的相應位通過軟件控制。置位CR相應位選擇為10MHZ的輸出頻率。該功能可以在開漏也可以用在帶上啦的輸出模式I/O口,輸出類型為O3和O4
復位后的默認配置
復位之后,所有的引腳都是懸浮輸入模式。
沒有使用的引腳
沒有使用的引腳必須連接到一個固定的電頻。
低功耗模式
低功耗模式對GPIO口的影響
等待(Wait) 對I/O口無影響。外部中斷可以腮紅MCU退出等待(Wait)模式
停機(Halt) 對I/O口無影響。 外部中斷可以說使MCU從停機模式(Halt)喚醒
GPIO寄存器
GPIO 寄存器表和復位值
以上寄存器值的描述是我復制stm8s手冊描述。