STM32F103 定时器5 初始化 - 每 1ms 中断
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_Period和TIM_Prescaler的值。
相关链接:
原文地址: https://www.cveoy.top/t/topic/oJXI 著作权归作者所有。请勿转载和采集!