基于f407 TIM_TimeBaseInitStructure.TIM_Prescaler=893; //定时器分频 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInitStructure.TIM_Period=999; //自动重装载值 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 定时时间是多久
时间: 2024-01-18 15:26:03 浏览: 92
在基于F407芯片的定时器初始化代码中,TIM_Prescaler设置为893,TIM_Period设置为999,所以定时器的时钟周期为:
(预分频器值 + 1) * (自动重装载值 + 1) = (893 + 1) * (999 + 1) = 894 * 1000 = 894000
所以定时器的计时周期为894000个时钟周期。如果使用72MHz的主频,则定时周期为:
定时周期 = (1/主频) * 计时周期 = (1/72MHz) * 894000 = 0.012375秒
因此,定时器的定时时间为0.012375秒,约为12.375毫秒。
相关问题
void PWM_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_InternalClockConfig(TIM2); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1; //PSC TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //CCR TIM_OC3Init(TIM2, &TIM_OCInitStructure); TIM_Cmd(TIM2, ENABLE); }
这段代码是用于初始化一个PWM输出的定时器(TIM2)和对应的GPIO引脚(GPIOA_Pin_2)。具体的初始化步骤如下:
1. 开启TIM2定时器的时钟和GPIOA引脚的时钟。
2. 配置GPIOA_Pin_2引脚为复用功能,推挽输出模式。
3. 配置TIM2定时器的时钟源为内部时钟。
4. 配置TIM2定时器的计数模式为向上计数模式。
5. 配置TIM2定时器的自动重装载寄存器值(TIM_Period)为99,即ARR寄存器的值为100-1。
6. 配置TIM2定时器的预分频值(TIM_Prescaler)为35,即PSC寄存器的值为36-1。
7. 配置TIM2通道3的输出比较模式为PWM模式1,输出极性为高电平有效。
8. 配置TIM2通道3的输出状态为使能状态。
9. 配置TIM2通道3的占空比(TIM_Pulse)为0,即CCR寄存器的值为0。
10. 使能TIM2定时器。
这样就完成了PWM输出的初始化配置。
解释以下代码 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; NVIC_InitTypeDef NVIC_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能对应时钟 TIM_TimeBaseInitStruct.TIM_Period = Pre; //重装载值 TIM_TimeBaseInitStruct.TIM_Prescaler = Psc; //预分频值,定时时间= TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //系统时钟分频系数 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct); //定时器初始化 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //选择中断类型并使能 NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; //stm32f103.h文件里,308行 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //抢占式优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //响应式优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //使能通道 NVIC_Init(&NVIC_InitStruct); //NVIC初始化 TIM_Cmd(TIM2,ENABLE); //定时器使能 }
这段代码是在初始化 STM32F1 系列芯片的 TIM2 定时器模块。具体的步骤如下:
1. 定义一个 TIM_TimeBaseInitTypeDef 类型的结构体变量 TIM_TimeBaseInitStruct 和一个 NVIC_InitTypeDef 类型的结构体变量 NVIC_InitStruct。
2. 使能 APB1 总线上的 TIM2 时钟,即 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)。
3. 配置 TIM2 定时器的一些基本参数,包括重装载值(TIM_Period)、预分频值(TIM_Prescaler)、系统时钟分频系数(TIM_ClockDivision)和计数模式(TIM_CounterMode_Up)。
4. 调用 TIM_TimeBaseInit 函数对 TIM2 进行初始化。
5. 选择中断类型并使能 TIM2 定时器的更新中断 TIM_IT_Update。
6. 配置 NVIC_InitStruct 结构体变量的一些参数,包括 NVIC_IRQChannel、抢占式优先级、响应式优先级和使能通道。
7. 调用 NVIC_Init 函数对 NVIC 进行初始化。
8. 使能 TIM2 定时器 TIM_Cmd(TIM2,ENABLE),让定时器开始计数。
阅读全文