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();
		}
	}
}
相关推荐
史蒂芬_丁19 小时前
Cortex-M内核中断保护机制详解:PRIMASK寄存器的正确使用方法
单片机·嵌入式硬件
榴莲llll19 小时前
LED高亮数码管显示驱动芯片数显屏驱动器最大支持13×3的按键VK16K33A
单片机
崇山峻岭之间20 小时前
单片机传感器实验
单片机·嵌入式硬件
芯岭技术1 天前
PY32F030国产32位MCU,应用场景广泛,宽工作电压、丰富外设
单片机·嵌入式硬件·物联网
FreakStudio1 天前
大话电容传感器和电容SOC芯片,看这一篇就够了
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
信看1 天前
常见通信接口
单片机·嵌入式硬件
m0_377108141 天前
USART
stm32
Rsingstarzengjx1 天前
STM32-F103ZET6开发板
stm32·单片机·嵌入式硬件
我先去打把游戏先1 天前
VMware NAT 模式 Ubuntu 虚拟机「宿主机能上网、虚拟机 ping 不通外网 + apt 更新卡死」全故障复盘
linux·运维·vscode·单片机·嵌入式硬件·ubuntu·keil5
aini_lovee1 天前
STM32 串口转CAN + WiFi模块实现WiFi转CAN网关
stm32·单片机·嵌入式硬件