【STM32单片机_(HAL库)】3-3【中断EXTI】使用SysTick模拟多线程

1.硬件

STM32 LED1 LED2
PB8 负极
PB9 负极
5V 5V 5V

2.软件

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程序
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程序
c 复制代码
#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源文件

相关推荐
CS小麻瓜33 分钟前
Web植物管理系统-下位机部分
c++·嵌入式硬件·湖南大学
MGT_97963 小时前
基于51单片机的GPS定位系统(仿真)
单片机·嵌入式硬件·51单片机
艾格北峰3 小时前
STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52
arm开发·stm32·单片机·嵌入式硬件
m0_739312874 小时前
【STM32】独立看门狗(IWDG)原理详解及编程实践(上)
stm32·单片机·嵌入式硬件
CV金科6 小时前
蓝桥杯-STM32G431RBT6(串口)
c语言·stm32·单片机·嵌入式硬件·蓝桥杯
硬核科技7 小时前
变压器在电源中的核心作用
网络·单片机·嵌入式硬件·硬件工程·智能硬件·开关电源
CV金科8 小时前
蓝桥杯-STM32G431RBT6(UART解析字符串sscanf和解决串口BUG)
c语言·stm32·单片机·嵌入式硬件·mcu·算法·bug
培林将军8 小时前
C51单片机-单按键输入识别,键盘消抖
单片机·嵌入式硬件·计算机外设
hong1616889 小时前
单片机(Microcontroller)原理及应用
单片机·嵌入式硬件