新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2022-9-28
- 在线时间
- 4 小时
|
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);
}
|
|