如何配置gpio
① gpio介面怎麼用
一、gpio用途
General Purpose Input Output (通用輸入/輸出)簡稱為GPIO,或匯流排擴展器,人們利用工業標准I2C、SMBus或SPI介面簡化了I/O口的擴展。當微控制器或晶元組沒有足夠的I/O埠,或當系統需要採用遠端串列通信或控制時,GPIO產品能夠提供額外的控制和監視功能。
每個GPIO埠可通過軟體分別配置成輸入或輸出。Maxim的GPIO產品線包括8埠至28埠的GPIO,提供推挽式輸出或漏極開路輸出。提供微型3mm x 3mm QFN封裝。
不同系統間的GPIO的確切作用不同。通用常有下面幾種:
1.輸出值可寫(高=1,低=0)。一些晶元也可以選擇驅動這些值的方式,以便支持「線-或」或類似方案(開漏信號線)。
2.輸入值可讀(1,0)。一些晶元支持輸出管腳回讀,這在線或的情況下非常有用(以支持雙向信號線)。GPIO控制器可能具有一個輸入防故障/防反跳邏輯,有時還會有軟體控制。
3.輸入經常被用作中斷信號,通常是邊沿觸發,但也有可能是電平觸發。這些中斷可以配置為系統喚醒事件,從而將系統從低功耗模式喚醒。
4.一個GPIO經常被配置為輸入/輸出雙向,根據不同的產品單板需求,但也存在單向的情況。
5.大多是GPIO可以在獲取到spinlock自旋鎖時訪問,但那些通過串列匯流排訪問的通常不能如此操作(休眠的原因)。一些系統中會同時存在這兩種形式的GPIO。
6.在一個給定單板上,每個GPIO用於一個特定的目的,如監控MMC/SD卡的插入/移除,檢查卡防寫狀態,驅動LED,配置發送器,串列匯流排位拆,觸發一個硬體看門狗,觸發一個開關之類的。
二、GPIO使用方法
要使用GPIO,系統首先要分配一個GPIO,使用gpio_request() 為系統分配一個GPIO。
接下來要做的一件事是標示GPIO的方向,通常在使用GPIO建立一個platform_device時(位於單板的setup代碼中)。
返回0標示成功,或是一個負的errno錯誤碼。它應該被檢查,因為get/set調用沒有錯誤返回,且可能會有錯誤配置。你通常應該在線程上下文中使用這些調用。雖然如此,對於spinlock-safe的GPIO,在tasking使能之前使用也是可以的,作為一個早期的單板建立。
對於輸出GPIO,value參數提供了初始輸出值。這有助於避免系統啟動過程中的信號干擾。
為了與GPIO早期的介面兼容,設置一個GPIO的方向,隱性要求申請GPIO。這個兼容性從可選的gpiolib架構中移除了。
為了與GPIO早期的介面兼容,設置一個GPIO的方向,隱性要求申請GPIO。這個兼容性從可選的gpiolib架構中移除了。
如果GPIO號碼無效或是指定的GPIO不能使用對應模式操作的話,設置方向會失敗。依靠boot固件設置好GPIO的方向通常不是一個好主意,因為boot的功能可能沒有通過驗證(除了boot linux)。(類似的,單板setup代碼可能需要將管腳復用為一個GPIO,和配置為合適的上拉/下拉)
② 如何設置 GPIO引腳的高低電平
內部配置為上拉,在與外部無連接的情況下,處於高電平(即邏輯 1)。那麼對於輸入模式而言,這種情況下,從引腳讀入的數據自然是高電平(邏輯 1)。
③ 請問如何根據硬體或是數據手冊配置GPIO的輸入輸出模式
用的最多的推挽輸出 模擬輸入,用庫的方式直接寫就完了,用寄存器麻煩一點。現在已經很多資料了,庫的方式很多,寄存器的正點原子的不錯。希望幫到你。
④ stm32的gpio的配置模式有哪幾種,如何進行配置模式的配置
1、輸入浮空GPIO的配置可以在這里找到資料網頁鏈接
2、輸入上拉
3、輸入下拉
4、模擬輸入#
5、開漏輸出
6、推挽輸出
7、推挽式復用功能
8、開漏復用功能
⑤ 如何實現gpio口模式的配置
一、 STM32的輸入輸出管腳有下面8種(4輸入 2輸出 2復用輸出)可能的配置:
① 浮空輸入_IN_FLOATING
② 帶上拉輸入_IPU
③ 帶下拉輸入_IPD
④ 模擬輸入_AIN
⑤ 開漏輸出_OUT_OD
⑥ 推挽輸出_OUT_PP
⑦ 復用功能的推挽輸出_AF_PP
⑧ 復用功能的開漏輸出_AF_OD
1.1 I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這個速度是指I/O口驅動電路的響應速度而不是輸出信號的速度,輸出信號的速度與程序有關(晶元內部在I/O口 的輸出部分安排了多個響應速度不同的輸出驅動電路,用戶可以根據自己的需要選擇合適的驅動電路)。通過選擇速度來選擇不同的輸出驅動模塊,達到最佳的雜訊控制和降低功耗的目的。高頻的驅動電路,雜訊也高,當不需要高的輸出頻率時,請選用低頻驅動電路,這樣非常有利於提高系統的EMI性能。當然如果要輸出較高頻率的信號,但卻選用了較低頻率的驅動模塊,很可能會得到失真的輸出信號。
輸出速度又稱輸出驅動電路的響應速度,可理解為:輸出驅動電路的帶寬,即一個驅動電路可以不失真地通過信號的最大頻率。
如果一個信號的頻率超過了驅動電路的響應速度,就有可能信號失真。如果信號頻率為10MHz,而你配置了2MHz的帶寬,則10MHz的方波很可能就變成了正弦波。就好比是公路的設計時速,汽車速度低於設計時速時,可以平穩地運行,如果超過設計時速就會顛簸,甚至翻車。
關鍵是: GPIO的引腳速度跟應用相匹配,速度配置越高,雜訊越大,功耗越大。
帶寬速度高的驅動器耗電大、雜訊也大,帶寬低的驅動器耗電小、雜訊也小。使用合適的驅動器可以降低功耗和雜訊。
GPIO的引腳速度跟應用匹配(推薦10倍以上)。比如:
1.1.1 對於串口,假如最大波特率只需115.2k,那麼用2M的GPIO的引腳速度就夠了,既省電也雜訊小。
1.1.2 對於I2C介面,假如使用400k波特率,若想把餘量留大些,那麼用2M的GPIO的引腳速度或許不夠,這時可以選用10M的GPIO引腳速度。
1.1.3 對於SPI介面,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。
1.2 GPIO口設為輸入時,輸出驅動電路與埠是斷開,所以輸出速度配置無意義。
1.3 在復位期間和剛復位後,復用功能未開啟,I/O埠被配置成浮空輸入模式。
1.4 所有埠都有外部中斷能力。為了使用外部中斷線,埠必須配置成輸入模式。
1.5 GPIO口的配置具有上鎖功能,當配置好GPIO口後,可以通過程序鎖住配置組合,直到下次晶元復位才能解鎖。
二、GPIO的翻轉速度指:輸入/輸出寄存器的0 ,1 值反映到外部引腳(APB2上)高低電平的速度.手冊上指出GPIO最大翻轉速度可達18MHz。通過簡單的程序測試,用示波器觀察到的翻轉時間是綜合的時間,包括取指令的時間、指令執行的時間、指令執行後信號傳遞到寄存器的時間(這其中可能經過很多環節,比如AHB、APB、匯流排仲裁等),最後才是信號從寄存器傳輸到引腳所經歷的時間。如有上拉電阻,其阻值越大,RC延時越大,即邏輯電平轉換的速度越慢,功耗越大。
三、在STM32中如何配置片內外設使用的IO埠
首先,一個外設經過 ①配置輸入的時鍾和 ②初始化後即被激活(開啟);③如果使用該外設的輸入輸出管腳,則需要配置相應的GPIO埠(否則該外設對應的輸入輸出管腳可以做普通GPIO管腳使用);④再對外設進行詳細配置。
對應到外設的輸入輸出功能有下述三種情況:
① 外設對應的管腳為輸出:需要根據外圍電路的配置選擇對應的管腳為復用功能的推挽輸出或復用功能的開漏輸出。
② 外設對應的管腳為輸入:則根據外圍電路的配置可以選擇浮空輸入、帶上拉輸入或帶下拉輸入。
③ ADC對應的管腳:配置管腳為模擬輸入。
如果把埠配置成復用輸出功能,則引腳和輸出寄存器斷開,並和片上外設的輸出信號連接。將管腳配置成復用輸出功能後,如果外設沒有被激活,那麼它的輸出將不確定。
四、 通用IO埠(GPIO)初始化
4.1 GPIO初始化
41.1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2匯流排外設時鍾;
41.2 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):釋放GPIO復位。
4.2 置各個PIN埠(模擬輸入_AIN、輸入浮空_IN_FLOATING、輸入上拉_IPU、輸入下拉_IPD、開漏輸出_OUT_OD、推挽式輸出_OUT_PP、推挽式復用輸出_AF_PP、開漏復用輸出_AF_OD)。
4.3GPIO初始化完成。
五、 的GPIO操作函數
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//讀GPIO某一位的輸入
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//讀GPIO的輸入
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//讀GPIO某一位的輸出
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//讀GPIO的輸出
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//將GPIO的某個位置位
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//將GPIO的某個位復位
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//寫GPIO的某個位
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//寫GPIO
六、管腳的復用功能 重映射
1、復用功能:內置外設是與I/O口共用引出管腳(不同的功能對應同一管腳)
STM32 所有內置外設的外部引腳都是與標准GPIO引腳復用的,如果有多個復用功能模塊對應同一個引腳,只能使能其中之一,其它模塊保持非使能狀態。
2、重映射功能:復用功能的引出腳可以通過重映射,從不同的I/O管腳引出,即復用功 能的引出腳位是可通過程序改變到其他的引腳上!
直接好處:PCB電路板的設計人員可以在需要的情況下,不必把某些信號在板上繞一大圈完成聯接,方便了PCB的設計同時潛在地減少了信號的交叉干擾。
如:USART1: 0: 沒有重映像(TX/PA9,RX/PA10); 1: 重映像(TX/PB6,RX/PB7)。
(參考AFIO_MAPR寄存器介紹)[0,1為一寄存器的bit值]
【注】 下述復用功能的引出腳具有重映射功能:
- 晶體振盪器的引腳在不接晶體時,可以作為普通I/O口
- CAN模塊; - JTAG調試介面;- 大部分定時器的引出介面; - 大部分USART引出介面
- I2C1的引出介面; - SPI1的引出介面;
舉例:對於STM32F103VBT6,47引腳為PB10,它的復用功能是I2C2_SCL和 USART3_TX,表示在上電之後它的默認功能為PB10,而I2C2的SCL和USART3的TX為它的復用功能;另外在TIM2的引腳重映射後,TIM2_CH3也成為這個引腳的復用功能。
(1)要使用STM32F103VBT6的47、48腳的USART3功能,則需要配置47腳為復用推挽輸出或復用開漏輸出,配置48腳為某種輸入模式,同時使能USART3並保持I2C2的非使能狀態。
(2)使用STM32F103VBT6的47腳作為TIM2_CH3,則需要對TIM2進行重映射,然後再按復用功能的方式配置對應引腳。
⑥ 如何配置gpio才能調用crl寄存器
一、埠配置寄存器是用於配置GPIO工作模式的,具體各位的意義要看手冊:
二、CN7[1:0] 是指CN7配置占兩位,分別對應自己所在位的高位(1)、低位(0),手冊中如此標識也是為了便於說明。如果佔用3位,可標識為xxx[2:0],以下說明時可表示bit2,bit1,bit0;其他同理。
三、->是結構體指針引用結構成員符號,GPIOC本質上是結構體指針,結構體:
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
1《11,是移位操作,即1向左移11位,這個11是根據所要設置寄存器的位置來確定的,具體的可以查看手冊。明白這個意思,可以舉一反三。
四、位31:30 就是指在整個32位寄存器中,所佔位置為 31位和30位。注意,一般位標識是從0開始的,所以32位寄存器表示位31到位0.
⑦ 如何實現一次對多GPIO進行配置
以LED燈為例子:
void led(void)
{
/*定義一個GPIO_InitTypeDef類型的結構體*/
GPIO_InitTypeDef GPIO_InitStructure;
/*開啟GPIOB的外設時鍾*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE);
/*選擇要控制的GPIOB引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8;
/*設置引腳模式為通用推挽輸出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*設置引腳速率為50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*調用庫函數,初始化GPIOB*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 讓選擇引腳輸出高電平*/
GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1);
}
其中GPIO有多個模式,需要按照不同功能和使用來配置。這里LED燈需要輸出,所以我設置為通用推挽。
⑧ 怎樣查看或設置GPIO口的工作模式
有關推挽輸出、開漏輸出、復用開漏輸出、復用推挽輸出以及上拉輸入、下拉輸入、浮空輸入、模擬輸入的區別最近在看數據手冊的時候,發現在Cortex-M3里,對於GPIO的配
⑨ 如何將GPIO口配置為上拉,下拉輸入
上拉電阻的目的是為了保證在無信號輸入時輸入端的電平為高電平。而在信號輸入為低電平是輸入端的電平應該也為低電平。如果沒有上拉電阻,在沒有外界輸入的情況下輸入端是懸空的,它的電平是未知的無法保證的,上拉電阻就是為了保證無信號輸入時輸入端的電平為高電平,同樣還有下拉電阻它是為了保證無信號輸入時輸入端的電平為低電平。
這是上拉電阻和下拉電阻的作用!所以你在這里設置時!是沒有多大的區別的!
⑩ k60怎麼設置GPIO為輸入輸出功能
這個和K60沒關系哦;
GPIO 即是General Purpose Input Output (通用輸入/輸出),
對於k60的引腳可以復用,即是不止具有一種功能,可以初始化為GPIO輸入或者輸出功能;還有其他喲
如果你要初始化為其他功能,比如FTM吧,你要使用一個引腳吧,但這時引腳總得有一個名字吧,
這時PORTAx PORTBx不是就幫助你了嗎;(真相是每個port都由一個鎖存器,輸出驅動器,輸入緩沖器等組成,名字不是天上來的)
簡單理解即是:k60有很多引腳,將它們分給PORTA、PORTB、PORTC、PORTD、PORTE埠;
每個埠對應有幾個引腳;GPIO是一種功能模塊,