STM32 LED灯的另一种写法

来源:互联网 发布:java 取svn版本号 编辑:程序博客网 时间:2024/04/29 12:43

STM32 LED灯的另一种写法

#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_ */


#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;  }}



0 0
原创粉丝点击