如果有客户反馈灯光亮度太亮,可以通过修改元器件,使用低亮的灯来实现;或者是软件使用上拉电阻的形式降低亮度,具体实现如下:
首先定义函数,在bsp_sys.c文件最上面定义:
static u8 blue_led_sta = 0, red_led_sta = 0;//灯光亮灭标志位
void led_cfg_set_on_ex(gpio_t *g)//控制灯光亮标志位函数处理
{
if(g->num == 3){ //PB3
blue_led_sta = 1;
}
if(g->num == 7){ //PA7
red_led_sta = 1;
}
}
void led_cfg_set_off_ex(gpio_t *g)//控制灯光灭标志位函数处理
{
if(g->num == 3){ //PB3
blue_led_sta = 0;
}
if(g->num == 7){ //PA7
red_led_sta = 0;
}
}
void timer_ms_led(void)//控制灯光亮灭及亮度处理函数
{
static u8 timer_ms_cnt = 0;
timer_ms_cnt++;
if(blue_led_sta && (timer_ms_cnt%0x03 == 0x00))
{
GPIOBDE |= BIT(3);
GPIOBPU300 |= BIT(3);
}
else
{
GPIOBDE &= ~BIT(3);
GPIOBPU300 &= ~BIT(3);
}
if(red_led_sta && (timer_ms_cnt%0x03 == 0x00))
{
GPIOADE |= BIT(7);
GPIOAPU300 |= BIT(7);
}
else
{
GPIOADE &= ~BIT(7);
GPIOAPU300 &= ~BIT(7);
}
}
之后就是IO口初始化及打开中断,在中断中进行开/关上拉处理:
bsp_sys.c下bsp_sys_init()中:
//修改灯口配置
bled_func.set_on = led_cfg_set_on_ex;
bled_func.set_off = led_cfg_set_off_ex;
rled_func.set_on = led_cfg_set_on_ex;
rled_func.set_off = led_cfg_set_off_ex;
GPIOBDIR |= BIT(3); //IO
GPIOADIR |= BIT(7);
//插入充电后要开中断,处理灯光配置
if(CHARGE_DC_IN())
{//控制充电红灯变暗,中断要在前面
/// enable user timer for display & dac
user_tmr_set_enable(1, 1);
led_init();
key_init();
plugin_init();
}
else//正常情况下开机之后,再开中断
{
led_init();
key_init();
plugin_init();
/// enable user timer for display & dac
user_tmr_set_enable(1, 1);
}
最后就是在中断中调用处理:
bsp_sys.c下usr_tmr5ms_isr()中
timer_ms_led();