配置時鍾:
void CMU_ClockEnable(CMU_Clock_TypeDef clock, bool enable) CMU_ClockEnable(cmuClock_HFPER, true); /* Enable GPIO in CMU */ CMU_ClockEnable(cmuClock_GPIO, true);
配置引腳為輸入:
void GPIO_PinModeSet(GPIO_Port_TypeDef port, unsigned int pin, GPIO_Mode_TypeDef mode, unsigned int out) /* Configure PB9 and PB10 as input */ GPIO_PinModeSet(gpioPortB, 9, gpioModeInput, 0); GPIO_PinModeSet(gpioPortB, 10, gpioModeInput, 0);
配置引腳為輸出:
void GPIO_PinModeSet(GPIO_Port_TypeDef port, unsigned int pin, GPIO_Mode_TypeDef mode, unsigned int out) GPIO_PinModeSet(ledArray[ledNo].port, ledArray[ledNo].pin, gpioModePushPull, 0);
配置引腳為中斷輸入:
中斷初始化:
void GPIOINT_Init(void) { NVIC_ClearPendingIRQ(GPIO_ODD_IRQn); //清除奇數引腳中斷標志 NVIC_EnableIRQ(GPIO_ODD_IRQn); //使能奇數引腳中斷 NVIC_ClearPendingIRQ(GPIO_EVEN_IRQn); //清除偶數引腳中斷標志 NVIC_EnableIRQ(GPIO_EVEN_IRQn); //使能偶數引腳中斷 }
先配置為輸入,再配置中斷
__STATIC_INLINE void GPIO_IntConfig(GPIO_Port_TypeDef port, unsigned int pin, bool risingEdge, bool fallingEdge, bool enable) /* Set falling edge interrupt for both ports */ GPIO_IntConfig(gpioPortB, 9, false, true, true); GPIO_IntConfig(gpioPortB, 10, false, true, true);
引腳輸出高電平:
__STATIC_INLINE void GPIO_PinOutSet(GPIO_Port_TypeDef port, unsigned int pin) GPIO_PinOutSet(ledArray[ledNo].port, ledArray[ledNo].pin);
引腳輸出低電平:
__STATIC_INLINE void GPIO_PinOutClear(GPIO_Port_TypeDef port, unsigned int pin) GPIO_PinOutClear(ledArray[ledNo].port, ledArray[ledNo].pin);
引腳翻轉輸出電平:
__STATIC_INLINE void GPIO_PinOutToggle(GPIO_Port_TypeDef port, unsigned int pin) GPIO_PinOutToggle(ledArray[ledNo].port, ledArray[ledNo].pin);
讀取輸出引腳電平:
__STATIC_INLINE unsigned int GPIO_PinOutGet(GPIO_Port_TypeDef port, unsigned int pin) retVal = (int)GPIO_PinOutGet(ledArray[ledNo].port, ledArray[ledNo].pin);
讀取輸入引腳電平:
__STATIC_INLINE unsigned int GPIO_PinInGet(GPIO_Port_TypeDef port, unsigned int pin)
讀取輸入端口:
__STATIC_INLINE uint32_t GPIO_PortInGet(GPIO_Port_TypeDef port)