樑子20163933
io口可以配置的8種模式:
輸入浮空
輸入上拉
輸入下拉
模擬輸入
開漏輸出
推挽輸出
推挽式復用功能
開漏復用功能
stm32io口配置表
復位值:0x4444 4444(相當於是浮空輸入)
控制每個io埠(a~g)的低八位模式
每個io埠的位占用crl的四個位,高兩位是cnf,低兩位是mode
0x0:模擬輸入模式(adc用)
0x3:推免輸出模式(做輸出口用,50m速率)
crh與crl相似,只不過控制的是高八位。gpio_typedef:代表的是指定的io介面(gpioa~gpiog)
gpio_inittypedef* : 初始化引數結構體指標
結構體的定義為:
typedef
struct
gpio_inittypedef;
在跑馬燈示例中對乙個介面的初始化**為:
gpio_initstructure.gpio_pin = gpio_pin_8; //led0-->pa.8 埠配置
gpio_initstructure.gpio_mode = gpio_mode_out_pp; //推挽輸出
gpio_initstructure.gpio_speed = gpio_speed_50mhz; //io口速度為50mhz
gpio_init(gpioa, &gpio_initstructure); //根據設定引數初始化gpioa.8
gpio_setbits(gpioa,gpio_pin_8); 輸出高
其中對mode屬性的初始化在mdk中是用乙個列舉進行定義的:
typedef enum
gpiomode_typedef;
只能以16位的形式讀出,唯讀(r)。低16位(對應著乙個io口的16個引腳)。
可以通過讀取這個暫存器的某個位的狀態來獲得那個io口的引腳的電平狀態。
讀取函式:
uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin)
返回的是1(set)或者0(reset)。
只能以16位的形式輸出,可讀可寫(rw)。可讀相當於判斷當前io口的輸出狀態,而可寫相當於控制io口的輸出電平是高還是低。
讀取函式:
void
gpio_write(gpio_typedef* gpiox, uint16_t portval);
//示例**:gpio_write(gpiod,0x0100) //使pd8置高 這個定要認真理解!!!!!
這個暫存器也可以控制埠的輸出,首先給出這個暫存器的內部結構:
對埠的低位(低16位)送1表示置1,高位置1表示置0;注意:所有的暫存器都是32位的
例子:gpioa ->bsrr=1
<<1; //這裡表示對aio介面的1號埠(引腳)置高電平
gpioa ->bsrr=1
<
在這裡必須要解釋一下這兩行容易誤導人的**:首先控制的是a口的「1」號埠,這個「1」是**中的《右邊的1,左邊的1代表的是把右邊的1的數置為1。
由於之前的暫存器都是只有前16位有效,後16位不起作用,所以這裡沒有太好的理解。事實是這樣的:乙個埠對應著32位暫存器中的兩個數字(比如
0號埠對應著0和16,1號埠對應著1和(16+1),這就是上面的**的原理)
功能與bsrr的高16位雷同。
如若通過韌體庫函式來進行實現,則可以將之變為:
void
gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);
void
gpio_resetbits(gpio_typedef* gpiox,uint16_t gpio_pin);
使能io口時鐘;
rcc_apb2periphclockcmd( );
初始化io引數,呼叫gpio_init();
利用上述的暫存器和韌體庫函式操作io.
樹莓派(十三) 多PWM通過GPIO口引腳輸出
import rpi.gpio as gpio import time gpio.setmode gpio.bcm gpio.setup 18,gpio.out pwm led0 gpio.pwm 18,10 將gpio27引腳的頻率設定為5hz 乙個脈衝時間長度0.2s pwm led0.star...
stm32學習1之GPIO口
ps 使用的32型號是.stm32f407zgt 原本我是不打算繼續更32的,但是最近的做的一些東西需要用到arm。所以想想就複習一下32吧!畢竟當初學的也確實不咋地。32系列我不會用很官方的話來講,我會用自己的理解最粗暴直白的表達出來。有什麼錯誤歡迎指正,企鵝 918619587 首先我們解釋一下...
STM32的GPIO口的輸出 開漏輸出和推挽輸出
推挽輸出與開漏輸出的區別 推挽輸出 可以輸出高,低電平,連線數字器件 開漏輸出 輸出端相當於三極體的集電極.要得到高電平狀態需要上拉電阻才行.適合於做電流型的驅動,其吸收電流的能力相對強 一般20ma以內 三極體的開漏輸出有什麼特性,和推挽是不是一回事,問題 很多晶元的供電電壓不一樣,有3.3v和5...