STM32F103 定时器5 初始化 - 每 1ms 中断

以下是使用 STM32F103 初始化定时器5,每 1ms 执行一次中断的代码:

#include "stm32f10x.h"

void TIM5_IRQHandler(void)
{
    // 中断处理程序
    TIM_ClearITPendingBit(TIM5, TIM_IT_Update); // 清除中断标志位
}

void TIM5_Configuration(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); // 使能TIM5时钟

    TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装载值
    TIM_TimeBaseStructure.TIM_Prescaler = 71; // 分频器
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; // 重复计数器
    TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); // 初始化TIM5

    TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE); // 允许更新中断
    TIM_Cmd(TIM5, ENABLE); // 使能TIM5

    NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; // TIM5中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
    NVIC_Init(&NVIC_InitStructure); // 初始化NVIC
}

int main(void)
{
    TIM5_Configuration(); // 初始化定时器5

    while(1)
    {
        // 主循环
    }
}

在上面的代码中,我们使用了 TIM_TimeBaseInitTypeDef 结构体来设置定时器的各种参数,其中 TIM_Period 表示自动重装载值,TIM_Prescaler 表示分频器,这两个参数的值可以根据需要自行设置。同时,我们还需要在中断处理程序中清除中断标志位,以便下次中断能够正常触发。最后,在 main 函数中我们调用了 TIM5_Configuration 函数来初始化定时器5。

注意:

  • 以上代码仅供参考,具体的实现需要根据实际应用场景进行调整。
  • 为了更精确的 1ms 定时,可以根据实际的系统时钟频率进行调整 TIM_PeriodTIM_Prescaler 的值。

相关链接:

STM32F103 定时器5 初始化 - 每 1ms 中断

原文地址: https://www.cveoy.top/t/topic/oJXI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录