帮我写一个stm32的led闪烁程序,用状态机实现,有8个led灯,每个led灯两种颜色 
时间: 2023-02-28 17:18:10 浏览: 21
STM32 LED 闪烁程序(状态机实现):
```
#include "stm32f10x.h"
#define LED1_ON() GPIOA->BSRR = 1<<8
#define LED1_OFF() GPIOA->BRR = 1<<8
#define LED2_ON() GPIOA->BSRR = 1<<9
#define LED2_OFF() GPIOA->BRR = 1<<9
#define LED3_ON() GPIOA->BSRR = 1<<10
#define LED3_OFF() GPIOA->BRR = 1<<10
#define LED4_ON() GPIOA->BSRR = 1<<11
#define LED4_OFF() GPIOA->BRR = 1<<11
#define LED5_ON() GPIOB->BSRR = 1<<12
#define LED5_OFF() GPIOB->BRR = 1<<12
#define LED6_ON() GPIOB->BSRR = 1<<13
#define LED6_OFF() GPIOB->BRR = 1<<13
#define LED7_ON() GPIOB->BSRR = 1<<14
#define LED7_OFF() GPIOB->BRR = 1<<14
#define LED8_ON() GPIOB->BSRR = 1<<15
#define LED8_OFF() GPIOB->BRR = 1<<15
enum {
LED_OFF,
LED_RED,
LED_GREEN
};
typedef struct {
uint8_t red;
uint8_t green;
} LED_COLOR_T;
LED_COLOR_T led_color[] = {
{0, 0}, // LED_OFF
{1, 0}, // LED_RED
{0, 1}, // LED_GREEN
};
uint8_t led_state = LED_OFF;
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void LED_Control(uint8_t led, uint8_t state)
{
switch (led) {
case 1:
if (led_color[state].red) {
LED1_ON();
} else {
LED1_OFF();
}
break;
case 2:
if (led_color[state].red) {
LED2_ON();
} else {
相关推荐










