【转】GD32使用外部中断需要延时才能读到真正的电平

[复制链接]
1072|4
 楼主| jerow 发表于 2019-3-30 15:52 | 显示全部楼层 |阅读模式
MCU:GD32F103RCT6中断引脚没有外界上拉电阻
 楼主| jerow 发表于 2019-3-30 15:52 | 显示全部楼层
中断配置如下:
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  2.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  3.     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  4.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  5.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  6.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource9);
  7.    
  8.     EXTI_InitStructure.EXTI_Line=EXTI_Line9;
  9.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;   
  10.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  11.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  12.     EXTI_Init(&EXTI_InitStructure);
 楼主| jerow 发表于 2019-3-30 15:53 | 显示全部楼层
中断函数如下:
  1. void EXTI9_5_IRQHandler(void)
  2. {
  3.     BaseType_t xHigherPriorityTaskWoken = pdFALSE;
  4.    
  5.    
  6.     if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  7.     {
  8.         debug("%d",GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9));
  9.         debug("%d",GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9));
  10.         debug("%d",GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9));
  11.         if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) != 0)
  12.         {
  13.             debug("relay power on, device_power_on is 1");
  14.             xTaskNotifyFromISR( xTaskHandleLoadDatatoServerBuf, g_flag_event[RELAY_POWER_ON], eSetBits, &xHigherPriorityTaskWoken );
  15.             g_data_info.power_on = 1;
  16.         }else
  17.         {
  18.             debug("relay power off, device_power_on is 0");
  19.             xTaskNotifyFromISR( xTaskHandleLoadDatatoServerBuf, g_flag_event[RELAY_POWER_OFF], eSetBits, &xHigherPriorityTaskWoken );
  20.             g_data_info.power_on = 0;
  21.         }
  22.         EXTI_ClearITPendingBit(EXTI_Line9);
  23.     }
  24.     portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
  25. }
tomyoct 发表于 2019-3-31 11:25 | 显示全部楼层
奇怪,不应该加延时的吧?不然实时性就没有了
lvben5d 发表于 2019-4-13 09:57 | 显示全部楼层
本帖最后由 lvben5d 于 2019-4-13 13:47 编辑

你外部电路是否存在 反复抖动从而导致要加几个debug,如果是,可以简单在硬件上加RC,否则检测到有电平跳变就进入中断的你的应用,查看下逻辑处理。我用过旋转编码器加了1个104电容 基本没抖动了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部