1.硬件
-
STM32单片机最小系统
-
LED灯模块
硬件接线
STM32 | LED1 | LED2 |
---|---|---|
PB8 | 负极 | |
PB9 | 负极 | |
5V | 5V | 5V |
2.软件
- led、tasks驱动文件添加
- GPIO常用函数
- main.c程序
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下载方式