新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2018-2-10
- 在线时间
- 20 小时
|
本帖最后由 wzjlymL 于 2019-4-17 16:43 编辑
我初始化了3个按键,两个用来触发外部中断,一个用来关闭中断,外部中断优先级1个是4,一个是6,我的FreeRTOS配置最大优先级为5,但是按下关闭中断那个按键后,2个外部中断还是可以触发,求大神解答?谢谢!代码如下:
[mw_shl_code=c,true]#include "stm32f4xx.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include <stdio.h>
#include "exti.h"
#include "FreeRTOS.h"
#include "task.h"
/*声明任务函数*/
void vTask1( void *pvParameters );
void Interrupt_Task1( void *pvParameters );
TaskHandle_t INTE_Hander;
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//中断优先级分组
GPIOX_Init(); //LED灯GPIO初始化
Key_Init(); //按键初始化
Usart1_MY_Init();//串口初始化
EXTIX_Init(); //外部中断初始化
/*创建任务*/
xTaskCreate(vTask1,"vTask1",128,NULL,2,&INTE_Hander);
/* 启动任务调度器,开始执行任务 */
vTaskStartScheduler();
}
/*任务1 LED1灯进行闪烁并通过串口打印*/
void vTask1( void *pvParameters )
{
/*创建任务*/
xTaskCreate(Interrupt_Task1,"Interrupt_Task1",128,NULL,3,NULL);
while(1)
{
printf("Task is running! \r\n");
GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
vTaskDelay( 100 / portTICK_RATE_MS );
}
}
/*KEY0按下 关闭中断*/
void Interrupt_Task1( void *pvParameters )
{
while(1)
{
if((GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0))
{
portDISABLE_INTERRUPTS();
printf("中断关闭!\r\n");
}
vTaskDelay( 100 / portTICK_RATE_MS );
}
}
/*外部中断3服务程序*/
void EXTI3_IRQHandler(void)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
printf("KEY1发生中断\r\n");
}
EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
}
/*外部中断2服务程序*/
void EXTI2_IRQHandler(void)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
{
printf("KEY2发生中断\r\n");
}
EXTI_ClearITPendingBit(EXTI_Line2); //清除LINE2上的中断标志位
}
[/mw_shl_code]
|
|