⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systick.c

📁 STM32驱动ADXL345
💻 C
字号:
/****************************************************************************
* Copyright (C), 2009-2010, www.armfly.com
*
* 文件名: sysytick.c
* 内容简述: 本模块包含systick中断的设置,以及软件定时器的实现。
*
* 文件历史:
* 版本号  日期       作者    说明
* v0.1    2009-12-30 armfly  创建该文件
*
*/

#include "stm32f10x.h"
#include <stdio.h>

#include "systick.h"

/* 在此定义若干个软件定时器全局变量
注意,必须增加volatile,因为这个变量在中断和主程序中同时
被访问,有可能造成编译器错误优化。DelayMS曾出过问题
*/
#define TMR_COUNT	4		/* 软件定时器的个数 */
SOFT_TMR g_Tmr[TMR_COUNT];

/*******************************************************************************
	函数名:SoftTimerDec
	输  入: 定时器变量指针,每隔1ms减1
	输  出:
	功能说明:
*/
static void SoftTimerDec(SOFT_TMR *_tmr)
{
	if (_tmr->flag == 0)
	{
		if (_tmr->count > 0)
		{
			if (--_tmr->count == 0)
			{
				_tmr->flag = 1;
			}
		}
	}
}

/*******************************************************************************
	函数名:SysTick_ISR
	输  入:
	输  出:
	功能说明:SysTick中断服务程序,每隔1ms进入1次
*/
void SysTick_ISR(void)
{
	uint8_t i;

	for (i = 0; i < TMR_COUNT; i++)
	{
		SoftTimerDec(&g_Tmr[i]);
	}
}

/*******************************************************************************
	函数名:DelayMS
	输  入: 延迟长度,单位1 ms. 延迟精度为正负1ms
	输  出:
	功能说明:延时函数。占用软件定时器0
*/
void DelayMS(uint32_t n)
{
	/* 避免 n = 1 出现主程序死锁 */
	if (n == 1)
	{
		n = 2;
	}
	g_Tmr[0].count = n;
	g_Tmr[0].flag = 0;

	/* while 循环体最好让CPU进入IDLE状态,已降低功耗 */
	while (1)
	{
		CPU_IDLE();

		if (g_Tmr[0].flag == 1)
		{
			break;
		}
	}
}

/*******************************************************************************
	函数名:StartTimer
	输  入: 定时器ID (0 - 3)
	输  出:
	功能说明:
*/
void StartTimer(uint8_t _id, uint32_t _period)
{
	if (_id >= TMR_COUNT)
	{
		return;
	}

	g_Tmr[_id].count = _period;
	g_Tmr[_id].flag = 0;
}

/*******************************************************************************
	函数名:StartTimer
	输  入: 定时器ID (0 - 3)
	输  出: 返回 0 表示定时未到, 1表示定时到
	功能说明:
*/
uint8_t CheckTimer(uint8_t _id)
{
	if (_id >= TMR_COUNT)
	{
		return 0;
	}

	return g_Tmr[_id].flag;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -