TIM1_CC_IRQn和TIM2_IRQn的区别
时间: 2023-09-19 17:06:28 浏览: 58
TIM1_CC_IRQn和TIM2_IRQn都是与定时器相关的中断,但是它们针对的定时器不同。
具体来说,TIM1_CC_IRQn是TIM1通道的中断,而TIM2_IRQn是TIM2的中断。TIM1和TIM2都是STM32系列微控制器中的定时器,但是它们的功能和使用方法有所不同。
TIM1是高级定时器,功能更加强大,可以用于PWM控制、编码器接口等应用。而TIM2是基本定时器,功能相对简单,主要用于提供定时中断。
因此,TIM1_CC_IRQn和TIM2_IRQn的区别在于它们所针对的定时器不同,而这两个定时器的使用场景和功能也不同。
相关问题
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* TIM1 clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* TIM1 interrupt Init */ HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_UP_IRQn); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* TIM2 clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } }
这是HAL库中的TIM基本定时器的外设初始化函数HAL_TIM_Base_MspInit()。如果输入的tim_baseHandle的实例是TIM1,那么会使能TIM1的时钟,并启用TIM1的中断。如果输入的tim_baseHandle的实例是TIM2,那么会使能TIM2的时钟。这个函数中的USER CODE BEGIN和USER CODE END之间的代码是用户可以添加自己的初始化代码的地方。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 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 = 10 - 1; TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM2, ENABLE);
这段代码主要是用于配置和启用TIM2定时器的功能。下面是对代码的解析:
1. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
这行代码用于使能TIM2的时钟。
2. TIM_InternalClockConfig(TIM2);
这行代码用于配置TIM2的时钟源为内部时钟。
3. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
这行代码定义了一个结构体TIM_TimeBaseInitStructure,用于配置TIM2的基本参数。
4. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
这行代码设置TIM2的时钟分频系数为1。
5. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
这行代码设置TIM2的计数模式为向上计数。
6. TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;
这行代码设置TIM2的自动重装载寄存器的值为10-1,即计数值为10时重新装载。
7. TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
这行代码设置TIM2的预分频系数为7200-1,即每7200个时钟周期计数一次。
8. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
这行代码设置TIM2的重复计数器的值为0,表示不进行重复计数。
9. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
这行代码用于根据上述配置初始化TIM2的基本参数。
10. TIM_ClearFlag(TIM2, TIM_FLAG_Update);
这行代码用于清除TIM2的更新标志位。
11. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
这行代码用于使能TIM2的更新中断。
12. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
这行代码用于设置中断优先级分组,此处设置为2位抢占优先级,2位响应优先级。
13. NVIC_InitTypeDef NVIC_InitStructure;
这行代码定义了一个结构体NVIC_InitStructure,用于配置中断向量。
14. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
这行代码设置中断通道为TIM2的中断。
15. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
这行代码使能中断通道。
16. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
这行代码设置中断抢占优先级为2。
17. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
这行代码设置中断响应优先级为1。
18. NVIC_Init(&NVIC_InitStructure);
这行代码用于根据上述配置初始化中断向量。
19. TIM_Cmd(TIM2, ENABLE);
这行代码用于使能TIM2定时器。