stmF407小车设置中断函数,以及延时函数sys延时函数,这个中断比定时任务中断优先级高

void Set_Nvic_Irq(u8 Channel,u8 PreemptionPriority,u8 SubPriority)
{
	NVIC_InitTypeDef NVIC_Structure;
	NVIC_Structure.NVIC_IRQChannel=Channel;
	NVIC_Structure.NVIC_IRQChannelPreemptionPriority=PreemptionPriority;
	NVIC_Structure.NVIC_IRQChannelSubPriority=SubPriority;
	NVIC_Structure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_Structure);
}

使用

	Nvic_Init(NVIC_PriorityGroup_4);//中断分组第四组 高优先打断低优先
	Set_Nvic_Irq(USART2_IRQn,0,0);
	Set_Nvic_Irq(USART3_IRQn,0,0);
	Set_Nvic_Irq(DMA2_Stream3_IRQn,1,0);
	Set_Nvic_Irq(SDIO_IRQn,2,0);
	Set_Nvic_Irq(DMA1_Stream4_IRQn,2,0);
	Set_Nvic_Irq(TIM7_IRQn,3,0);
	Set_Nvic_Irq(TIM6_DAC_IRQn,4,0);

dely.c

#include "delay.h"

void Delay_Init(void)
{
  NVIC_SetPriority(SysTick_IRQn,(1<<__NVIC_PRIO_BITS)-1); 
  SysTick->VAL=0;                                         
	SysTick->CTRL=0;
} 
void delay(u32 time)
{    
	u32 temp;	
  SysTick->LOAD=(time&SysTick_LOAD_RELOAD_Msk)-1;
	SysTick->VAL=0;
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//开启滴答定时器
	do
	{
		temp=SysTick->CTRL;
	}
	while(!(temp&SysTick_CTRL_COUNTFLAG_Msk));//等待时间到达
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭滴答定时器
}
void delay_sec(u32 second)//秒延时
{
	u32 delay_count;
	u32 temp;	
	delay_count=2*second;
	SysTick->LOAD=(11250000&SysTick_LOAD_RELOAD_Msk)-1;//500ms定时
	SysTick->VAL=0;
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//开启滴答定时器 
	do
	{
		do
	  {
		  temp=SysTick->CTRL;
	  }
		while(!(temp&SysTick_CTRL_COUNTFLAG_Msk));//等待时间到达
	}
	while(delay_count--);
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭滴答定时器
}


delay.h

#ifndef __DELAY_H
#define __DELAY_H
#include "my_scc.h"

void Delay_Init(void);//调用延时函数前必须初始化
void delay(u32 time);//查询方式 最大范围 745654 us
void delay_sec(u32 second);//秒延时  

#define delay_ms(time) delay(time*21000)
#define delay_us(time) delay((u32)(time*21))

#endif

myscc.h

#ifndef __MY_SCC_H
#define __MY_SCC_H

#include "stm32f4xx.h"
#include "string.h"
#include "stdio.h"
#include "delay.h"
#include "motor.h"
#include "led.h"   
#include "delay.h"
#include "oled.h"
#include "touch.h"
#include "led.h" 
#include "math.h"
#include "algorithm.h"
#include "ff.h"
#include "sdio_sd.h"
#include "pcm5102.h"
#include "servo.h"
#include "key.h"
#include "adc.h"
#include "track_deal.h"
#include "openmv_uart.h"
#include "SEEKFREE_MPU6050.h"
#include "mechanical_arm.h"
#include "digital_io.h"
#include "stdlib.h"
#include "stdarg.h"	 
#include "usart.h"
#include "APP_Serial_MP3.h"

#define Nvic_Init(group) NVIC_PriorityGroupConfig(group)//nvic初始化
void Set_Nvic_Irq(u8 Channel,u8 PreemptionPriority,u8 SubPriority);//设定中断优先级

//角度
extern float x_angular_speed,y_angular_speed,z_angular_speed;
extern float yaw,roll,pitch;

extern FIL file;											/* file objects */
extern FATFS 	SD_FatFs; 		// 文件系统对象
extern FRESULT 	MyFile_Res;    // 操作结果 
extern u32 bread;

void Tim_Init_1ms(void);//1ms定时

u8 Read_AD_Max_Min(void);
u8 Read_Pixels(void);
void Play_Music(void);
void Servo_Set_Page(void);
void Track_Set_Page(void);
void Openmv_Set_Page(void);
void Mechanical_Arm_Set_Page(void);
void Option_Choose_Page(void);
#endif

在这里插入图片描述
在这里插入图片描述
可以看到delay函数这个中断是3号,比定时器6的4号中断要高优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值