使用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
原文地址: https://www.cveoy.top/t/topic/hg1V 著作权归作者所有。请勿转载和采集!