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();
}

猜你喜欢

转载自www.cnblogs.com/fly2199/p/9154365.html