修复定时器

This commit is contained in:
2025-10-20 14:58:01 +08:00
parent 75ef6c716c
commit 6031303587

View File

@@ -30,12 +30,9 @@ void EXTI2_3_IRQHandler(void)
/* 设置事件标志 */ /* 设置事件标志 */
high_level_event = 1; high_level_event = 1;
gpio_bit_set(GPIOF, GPIO_PIN_7); // 测试用置高PF7引脚
/* 启动定时器40ms后清除事件标志 */ /* 看门狗式重置:每次中断重置定时器计数40ms内无新中断才会溢出 */
// timer_disable(TIMER14);
timer_counter_value_config(TIMER14, 0); timer_counter_value_config(TIMER14, 0);
timer_enable(TIMER14);
} }
} }
@@ -52,6 +49,9 @@ void TIMER14_IRQHandler(void)
/* 清除事件标志 */ /* 清除事件标志 */
high_level_event = 0; high_level_event = 0;
gpio_bit_reset(GPIOF, GPIO_PIN_7); // 测试用置低PF7引脚
/* 测试用翻转PF7引脚,用于验证定时器周期 */
// gpio_bit_toggle(GPIOF, GPIO_PIN_7);
} }
} }
@@ -83,6 +83,14 @@ void exti_pa3_config(void)
/* 配置定时器1 */ /* 配置定时器1 */
void timer14_config(void) void timer14_config(void)
{ {
/* 使能GPIOF时钟 */
rcu_periph_clock_enable(RCU_GPIOF);
/* 配置PF7为推挽输出用于测试定时器周期 */
gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
gpio_bit_reset(GPIOF, GPIO_PIN_7); // 初始化为低电平
/* 使能定时器14时钟 */ /* 使能定时器14时钟 */
rcu_periph_clock_enable(RCU_TIMER14); rcu_periph_clock_enable(RCU_TIMER14);
@@ -92,12 +100,11 @@ void timer14_config(void)
/* 定时器配置 */ /* 定时器配置 */
timer_parameter_struct timer_initpara; timer_parameter_struct timer_initpara;
timer_struct_para_init(&timer_initpara); timer_struct_para_init(&timer_initpara);
/* 系统时钟为48MHz预分频48计数到40000产生40ms中断 */ timer_initpara.prescaler = 719; // 72MHz / 720 = 100kHz
timer_initpara.prescaler = 71999; // 72MHz / 72000 = 1kHz
timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 199; // 40ms (0~39) timer_initpara.period = 3999; // 40ms @ 100kHz
timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0; timer_initpara.repetitioncounter = 0;
timer_init(TIMER14, &timer_initpara); timer_init(TIMER14, &timer_initpara);