STM32 LED灯的另一种写法

来源:本站
导读:目前正在解读《STM32 LED灯的另一种写法》的相关信息,《STM32 LED灯的另一种写法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32 LED灯的另一种写法》的详细说明。
简介:STM32 LED灯的另一种写法

[cpp] view plain copy

#ifndef __BSP_LED_

#define __BSP_LED_

#include <MM32x103.h> // 这个换成STM32的库文件就行

#include "type.h"

//==================================================================================

#define LED1_RUN_GRP GPIOC

#define LED1_RUN_IDX GPIO_Pin_6

#define LED1_RUN_OFF() GPIO_ResetBits(LED1_RUN_GRP, LED1_RUN_IDX)

#define LED1_RUN_ON() GPIO_SetBits(LED1_RUN_GRP, LED1_RUN_IDX)

#define LED1_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED1_RUN_GRP, LED1_RUN_IDX)

#define LED2_RUN_GRP GPIOA

#define LED2_RUN_IDX GPIO_Pin_11

#define LED2_RUN_OFF() GPIO_ResetBits(LED2_RUN_GRP, LED2_RUN_IDX)

#define LED2_RUN_ON() GPIO_SetBits(LED2_RUN_GRP, LED2_RUN_IDX)

#define LED2_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED2_RUN_GRP, LED2_RUN_IDX)

#define LED3_RUN_GRP GPIOA

#define LED3_RUN_IDX GPIO_Pin_12

#define LED3_RUN_OFF() GPIO_ResetBits(LED3_RUN_GRP, LED3_RUN_IDX)

#define LED3_RUN_ON() GPIO_SetBits(LED3_RUN_GRP, LED3_RUN_IDX)

#define LED3_RUN_IS_OFF() GPIO_ReadOutputDataBit(LED3_RUN_GRP, LED3_RUN_IDX)

//==================================================================================

#define LED_COUNT 3 // LED个数自己定义

typedef enum

{

RED = 0x04,

GREEN = 0x02,

BLUE= 0x01

} led_t;

typedef struct

{

GPIO_TypeDef *GPIOx;

uint32_t pos;

} led_port_t;

//==================================================================================

void GPIOConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIOMode_TypeDef GPIO_Mode);

void LEDConfig((uint8_t value) // value:1/2/4 --- RED GREEN BLUE

void LEDSet(uint8_t value);

void LEDReset(uint8_t value);

void LEDToggle(uint8_t value);

#endif /* __BSP_LED_ */

[cpp] view plain copy

#include "bsp_led.h"

static led_port_t led_port[LED_COUNT] =

{

{LED1_RUN_GRP, LED1_RUN_IDX}, /*蓝灯*/

{LED2_RUN_GRP, LED2_RUN_IDX}, /*绿灯*/

{LED3_RUN_GRP, LED3_RUN_IDX}, /*红灯*/

};

// GPIO配置

void GPIOConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIOMode_TypeDef GPIO_Mode)

{

GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体变量

// 这个GPIO口需要改的,根据自己情况而定

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);//开启GPIO时钟

//配置连接LED的GPIO为推挽输出模式

GPIO_InitStructure.GPIO_Pin=GPIO_Pin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode;

GPIO_Init(GPIOx, &GPIO_InitStructure);

}

// LED GPIO配置

void LEDConfig((uint8_t value) // value:1/2/4 --- RED GREEN BLUE

{

uint8_t i, mask = 1;

for(i = 0; i < LED_COUNT; ++i)

{

if(value & mask)

{

GPIOConfig(led_port[i].GPIOx, led_port[i].pos, GPIO_Mode_Out_PP);

GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);

}

mask <<= 1;

}

}

/* 根据参数来打开LED灯 */

void LEDSet(uint8_t value)

{

uint8_t i, mask = 1;

for(i = 0; i < LED_COUNT; ++i)

{

if(value & mask)

{

GPIO_SetBits(led_port[i].GPIOx, led_port[i].pos);

}

mask <<= 1;

}

}

/* 根据参数来关闭LED灯 */

void LEDReset(uint8_t value)

{

uint8_t i, mask = 1;

for(i = 0; i < LED_COUNT; ++i)

{

if(value & mask)

{

GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);

}

mask <<= 1;

}

}

// 取反

void LEDToggle(uint8_t value)

{

uint8_t i, mask = 1;

for(i = 0; i < LED_COUNT; ++i)

{

if(value & mask)

{

if(GPIO_ReadOutputDataBit(led_port[i].GPIOx, led_port[i].pos) == 0)

{

GPIO_SetBits(led_port[i].GPIOx, led_port[i].pos);

}

else

{

GPIO_ResetBits(led_port[i].GPIOx, led_port[i].pos);

}

}

mask <<= 1;

}

}

提醒:《STM32 LED灯的另一种写法》最后刷新时间 2024-03-14 00:53:00,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32 LED灯的另一种写法》该内容的真实性请自行鉴别。