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();
		}
	}
}
相关推荐
LingLong_roar11 小时前
STM32 启动流程
stm32·单片机·嵌入式硬件
weixin_5206498712 小时前
短距离硬件通信
单片机·嵌入式硬件
振南的单片机世界14 小时前
HAL慢、ODR中、BSRR快:GPIO翻转速度的三重境界
单片机·嵌入式硬件
实在太懒于是不想取名14 小时前
STM32N6的开发日记(7):摄像头+NPU联动,完成 YOLO 实时目标检测与显示
stm32·嵌入式硬件·yolo
Joseph Cooper15 小时前
STM32MP157 Linux驱动学习笔记(四):典型总线与设备模型(SPI/USB)
linux·stm32·学习
小柯博客16 小时前
STM32MP2安全启动技术深度解析
c语言·c++·stm32·嵌入式硬件·安全·开源·github
实在太懒于是不想取名16 小时前
STM32N6的开发日记(8):在N6中部署自训练的火焰检测模型
stm32·单片机·嵌入式硬件
木子单片机17 小时前
基于51单片机温度上下限报警设计 数码管显示
stm32·单片机·嵌入式硬件·51单片机·keil
森利威尔电子-18 小时前
森利威尔SL3180 替换LTC3639 150V降压恒压芯片 3A峰值电流能力转换效率高 静态电流低
单片机·嵌入式硬件·集成电路·芯片·电源芯片
qq_4017004118 小时前
合宙4G模块Air724UG
嵌入式硬件