高级会员

- 积分
- 840
- 金钱
- 840
- 注册时间
- 2016-8-23
- 在线时间
- 116 小时
|

楼主 |
发表于 2022-10-10 14:49:01
|
显示全部楼层
本帖最后由 紫气东升 于 2022-10-10 14:52 编辑
void timer4_config(void)
{
timer_parameter_struct timer_initpara4;
/* Timer initialization parameters */
rcu_periph_clock_enable(RCU_TIMER4);
/* Timer frequency CK_TIMER3 = CK_APB1*4 = CK_SYS = 120MHz */
rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
nvic_irq_enable(TIMER4_IRQn, 2, 0);
timer_deinit(TIMER4);
/* Set the counting clock frequency CLK to 100KHz, indicating that the timer counts once every 10us */
timer_initpara4.prescaler = 23; //prescaler = CK_SYS/clk - 1, 120000/100 - 1=1199
timer_initpara4.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara4.counterdirection = TIMER_COUNTER_UP;
timer_initpara4.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara4.period = 500;
timer_initpara4.repetitioncounter = 0;
timer_init(TIMER4, &timer_initpara4);
/* auto reload preload enable */
timer_auto_reload_shadow_enable(TIMER4);
/* clear update interrupt bit */
timer_interrupt_flag_clear(TIMER4, TIMER_INT_UP);
/* update interrupt enable */
timer_interrupt_enable(TIMER4, TIMER_INT_UP);
/* TIMER counter enable */
timer_enable(TIMER4);
}
void TIMER4_IRQHandler(void)
{
static uint8_t i = 0;
static uint8_t j = 0;
if(RESET != timer_interrupt_flag_get(TIMER4, TIMER_INT_UP))
{
timer_interrupt_flag_clear(TIMER4, TIMER_INT_UP);
if(i < j)
{
GPIO_BC(GPIOB) = GPIO_PIN_6;
if(j >= 150)
breathe_flag = RESET;
}
else
{
GPIO_BOP(GPIOB) = GPIO_PIN_6;
if(i >= 150)
breathe_flag = SET;
}
if(SET == breathe_flag)
{
if(i >= 150)
{
j++;
i = 0;
}
i++;
}
else
{
if(j >= 150)
{
i++;
j = 0;
}
j++;
}
}
}呼吸灯的效果还不够圆润自然,哪位兄弟有时间可以帮忙完善一下。
|
|