STM 32 中断服务函数中加延时的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM 32 中断服务函数中加延时的处理相关的知识,希望对你有一定的参考价值。

void EXTI15_10_IRQHandler (void)


GPIO_ResetBits(GPIOC,GPIO_Pin_10);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_10);

GPIO_ResetBits(GPIOC,GPIO_Pin_11);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_11);

GPIO_ResetBits(GPIOC,GPIO_Pin_12);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_12);

EXTI_ClearITPendingBit(EXTI_Line15);



这个是中断服务函数,这个函数可以实现功能,但是我朋友说中断内不能加大延时程序,应该怎么处理。

参考技术A 这不是耽误事吗??设置个任务标志位就可以了,中断要的是快进快出,不要去延时

STM32 延时函数,复位函数,汇编实现,精准微秒延时

使用汇编语言实现微秒精准延时及复位功能,移植方便

 

asm.c

#include "asm.h"

__asm void
SysCtlDelay(u32 ulCount)
{
    subs    r0, #1;
    bne     SysCtlDelay;
    bx      lr;
}


__asm void 
SystemReset(void)
{
    MOV R0, #1           //; 
    MSR FAULTMASK, R0    //; 清除FAULTMASK 禁止一切中断产生
    LDR R0, =0xE000ED0C  //;
    LDR R1, =0x05FA0004  //; 
    STR R1, [R0]         //; 系统软件复位   
}

 

asm.h

#ifndef __ASM_H
#define __ASM_H

#include "main.h"

extern void SysCtlDelay(u32 ulCount);

extern void SystemReset(void);







#endif

 

delay.c

void DelayUs(u16 us)
{
    SysCtlDelay(12*us);
}

void DelayMs(u16 ms)
{
    int i;
    for(i=0;i<ms;i++)
    {
        HAL_DelayUs(1000);
    }
}

void MCU_Reset(void)
{
    SystemReset();
}

 

以上是关于STM 32 中断服务函数中加延时的处理的主要内容,如果未能解决你的问题,请参考以下文章

STM32 USART接收中断程序问题

STM32 USART接收中断程序问题

STM32中断功能的实现

STM32中断函数

STM32的精确延时

stm32如何在中断服务程序里关闭EXTI中断?