本文主要是介绍【STM32单片机_(HAL库)】3-3【中断EXTI】使用SysTick模拟多线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.硬件
-
STM32单片机最小系统
-
LED灯模块
硬件接线
STM32 | LED1 | LED2 |
---|---|---|
PB8 | 负极 | |
PB9 | 负极 | |
5V | 5V | 5V |
2.软件
- led、tasks驱动文件添加
- GPIO常用函数
- main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "tasks.h"int main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init(); /* 初始化LED灯 */while(1){ task1();task2();
// led1_on();
// led2_off();
// delay_ms(500);
// led1_off();
// led2_on();
// delay_ms(500);}
}
- tasks.c程序
#include "tasks.h"
#include "led.h"uint32_t task1_cnt = 0;
uint32_t task2_cnt = 0;uint8_t task1_flag = 0;
uint8_t task2_flag = 0;void systick_isr(void)
{if (task1_cnt < 1000)task1_cnt++;else{task1_flag = 1;task1_cnt = 0;}if (task2_cnt < 500)task2_cnt++;else{task2_flag = 1;task2_cnt = 0;}
}void task1(void)
{if(task1_flag == 0)return;task1_flag = 0;led1_toggle();
}void task2(void)
{if(task2_flag == 0)return;task2_flag = 0;led2_toggle();
}
- tasks.h程序
#ifndef __TASKS_H__
#define __TASKS_H__#include "sys.h"void systick_isr(void);
void task1(void);
void task2(void);#endif
3.实物效果
LED1以1000ms闪烁,LED2以500ms闪烁,实现流水灯效果。
ST-Link下载方式
电动车报警器项目keil源文件
这篇关于【STM32单片机_(HAL库)】3-3【中断EXTI】使用SysTick模拟多线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!