【STM32】计算定时器的溢出

TIM2、3、4、5、12、13、14在APB1上,最大计数频率84M。

TIM1、8、9、10、11在APB2上,最大计数频率168M。

time=(arr+1)/(prescale+1)/Tclk

算出来的是秒

下图使用TIM14 84MHz

那么time=33600*25000/84000000=10S,10S进入一次中断

中断方式开启定时器

HAL_TIM_Base_Start_IT(&htim14);

中断回调

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim == &htim14)
  {
    //do something...
  }
}

STM32中,可以通过定时器溢出中断来判断定时器是否溢出。每当定时器计数器达到自动重载值时,定时器就会产生一个溢出中断。在中断处理函数中,可以对溢出次数进行计数,从而判断定时器是否溢出。 以下是一个简单的示例代码,演示了如何在STM32中使用定时器溢出中断来判断定时器是否溢出: ```c #include "stm32f4xx.h" // 定义溢出计数器 volatile uint32_t timer_overflow_count = 0; void TIM2_IRQHandler(void) { if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) != RESET) { if (__HAL_TIM_GET_IT_SOURCE(&htim2, TIM_IT_UPDATE) != RESET) { __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); // 溢出计数器加一 timer_overflow_count++; } } } int main(void) { // 初始化定时器2 TIM_HandleTypeDef htim2; htim2.Instance = TIM2; htim2.Init.Prescaler = 84 - 1; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 1000 - 1; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim2); // 使能定时器2中断 HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); // 启动定时器2 HAL_TIM_Base_Start_IT(&htim2); while (1) { // 判断溢出计数器是否大于等于5,即定时器是否溢出5次 if (timer_overflow_count >= 5) { // 定时器溢出5次,执行相应的逻辑 // ... // 重置溢出计数器 timer_overflow_count = 0; } } } ``` 在上面的示例代码中,定时器2被初始化为1ms的周期,并启动了定时器溢出中断。在主函数中,通过判断溢出计数器是否大于等于5来判断定时器是否溢出了5次。如果定时器溢出了5次,就执行相应的逻辑,并重置溢出计数器。这样就可以实现在STM32中判断定时器溢出的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值