微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM8L中断同一端口开启两个引脚的中断会出现错误

STM8L中断同一端口开启两个引脚的中断会出现错误

时间:10-02 整理:3721RD 点击:
STM8L中断同一端口开启两个不同的外部中断,会出现进入其中一个外部中断,整个程序有马上重新初始化,一直反复这样,有哪位大神知道原因的吗。

肯定是你程序写的有问题,贴出代码,才能分析

void Init_EXTI(void)
{
    EXTI_DeInit();
    GPIO_Init(GPIOE,GPIO_Pin_7,GPIO_Mode_In_FL_IT);//设置PE7为浮空输入中断模式
   
    EXTI_SetPinSensitivity (EXTI_Pin_7,EXTI_Trigger_Rising);//选择PE7为外部中断敏感信号
    EXTI_SelectPort(EXTI_Port_E);
    //    ITC_SetSoftwarePriority(EXTI3_IRQn,ITC_PriorityLevel_1);//设置中断优先级
//    GPIO_ExternalPullUpConfig(GPIOE, GPIO_Pin_7, ENABLE);         //上拉   
//   EXTI_ClearITPendingBit (EXTI_IT_Pin7);//清中断标志位
//  GPIO_ResetBits(Relay_RW_PORT,Relay_RW_PORT_BIT);
   
}
INTERRUPT_HANDLER(EXTI7_IRQHandler,15)
{
   
    EXTI_ClearITPendingBit(EXTI_IT_Pin7);
    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7))
    {
      delay(200);
      if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7))
      {
        GPIO_ResetBits(LED_RW_PORT,LED_RW_PORT_BIT);
        delay(5000);
        GPIO_SetBits(LED_RW_PORT,LED_RW_PORT_BIT);
      }
    }
    //Relay_Closed();
    flag = 1;
    EXTI_ClearITPendingBit(EXTI_IT_Pin7);
   
}

INTERRUPT_HANDLER(EXTI4_IRQHandler,12)   //PC0中断  RF_GDO0;
{
    EXTI_ClearITPendingBit(EXTI_IT_Pin4);   
    SX127X_LoRaRxPacket(g_ucRTxBuff);
    EXTI_ClearITPendingBit(EXTI_IT_Pin4);    //清除我待处理的部分  
    flag = 1;
}
void Sx127xInitHard(void)
{
    uint8_t registerValue;
  GPIO_Init(SX1278_TXE_PORT, SX1278_TXE_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_ResetBits(SX1278_TXE_PORT, SX1278_TXE_PIN);   
  GPIO_Init(SX1278_RXE_PORT, SX1278_RXE_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_SetBits(SX1278_RXE_PORT, SX1278_RXE_PIN);   
//REST REST输出置低
//    SX1278_REST_ANS = 0;
//    SX1278_REST_PIN = 0;
//    SX1278_REST_DIR = 0;
  GPIO_Init(SX1278_RST_PORT, SX1278_RST_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_ResetBits(SX1278_RST_PORT, SX1278_RST_PIN);  
//CSN CSN输出置高
//    SX1278_CSN_ANS = 0;
//    SX1278_CSN_PIN = 1;
//    SX1278_CSN_DIR = 0;
  GPIO_Init(SX1278_SCS_PORT, SX1278_SCS_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_SetBits(SX1278_SCS_PORT, SX1278_SCS_PIN);   
//SCLK SCLK输出置低
//    SX1278_SCLK_ANS = 0;
//    SX1278_SCLK_PIN = 0;
//    SX1278_SCLK_DIR = 0;
  GPIO_Init(SX1278_SCK_PORT, SX1278_SCK_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_ResetBits(SX1278_SCK_PORT, SX1278_SCK_PIN);   
//MOSI MOSI输出置高
//    SX1278_MOSI_ANS = 0;
//    SX1278_MOSI_PIN = 1;
//    SX1278_MOSI_DIR = 0;
  GPIO_Init(SX1278_MOSI_PORT, SX1278_MOSI_PIN, GPIO_Mode_Out_PP_High_Slow);
  GPIO_SetBits(SX1278_MOSI_PORT, SX1278_MOSI_PIN);   
//MISO MISO输入
//    SX1278_MISO_ANS = 0;
//    SX1278_MISO_DIR = 1;
  SX1278_MISO_MI;  
//开启SX127x电源
  GPIO_Init(GPIOA, BIT3, GPIO_Mode_Out_PP_High_Slow);
  GPIO_ResetBits(GPIOA, BIT3);   
  
  //SX1278_POWER_ON();
    __delay_ms(10); //电源稳定时间
//sx127x REST引脚正常工作
    //SX1278_REST_PIN = 1;
    SX1278_RST_H;
    __delay_ms(10); //不低于10ms
//IRQ IRQ输入
//    SX1278_IRQ_ANS = 0;
//    SX1278_IRQ_DIR = 1;
    GPIO_Init(SX1278_INT_PORT, SX1278_INT_PIN, GPIO_Mode_In_FL_IT);
//  GPIO_Init(SX1278_INT_PORT, SX1278_INT_PIN, GPIO_Mode_In_FL_No_IT);
  EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Rising);
    registerValue = SpiReadOneRegister(LR_RegFrMsb);
    SpiWriteOneRegister(LR_RegOpMode,registerValue);
    SpiWriteOneRegister(LR_RegOpMode,MODE_SLEEP); //进入Sleep模式.
}

这是代码  无线部分不是我写的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top