打印
[APM32F4]

【APM32F402R Micro-EVB】-4-外部中断配置

[复制链接]
75|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
开发板提供了一个用户按键:


按键KEY1相关的宏定义:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] 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:
*              [url=home.php?mod=space&uid=2817080]@ARG[/url] 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
*
* @retval  None
*/
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[button] | RCM_APB2_PERIPH_AFIO);
   
    /* Configure Button pin as input floating */
    GPIO_ConfigStruct.mode = GPIO_MODE_IN_PU;
    GPIO_ConfigStruct.pin = BUTTON_PIN[button];
    GPIO_Config(BUTTON_PORT[button], &GPIO_ConfigStruct);
   
    if (mode == BUTTON_MODE_EINT)
    {
        /* Connect Button EINT Line to Button GPIO Pin */
        GPIO_ConfigEINTLine(BUTTON_PORT_SOURCE[button], BUTTON_PIN_SOURCE[button]);

        /* Configure Button EINT line */
        EINT_ConfigStruct.line = BUTTON_EINT_LINE[button];
        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[button], 0x0F, 0x0F);
    }
}
调用:BOARD_BUTTON_Config(BUTTON_KEY1, BUTTON_MODE_EINT);

中断处理函数:
/*!
* @brief   This function handles External lines 1 Handler
*
* @param   None
*
* @retval  None
*
*/
void EINT1_IRQHandler(void)
{
    if (EINT_ReadIntFlag(EINT_LINE_1))
    {
        BOARD_LED_Toggle(LED3);
        EINT_ClearIntFlag(EINT_LINE_1);
    }
}
烧录验证:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

290

帖子

2

粉丝