EFM32之GPIO
配置时钟:
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)