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

未来星辰   2017-9-30 15:40 楼主
STM8L中断同一端口开启两个不同的外部中断,会出现进入其中一个外部中断,整个程序有马上重新初始化,一直反复这样,有哪位大神知道原因的吗

回复评论 (3)

你的时钟配置 硬件电路 好好看看
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2017-9-30 16:05
整个程序有马上重新初始化? 是不是 重启了。有没有打开看门狗。看看执行到什么地方出的问题。
点赞  2017-10-9 13:39
引用: ienglgge 发表于 2017-10-9 13:39
整个程序有马上重新初始化? 是不是 重启了。有没有打开看门狗。看看执行到什么地方出的问题。

打开看门狗了的  我己感觉有可能是中断初始化的问题 因为有一个端口是给无线用的  这部分的程序不是我写的 另外一个端口是做电压检测用的 下面是程序
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模式.
}
点赞  2017-10-9 18:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复