初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 2022-1-6
- 在线时间
- 27 小时
|
2金钱
f4进入中断后,不能返回,程序如下:
********************************************************************************fire.h**************************************************************************************************#ifndef _FIRE_H
#define _FIRE_H
#include "sys.h"
#include "delay.h"
#include "oled.h"
#include "led.h"
// E2 E3 E4 E5 E6
#define fire1 PEin(10)
#define fire2 PEin(11)
#define fire3 PEin(12)
#define fire4 PEin(13)
#define fire5 PEin(14)
void Fire_init(void); //火焰传感器初始化
void EXTI15_10_Init(void); //中断向量初始化
#endif
********************************************************************************fire.c**************************************************************************************************
#include "fire.h"
void Fire_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //使能GPIOE时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; // fire12345对应引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOE2,3,4
}
void EXTI15_10_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
Fire_init(); //按键对应的IO口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG时钟
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource10); // PE10 连接到中断线10
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11); // PE11 连接到中断线11
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource12); // PE12 连接到中断线12
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource13); // PE13 连接到中断线13
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource14); // PE14 连接到中断线14
/* 配置EXTI_Linex */
EXTI_InitStructure.EXTI_Line = EXTI_Line10 | EXTI_Line11 |
EXTI_Line12 | EXTI_Line13 | EXTI_Line14; // LINEx
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断事件
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能LINE
EXTI_Init(&EXTI_InitStructure); //配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //外部中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure); //配置
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(100);
if (fire1 == 1)
{
EXTI_ClearITPendingBit(EXTI_Line10); //清除LINE0上的中断标志位
OLED_Clear();
OLED_ShowString(25, 20, "Find fire1", 16, 1);
OLED_Refresh();
LED0 = 0;
LED1 = !LED1;
}
if (fire2 == 1)
{
EXTI_ClearITPendingBit(EXTI_Line11); //清除LINE0上的中断标志位
OLED_Clear();
OLED_ShowString(25, 20, "Find fire2", 16, 1);
OLED_Refresh();
LED0 = 1;
LED1 = 0;
}
if (fire3 == 1)
{
EXTI_ClearITPendingBit(EXTI_Line13); //清除LINE0上的中断标志位
OLED_Clear();
OLED_ShowString(25, 20, "Find fire3", 16, 1);
OLED_Refresh();
LED0 = 0;
LED1 = 0;
}
if (fire4 == 1)
{
EXTI_ClearITPendingBit(EXTI_Line14); //清除LINE0上的中断标志位
OLED_Clear();
OLED_ShowString(25, 20, "Find fire4", 16, 1);
OLED_Refresh();
LED0 = !LED0;
LED1 = 1;
}
if (fire5 == 1)
{
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中断标志位
OLED_Clear();
OLED_ShowString(25, 20, "Find fire5", 16, 1);
OLED_Refresh();
LED0 = 1;
LED1 = !LED1;
}
}
**********************************************************************************main.c********************************************************************************************
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "oled.h"
#include "bluetooth.h"
#include "timer34.h"
#include "fire.h"
#include "led.h"
u16 pwmval1 = 25;
u16 pwmval2 = 25;
u16 pwmval3 = 25;
u16 pwmval4 = 25;
int main(void)
{
int t=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2
LED_Init();
uart_init(115200);
delay_init(168); //初始化延时函数
OLED_Init(); // OLED初始化
Usart3_init(9600);
EXTI15_10_Init();
TIM3_Int_Init(500 - 1, 84 - 1); //定时器时钟84M,分频系数84,所以84M/84=1Mhz的计数频率,频率为10khz
TIM4_Int_Init(500 - 1, 84 - 1); //定时器时钟84M,分频系数84,所以84M/84=1Mhz的计数频率,频率为10khz
while (1)
{
OLED_Clear();
OLED_ShowString(25, 20, "work", 16, 1);
OLED_Refresh();
LED2=!LED2;
printf("t:%d\r\n",t);
t++;
delay_ms(500);
}
}
|
|