H2S stm32F407ZET stm32F407ZGT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
H2S/backup/obolete/led.c

79 lines
2.5 KiB

2 years ago
#include "led.h"
static struct led *led_table[LED_MAX_NUM];
static uint32_t p_led_table=0;
/**
* @brief LED灯
*
* @param led struct led
* @param gpio LED所在的GPIO
* @param pin LED所在的引脚
* @param state LED初始状态
* @param level_on LED点亮时的电平 1: 0:
* @return int 0: 0:
*/
int led_register(struct led *led,GPIO_TypeDef *gpio,uint16_t pin,enum led_state state,uint16_t level_on)
{
if(p_led_table>=LED_MAX_NUM-1){
return -1;
}
led->gpio=gpio;
led->pin=pin;
led->state=state;
led->level_on=level_on;
led_table[p_led_table++]=led;
return 0;
}
/**
* @brief LED状态
*
* @param led struct led
* @param state LED状态
* @return int 0:
*/
int led_set_state(struct led *led,enum led_state state)
{
led->state=state;
return 0;
}
/**
* @brief led回调函数 100ms调用一次
*
*/
void led_callback(void)
{
int i;
static uint32_t tick_con=0;
tick_con++;
for(i=0;i<p_led_table;i++){
switch (led_table[i]->state)
{
case LED_STATE_OFF:
HAL_GPIO_WritePin( led_table[i]->gpio,led_table[i]->pin,(~led_table[i]->level_on)&1 );
// GPIO_WriteBit(led_table[i]->gpio,led_table[i]->pin,(~led_table[i]->level_on)&1);
break;
case LED_STATE_ON:
HAL_GPIO_WritePin( led_table[i]->gpio,led_table[i]->pin,led_table[i]->level_on&1 );
// GPIO_WriteBit(led_table[i]->gpio,led_table[i]->pin,led_table[i]->level_on&1);
break;
case LED_STATE_FLICKER_QUICK:
HAL_GPIO_TogglePin( led_table[i]->gpio,led_table[i]->pin);
// GPIO_WriteBit(led_table[i]->gpio,led_table[i]->pin,!GPIO_ReadOutputDataBit(led_table[i]->gpio,led_table[i]->pin));
break;
case LED_STATE_FLICKER_MEDIUM:
if((tick_con&0x01)==0){
HAL_GPIO_TogglePin( led_table[i]->gpio,led_table[i]->pin);
// GPIO_WriteBit(led_table[i]->gpio,led_table[i]->pin,!GPIO_ReadOutputDataBit(led_table[i]->gpio,led_table[i]->pin));
}
break;
case LED_STATE_FLICKER_SLOW:
if((tick_con&0x03)==0){
HAL_GPIO_TogglePin( led_table[i]->gpio,led_table[i]->pin);
// GPIO_WriteBit(led_table[i]->gpio,led_table[i]->pin,!GPIO_ReadOutputDataBit(led_table[i]->gpio,led_table[i]->pin));
}
break;
default:
break;
}
}
}