【整理者】61ic.com 【提供者】885783 【详细说明】STM8庫函數學習筆記之GPIO STM8庫函數學習筆記之GPIO 作者:BH7KQK 日期:2010.12.30 相關的函數: void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal); void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); u8 GPIO_ReadInputData(GPIO_TypeDef* GPIOx); u8 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin); void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState); //--------------------------------------------------------------------------------------- void GPIO_DeInit(GPIO_TypeDef* GPIOx); 這個函數用來恢復指定端口的寄存器ODR、DDR、CR1及CR2到默認值0x00,即無中斷功能的浮動輸入,無返回值。 參數: GPIOx: GPIOA到GPIOI可選。 示例: 恢復GPIOB的相應寄存器為默認值 GPIO_DeInit(GPIOB); //--------------------------------------------------------------------------------------- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); 這個函數用來配置指定端口的各個引腳功能,無返回值。 參數: GPIOx: 端口GPIOA到GPIOI可選。 GPIO_Pin: 要初始化的引腳,可以用“或”方式選擇多個引腳, 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 GPIO_Mode:工作模式。 可選值: GPIO_MODE_IN_FL_NO_IT 無中斷功能的浮動輸入。 GPIO_MODE_IN_PU_NO_IT 無中斷功能的上拉輸入。 GPIO_MODE_IN_FL_IT 帶中斷功能的浮動輸入。 GPIO_MODE_IN_PU_IT 帶中斷功能的上拉輸入。 GPIO_MODE_OUT_OD_LOW_FAST 高速開漏低電平輸出,可工作到10MHz。 GPIO_MODE_OUT_PP_LOW_FAST 高速推挽低電平輸出,可工作到10MHz。 GPIO_MODE_OUT_OD_LOW_SLOW 低速開漏低電平輸出,可工作到2MHz。 GPIO_MODE_OUT_PP_LOW_SLOW 低速推挽低電平輸出,可工作到2MHz。 GPIO_MODE_OUT_OD_HIZ_FAST 高速開漏高阻態輸出,可工作到10MHz。 GPIO_MODE_OUT_PP_HIGH_FAST 高速推挽高電平輸出,可工作到10MHz。 GPIO_MODE_OUT_OD_HIZ_SLOW 低速開漏高阻態輸出,可工作到2MHz。 GPIO_MODE_OUT_PP_HIGH_SLOW 低速推挽高電平輸出,可工作到2MHz。 示例: 把GPIOB的引腳0、1、4配置為高速推挽高電平輸出。 GPIO_Init(GPIOB, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4), GPIO_MODE_OUT_PP_HIGH_FAST); //--------------------------------------------------------------------------------------- void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal); 這個函數用來輸出一個八位的值到指定的端口,無返回值。 所需条件:该端口必须配置為输出模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 PortVal:為無符號8位數值。 示例: 端口B輸出0x22。 GPIO_Write(GPIOB, 0x22); //--------------------------------------------------------------------------------------- void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 這個函數用來置位指定端口的一個或多個引腳,即置相應引腳輸出為高電平,無返回值。 所需条件:该端口必须配置為输出模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 PortPins: 要置位引腳,可以用“或”方式選擇多個引腳, 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 示例: 把GPIOB的引腳0和引腳3置位。 GPIO_WriteHigh(GPIOB, (GPIO_PIN_0 | GPIO_PIN_3)); //--------------------------------------------------------------------------------------- void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 這個函數用來復位指定端口一個或多個引腳的電平,即置相應引腳輸出為低電平,無返回值。 所需条件:该端口必须配置為输出模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 PortPins: 要復位引腳,可以用“或”方式選擇多個引腳, 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 示例: 把GPIOB的引腳0和引腳3置為低電平。 GPIO_WriteLow(GPIOB, (GPIO_PIN_0 | GPIO_PIN_3)); //--------------------------------------------------------------------------------------- void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 這個函數用來取反指定端口的一個或多個引腳的電平狀態,如果當前該引腳為高電平則置為低電平,如果為低電平則置為高電平,無返回值。 所需条件:该端口必须配置為输出模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 PortPins: 要取反的引腳,可以用“或”方式選擇多個引腳。 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 示例: 取反GPIOB的引腳0和引腳3的電平狀態。 GPIO_WriteReverse(GPIOB, (GPIO_PIN_0 | GPIO_PIN_3)); //--------------------------------------------------------------------------------------- u8 GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 這個函數用來讀取指定端口的數據,返回一個八位無符號值。 所需条件:该端口必须配置為输入模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 示例:讀取端口A的數值。 u8 r_data; r_data = GPIO_ReadInputData(GPIOA); //--------------------------------------------------------------------------------------- u8 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 這個函數用來讀取指定端口的輸出寄存器的數據,返回一個八位無符號值。 參數: GPIOx:端口GPIOA到GPIOI可選。 示例:讀取端口A的輸出寄存器的數值。 u8 r_data; r_data = GPIO_ReadOutputData(GPIOA); //--------------------------------------------------------------------------------------- BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin); 這個函數用來讀取指定端口一個或多個引腳狀態,任意一個引腳為高電平側返回SET,否則返回RESET。 所需条件:该端口必须配置為输入模式。 參數: GPIOx:端口GPIOA到GPIOI可選。 GPIO_Pin: 要讀取狀態的引腳,可以用“或”方式選擇多個引腳, 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 示例: 讀取GPIOB引腳1的電平狀態。 GPIO_ReadInputPin(GPIOB, GPIO_PIN_1); //--------------------------------------------------------------------------------------- void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState); 這個函數用來使能或禁止指定端口某一個或多個引腳的內部上拉電阻,無返回值。 參數: GPIOx:端口GPIOA到GPIOI可選。 GPIO_Pin: 要使能或禁止內部上拉電阻的引腳,可以用“或”方式選擇多個引腳, 可選值: GPIO_PIN_0 選擇 0 引腳 GPIO_PIN_1 選擇 1 引腳 GPIO_PIN_2 選擇 2 引腳 GPIO_PIN_3 選擇 3 引腳 GPIO_PIN_4 選擇 4 引腳 GPIO_PIN_5 選擇 5 引腳 GPIO_PIN_6 選擇 6 引腳 GPIO_PIN_7 選擇 7 引腳 GPIO_PIN_LNIB 低四位引腳選擇,即同時選擇PIN_0到PIN_3。 GPIO_PIN_HNIB 高四位引腳選擇,即同時選擇PIN_4到PIN_7。 GPIO_PIN_ALL 選擇全部引腳,即同時選擇PIN_0到PIN_7。 示例:禁止和使能端口GPIOB引腳0的上拉電阻。 如果該引腳原為推挽輸出,那么禁止后就變為開漏輸出。 如果該引腳原來上拉輸入,那么禁止后就變為浮動輸入。 如果該引腳原為開漏輸出,那么使能后就變為推挽輸出。 如果該引腳原來浮動輸入,那么使能后就變為上拉輸入。 (1)GPIO_ExternalPullUpConfig(GPIOB, GPIO_PIN_0, DISABLE); //禁止內部上拉電阻。 (2)GPIO_ExternalPullUpConfig(GPIOB, GPIO_PIN_0, ENABLE); //使能內部上拉電阻。 //---------------------------------------------------------------------------------------