【APM32F402R Micro-EVB】-4-外部中断配置
开发板提供了一个用户按键:按键KEY1相关的宏定义:
/**
* @brief Key1 push-button
*/
#define KEY1_BUTTON_PIN GPIO_PIN_1
#define KEY1_BUTTON_GPIO_PORT GPIOA
#define KEY1_BUTTON_GPIO_CLK RCM_APB2_PERIPH_GPIOA
#define KEY1_BUTTON_EINT_LINE EINT_LINE_1
#define KEY1_BUTTON_EINT_PORT_SOURCE GPIO_PORT_SOURCE_A
#define KEY1_BUTTON_EINT_PIN_SOURCE GPIO_PIN_SOURCE_1
#define KEY1_BUTTON_EINT_IRQ_NUM EINT1_IRQn
配置为外部中断模式:
/*!
* @brief Board button configuration
*
* @param button: Specifies the button to be configured
* This parameter can be one of following parameters:
* @ARG BUTTON_KEY1: Key1 Push Button
* @arg BUTTON_KEY2: Key2 Push Button
*
* @param Button_Mode: Specifies Button mode.
* This parameter can be one of following parameters:
* @arg BUTTON_MODE_GPIO: Button will be used as simple IO
* @arg BUTTON_MODE_EINT: Button will be connected to EINT line
* with interrupt generation capability
*
* @retvalNone
*/
void BOARD_BUTTON_Config(BOARD_BUTTON_T button, BOARD_BUTTON_MODE_T mode)
{
GPIO_Config_T GPIO_ConfigStruct = {0U};
EINT_Config_T EINT_ConfigStruct = {0U};
/* Enable the BUTTON Clock */
RCM_EnableAPB2PeriphClock(BUTTON_CLK | RCM_APB2_PERIPH_AFIO);
/* Configure Button pin as input floating */
GPIO_ConfigStruct.mode = GPIO_MODE_IN_PU;
GPIO_ConfigStruct.pin = BUTTON_PIN;
GPIO_Config(BUTTON_PORT, &GPIO_ConfigStruct);
if (mode == BUTTON_MODE_EINT)
{
/* Connect Button EINT Line to Button GPIO Pin */
GPIO_ConfigEINTLine(BUTTON_PORT_SOURCE, BUTTON_PIN_SOURCE);
/* Configure Button EINT line */
EINT_ConfigStruct.line = BUTTON_EINT_LINE;
EINT_ConfigStruct.mode = EINT_MODE_INTERRUPT;
EINT_ConfigStruct.trigger = EINT_TRIGGER_FALLING;
EINT_ConfigStruct.lineCmd = ENABLE;
EINT_Config(&EINT_ConfigStruct);
/* Enable and set Button EINT Interrupt to the lowest priority */
NVIC_EnableIRQRequest(BUTTON_IRQn, 0x0F, 0x0F);
}
}调用:BOARD_BUTTON_Config(BUTTON_KEY1, BUTTON_MODE_EINT);
中断处理函数:
/*!
* @brief This function handles External lines 1 Handler
*
* @param None
*
* @retvalNone
*
*/
void EINT1_IRQHandler(void)
{
if (EINT_ReadIntFlag(EINT_LINE_1))
{
BOARD_LED_Toggle(LED3);
EINT_ClearIntFlag(EINT_LINE_1);
}
}烧录验证:
页:
[1]