stm32 hal使用sysTick定时器非阻塞延时方法

简介

一种在stm32 hal库中实现非阻塞任务处理扫描的方式。

stm32f1xx_it.c

c 复制代码
/* USER CODE BEGIN 0 */
uint8_t Time_1ms = 0;
uint8_t Time_10ms = 0;

/* USER CODE END 0 */

/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
	Time_1ms++;
	Time_10ms++;

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

main.c

c 复制代码
/*
* 变量定义
*/
#define TIMER_FLAG_SET      1U
#define TIMER_FLAG_CLR      0U
#define TASK_TIMER_1MS      1U
#define TASK_TIMER_10MS     10U
//#define TASK_TIMER_30MS     30U

/*  扫描函数
		1ms
		10ms

*/
extern uint8_t Time_1ms;
extern uint8_t Time_10ms;

uint8_t Get1msFlag(void)
{
		uint8_t tempReturn = TIMER_FLAG_CLR;
		if(Time_1ms >= TASK_TIMER_1MS)
		{
				Time_1ms = TIMER_FLAG_CLR;
				tempReturn = TIMER_FLAG_SET;
		}
		else{}
		return tempReturn;
}

uint8_t Get10msFlag(void)
{
		uint8_t tempReturn = TIMER_FLAG_CLR;
		if(Time_10ms >= TASK_TIMER_10MS)
		{
				Time_10ms = TIMER_FLAG_CLR;
				tempReturn = TIMER_FLAG_SET;
		}
		else{}
		return tempReturn;
}

int main(void)
{
  	HAL_Init();
	SystemClock_Config();
	while(1)
	{
		if(Get1msFlag() == TIMER_FLAG_SET)
		{
			//task1();
		}
		
		if(Get10msFlag() == TIMER_FLAG_SET)
		{
			//task2();
		}
	}
}
相关推荐
qq_25814297-npl16 分钟前
HEX数据00,显示为ASC码,怎么是是\0
单片机
不做无法实现的梦~1 小时前
使用ros2跑mid360的fastlio2建图
git·单片机·嵌入式硬件·gitcode
Joshua-a1 小时前
正点原子DS100示波器测DC电源纹波方法
单片机·嵌入式硬件
2301_772204281 小时前
ARM——时钟系统
arm开发·单片机·嵌入式硬件
半条-咸鱼2 小时前
C语言基础语法+STM32实践学习笔记 | 指针/寄存器核心应用
c语言·stm32·学习·嵌入式
恶魔泡泡糖2 小时前
51单片机直流电机
单片机·嵌入式硬件·51单片机
List<String> error_P3 小时前
定时器输出捕获与输入比较
stm32·定时器
VekiSon3 小时前
ARM架构——时钟系统与定时器详解
linux·c语言·arm开发·嵌入式硬件·架构
宵时待雨3 小时前
STM32笔记归纳3:串口
笔记·stm32·嵌入式硬件
国科安芯4 小时前
抗辐照MCU在核电站交换机中的可靠性验证方法研究
单片机·嵌入式硬件·架构·安全性测试