stm32_15:FreeRTOS中断
【代码】stm32_15:FreeRTOS中断。
·
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"
#include "key.h"
#include "exti.h"
#include "timer.h"
#define Start_Task_Size 120
#define Start_Task_Prio 1
TaskHandle_t Start_Task_Handler;
void Start_Task(void *pvParamaters);
#define Task1_Task_Size 120
#define Task1_Task_Prio 4
TaskHandle_t Task1_Task_Handler;
void Task1_Task(void *pvParamaters);
#define Task2_Task_Size 120
#define Task2_Task_Prio 3
TaskHandle_t Task2_Task_Handler;
void Task2_Task(void *pvParamaters);
#define Key_Task_Size 120
#define Key_Task_Prio 2
TaskHandle_t Key_Task_Handler;
void Key_Task(void *pvParamaters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
Key_Init();
EXTI_Key_Init();
Time2_Init();
Time3_Init();
xTaskCreate( (TaskFunction_t) Start_Task,
(char *) "Start_Task",
(configSTACK_DEPTH_TYPE) Start_Task_Size,
(void *) NULL,
(UBaseType_t) Start_Task_Prio,
(TaskHandle_t *) &Start_Task_Handler );
vTaskStartScheduler();
}
void Start_Task(void *pvParamaters)
{
char i = 0;
while(1)
{
i++;
if(i == 5)
{
printf("Close Interrupt\r\n");
portDISABLE_INTERRUPTS();
delay_xms(5000);
printf("Open Interrupt\r\n");
portENABLE_INTERRUPTS();
}
vTaskDelay(1000);
}
}
#include "stm32f10x.h"
#include "timer.h"
#include "stdio.h"
void Time2_Init(void)
{
TIM_TimeBaseInitTypeDef Timer_Initstructure;
NVIC_InitTypeDef NVIC_Initstructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
Timer_Initstructure.TIM_ClockDivision = TIM_CKD_DIV1;
Timer_Initstructure.TIM_CounterMode = TIM_CounterMode_Up;
Timer_Initstructure.TIM_Period = 10000-1;
Timer_Initstructure.TIM_Prescaler = 7200-1;
Timer_Initstructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2,&Timer_Initstructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
NVIC_Initstructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_Initstructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_Initstructure.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_Initstructure);
TIM_Cmd(TIM2,ENABLE);
}
void Time3_Init(void)
{
TIM_TimeBaseInitTypeDef Timer_Initstructure;
NVIC_InitTypeDef NVIC_Initstructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
Timer_Initstructure.TIM_ClockDivision = TIM_CKD_DIV1;
Timer_Initstructure.TIM_CounterMode = TIM_CounterMode_Up;
Timer_Initstructure.TIM_Period = 10000-1;
Timer_Initstructure.TIM_Prescaler = 7200-1;
Timer_Initstructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM3,&Timer_Initstructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
NVIC_Initstructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_Initstructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority = 5;
NVIC_Initstructure.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_Initstructure);
TIM_Cmd(TIM3,ENABLE);
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update) == 1)
{
printf("TIM2 Interrupt\r\n");
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) == 1)
{
printf("TIM3 Interrupt\r\n");
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)