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);
这个是中断服务函数,这个函数可以实现功能,但是我朋友说中断内不能加大延时程序,应该怎么处理。
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 中断服务函数中加延时的处理的主要内容,如果未能解决你的问题,请参考以下文章