2021/10/13 智能家具 嵌入式实训 第三天 编写Systick代码 (5)
作者:互联网
先写Systick.h
#ifndef _SYSTICK_H_ #define _SYSTICK_H_ #include "stm32f10x.h" extern uint32_t TASK_Test[2]; uint8_t Systick_Config(uint32_t load); void Delay_Sys_nms(uint8_t time); #endif
定义一个外部变量
TASK_Test【2】 uint32_t 型号 定义使能函数 和delay函数
再写Systick.c
#include "Systick.h" uint32_t SYS_Run_Time = 0; //记录系统运行时间 uint32_t TASK_Test[2] = {0,2000}; //0-2000ms /*********************************************************************************** 函数功能: 滴答定时器初始化 形参:load -- 重装载值 返回值:无 ***********************************************************************************/ uint8_t Systick_Config(uint32_t load) { if(SysTick_Config(load)) //如果重载 return 1; } void SysTick_Handler(void) //计数 { SYS_Run_Time++; TASK_Test[0]++; } /*********************************************************************************** 函数功能: 滴答定时器函数接口 72000/72000000 ***********************************************************************************/ /* * 时间片轮法 */ void Delay_Sys_nms(uint8_t time) { uint32_t Time_end =0; Time_end = SYS_Run_Time + time; //结束时间=运行时间+延迟的时间 while(SYS_Run_Time <= Time_end); //直到 运行时间<=结束时间 }
最后main
#include "main.h" int main(void) { LED_Config(ON); Beep_Config(OFF); //刚开始关闭 KEY_Config(); Systick_Config(72000); while(1) { // 时间片任务 if(TASK_Test[0]>=TASK_Test[1]) { BEEP_TOGGLE; TASK_Test[0]=0; } LED_Breath(); //呼吸灯 if(KEY_GetVal()==1) //led1 BEEP_TOGGLE;//BEEP翻转 相当于开 } }
#include "main.h" int main(void) { LED_Config(OFF); Beep_Config(OFF); //刚开始关闭 KEY_Config(); Systick_Config(72000); while(1) { // 时间片任务 if(TASK_Test[0]>=TASK_Test[1]) { LED_Breath(); //呼吸灯 TASK_Test[0]=0; } //LED_Twinkle(); //闪烁灯 //Beep_Twinkle();//蜂鸣器间断响 // if(KEY_GetVal()==1) //led1 // BEEP_TOGGLE;//BEEP翻转 相当于开 } }
源代码:https://wwa.lanzoui.com/iXvavvd5dna
标签:10,13,TASK,void,Systick,Test,Config,uint32 来源: https://www.cnblogs.com/halfup/p/15410239.html