CH32V035的EXTI问题

使用CH32V035系列CH32V033,PA10是方波输入,用作外中断,中断后再另一脚输出翻转波形来监测中断,发现2个问题:1是无论是上升沿、下降沿、还是双沿触发,中断都可能在双沿触发;2是总是有些边沿不触发或触发两次。请教,不知道是否有哪些地方没处理到?只用了一个IO做外中断。

初始化

/*********************************************************************

 * @fn      EXTI0_INT_INIT

 *

 * @brief   Initializes EXTI0 collection.

 *

 * @return  none

 */

void EXTI0_INT_INIT(void)

{

    GPIO_InitTypeDef GPIO_InitStructure = {0};

    EXTI_InitTypeDef EXTI_InitStructure = {0};

    NVIC_InitTypeDef NVIC_InitStructure = {0};


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    /* GPIOA ----> EXTI_Line0 */

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource10);

    EXTI_InitStructure.EXTI_Line = EXTI_Line10;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;

//    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);


    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_8_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

中断处理

void EXTI15_8_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));


/*********************************************************************

 * @fn      TIM2_CC_IRQHandler

 *

 * @brief   This function handles TIM2  Capture Compare Interrupt exception.

 *

 * @return  none

 */

void EXTI15_8_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line10)!=RESET)

{

  EXTI_ClearITPendingBit(EXTI_Line10);   /* Clear Flag */

  kk++;

        if (kk&1)

            his_led_on();

        else {

            his_led_off();

        }

    }

}

b3f92be28b7769a04f758ecc8b341e1.jpg

您好,程序中注意一下外部中断引脚模式的配置,若是配置成上升沿触发,则注意引脚配置成下拉输入模式,同理,若是配置成下降沿触发,则注意引脚配置成上拉输入模式。后续若有问题,可邮箱(lzs@wch.cn)沟通。


按建议修改了上下拉,测试情况仍旧。我的信号输入带驱动能力,应该和上下拉无关。而只要设置了上升或下降边沿触发,表现就是上下边沿都触发。换PA2做EXTI也一样,仿真时检查寄存器的正确。

image.png

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    /* GPIOA ----> EXTI_Line0 */

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);

    EXTI_InitStructure.EXTI_Line = EXTI_Line2;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

//    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);



这边找到问题了,是输入信号有细微毛刺。


只有登录才能回复,可以选择微信账号登录