#include "Includes.h" #define u32 uint32_t volatile uint32_t GulSystickCount=0; void SysTick_Handler(void) { GulSystickCount++;// gpio_output_low(0); gpio_output_high(0); } /* nus:要延时的us数. nus:0~204522252(最大值即(2^32)/32) */ //#define TICK_PER_US 16 //#define TICK_PER_US 32 //#define TICK_PER_US 12 #define TICK_PER_US 24 void delay_us(u32 nus) { u32 ticks; u32 told,tnow,tcnt=0; u32 reload=SysTick->LOAD; //LOAD的值 ticks=nus*TICK_PER_US; //需要的节拍数 32M速度 1us需要32个时钟周期 told=SysTick->VAL; //刚进入时的计数器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; } void delay_ms(u32 nms) { for(uint32_t i=0;iLOAD=( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; // SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk; // SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ); } extern void test_systick(void) { gpio_mux_ctl(0,0);gpio_fun_inter(0,0);gpio_fun_sel(0,0);gpio_direction_output(0); gpio_mux_ctl(1,0);gpio_fun_inter(1,0);gpio_fun_sel(1,0);gpio_direction_output(1); SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ); while(1) { #if 0 delay_ms(5); gpio_output_low(1); delay_ms(5); gpio_output_high(1); #endif #if 1 delay_us(200); gpio_output_low(1); delay_us(200); gpio_output_high(1); #endif } }