OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1632|回复: 1

求助!为什么我的程序死在了中断里

[复制链接]

2

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-9-28
在线时间
4 小时
发表于 2022-9-30 21:41:44 | 显示全部楼层 |阅读模式
1金钱
流程是这样的,首先进入主程序,初始化相关外设,进入死循环LED闪烁,
同时关闭蜂鸣器(测试程序有没有从中断返回),配置PE3为外部中断输入,
中断服务程序放在了stm32f10x.c里面,进入中断后蜂鸣器会响,同时LED翻转,
然后回到主程序,会关闭蜂鸣器,继续执行LED闪烁,但是我写得程序在进入中断后
蜂鸣器一直响,并且不会回到主程序LED闪烁,查了半天也找不到问题所在,
希望朋友们能够帮忙排除一下这个bug,感谢!!!


源代码***************************************************************************
                                                      main.c
#include "stm32f10x.h"
#include "LED.h"
#include "exti.h "
#include "beep.h"
#include "systick.h"

int main(void)
{
        LED_GPIO_Config();
        EXIT_Key_Config();
        BEEP_GPIO_Config();
        while(1)
        {
                   
                LED(OFF);
                Systick_Delay_ms(500);
                LED(ON);
                Systick_Delay_ms(500);
               
                //关闭蜂鸣器
                GPIO_ResetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);

//               
        }
}
*************************************************************************
                                exti.c
#include"exti.h"

static NVIC_Config(void)
{
        NVIC_InitTypeDef NVIC_InitStruct;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x02;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;
        NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStruct);
}

void EXIT_Key_Config(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;
        EXTI_InitTypeDef EXTI_InitStruct;
       
  //        置中断优先级
        NVIC_Config();
       
        //初始化gpio
        RCC_APB2PeriphClockCmd(KEY_INT_CLK,ENABLE);
        GPIO_InitStruct.GPIO_Pin=KEY_INT_PIN;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
  GPIO_Init(KEY_INT_PORT,&GPIO_InitStruct);
       
        //初始化EXTI
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
       
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);
       
        EXTI_InitStruct.EXTI_Line=EXTI_Line3;
        EXTI_InitStruct.EXTI_LineCmd=ENABLE;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;
       
        EXTI_Init(&EXTI_InitStruct);
       
       
               


               
       
}

*******************************************************************
   中断程序我放在了  stm32f10x_it.c中
void EXTI3_IRQHandler(void)
{
        Systick_Delay_ms(10);
        if(GPIO_ReadInputDataBit(KEY_INT_PORT, KEY_INT_PIN)==0)
        {

                GPIO_SetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);//打开蜂鸣器
                LED_TOGGLE;        //LED翻转
        }
       
        EXTI_ClearITPendingBit(EXTI_Line3);

       
}








正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-9-28
在线时间
4 小时
 楼主| 发表于 2022-9-30 22:07:11 来自手机 | 显示全部楼层
更正一下,中断放在stm32f10x-it.c中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 01:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表