代码拉取完成,页面将自动刷新
/*
* @Author: your name
* @Date: 2020-05-27 20:55:28
* @LastEditTime: 2020-08-18 22:38:03
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \BF-103\bsp_systick.c
*/
#include "bsp_systick.h"
static __IO uint32_t g_runtime; //全局事件,每 1ms自增加1
static __IO int32_t TimingDelay;
static struct
{
Timer soft_timer[SOFT_TMR_COUNT];
uint8_t write;
uint8_t read;
}SoftTimerPool =
{
.write = 0,
.read = 0
};
void TimerDecrease()
{
for(int i = 0; i < SOFT_TMR_COUNT; i++)
{
if(CheckTimer(&SoftTimerPool.soft_timer[i]))
{
SoftTimerPool.soft_timer[i].timer_event();
if(SoftTimerPool.soft_timer[i].Mode == Auto)
SoftTimerPool.soft_timer[i].count = SoftTimerPool.soft_timer[i].Preload;
}
}
}
void StartOnceTimer(Timer * timer,uint32_t period,void * timercall)
{
timer->Mode = Once;
timer->Preload = period; //自动重装值,仅自动模式有效
timer->Flag = 0;
timer->count = period;
timer->timer_event = (void (*)(void))timercall;
}
void StartAutoTimer(Timer * timer,uint32_t period,void * timercall)
{
timer->Mode = Auto;
timer->Preload = period;
timer->Flag = 0;
timer->count = period;
timer->timer_event = (void (*)(void))timercall;
}
uint8_t CheckTimer(Timer * timer)
{
if(--timer->count == 0)
{
timer->Flag = 1;
return 1;
}
else
{
return 0;
}
}
//初始化延迟函数
//SYSTICK的时钟固定为AHB时钟的1/8
//SYSCLK:系统时钟频率
//配置中断时间为1ms
void SysTick_Init()
{
if(SysTick_Config(SystemCoreClock / 1000))
{
while(1);
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
void delay_ms(u16 nms)
{
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
TimingDelay = nms;
while(TimingDelay != 0);
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
void TimeDecrease()
{
if(TimingDelay != 0)
TimingDelay--;
}
void AddTimerToPool(Timer * timer)
{
if(SoftTimerPool.write > SOFT_TMR_COUNT)
SoftTimerPool.write = 0;
SoftTimerPool.soft_timer[SoftTimerPool.write] = *timer;
}
int test_getWirte()
{
return SoftTimerPool.write;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。