48M Tim3_Init(uint16_t arr,uint16_t psc) 1ms定时参数
时间: 2025-01-26 16:09:09 浏览: 15
要初始化一个1ms的定时器中断,可以使用STM32的定时器库函数。以下是一个基于STM32的示例代码,展示了如何配置一个1ms的定时器中断:
#include "stm32f10x.h"
void Tim3_Init(uint16_t arr, uint16_t psc)
{
// 1. 使能TIM3时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 2. 初始化TIM3定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Period = arr; // 自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler = psc; // 预分频值
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
// 3. 初始化TIM3中断
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断
NVIC_Init(&NVIC_InitStructure);
// 4. 使能TIM3中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
// 5. 使能TIM3
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
// 处理定时器中断
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
int main(void)
{
// 初始化定时器
Tim3_Init(1000 - 1, 7200 - 1); // 72MHz / 7200 = 10kHz, 10kHz / 1000 = 10Hz, 100ms
while (1)
{
// 主循环
}
}
在这个示例中,Tim3_Init
函数用于初始化TIM3定时器。arr
参数是自动重装载值,psc
参数是预分频值。通过调整这两个参数,可以实现不同的定时器中断周期。
在main
函数中,调用Tim3_Init(1000 - 1, 7200 - 1)
来初始化定时器,其中arr
为1000-1,psc
为7200-1。这样,72MHz的时钟经过预分频后变为10kHz,再经过自动重装载后变为10Hz,即每100ms产生一次中断。
如果要实现1ms的中断,可以将arr
设置为1000-1,psc
设置为72-1。
相关推荐



















