广州市酒店网站设计,广告推广平台网站,旅游最新政策,公司文化建设文章目录 TIM定时器Ⅰ、TIM定时器函数Ⅱ、TIM_TimeBaseInitTypeDef结构体参数①、TIM_ClockDivision②、TIM_CounterMode③、TIM_Period④、TIM_Prescaler⑤、TIM_RepetitionCounter Ⅱ、定时器配置Ⅲ、定时器外部中断NVIC配置 TIM定时器
Ⅰ、TIM定时器函数
// 将定时器寄存器… 文章目录 TIM定时器Ⅰ、TIM定时器函数Ⅱ、TIM_TimeBaseInitTypeDef结构体参数①、TIM_ClockDivision②、TIM_CounterMode③、TIM_Period④、TIM_Prescaler⑤、TIM_RepetitionCounter Ⅱ、定时器配置Ⅲ、定时器外部中断NVIC配置 TIM定时器
Ⅰ、TIM定时器函数
// 将定时器寄存器重置到默认值
void TIM_DeInit(TIM_TypeDef* TIMx);// 初始化定时器的基本时间基准参数
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);// 初始化定时器的输出比较通道1
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
// 初始化定时器的输出比较通道2
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
// 初始化定时器的输出比较通道3
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
// 初始化定时器的输出比较通道4
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);// 初始化定时器的输入捕获参数
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);// 配置PWM输入模式
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);// 配置定时器的BDTR寄存器用于高级定时器功能
void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct);// 初始化基本时间基准结构体
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);// 初始化输出比较结构体
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
// 初始化输入捕获结构体
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct);// 初始化BDTR结构体
void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct);// 使能或禁用定时器
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);// 控制PWM输出
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);// 配置定时器中断
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);// 产生一个定时器事件
void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource);// 配置DMA源和突发长度
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength);// 使能或禁用DMA请求
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState);// 配置定时器的内部时钟模式
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
// 配置定时器的外部时钟模式1
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
// 配置定时器的TIx外部时钟模式
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);
// 配置定时器的外部触发ETR模式1
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);
// 配置定时器的外部触发ETR模式2
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
// 配置定时器的外部触发ETR
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);// 配置定时器的预分频器
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);// 配置定时器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);// 选择输入触发源
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);// 配置编码器接口
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);// 配置强制输出比较1
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
// 配置强制输出比较2
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
// 配置强制输出比较3
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
// 配置强制输出比较4
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);// 配置ARR预装载
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);// 选择COM比较输出模式功能
void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState);// 选择CCDMA捕获/比较DMA请求功能
void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState);// 控制CC通道的预装载寄存器
void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState);// 配置输出比较1的预装载
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
// 配置输出比较2的预装载
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
// 配置输出比较3的预装载
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
// 配置输出比较4的预装载
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);// 配置输出比较1的快速模式
void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
// 配置输出比较2的快速模式
void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
// 配置输出比较3的快速模式
void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
// 配置输出比较4的快速模式
void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);// 清除输出比较1的引用
void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
// 清除输出比较2的引用
void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
// 清除输出比较3的引用
void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
// 清除输出比较4的引用
void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);// 配置输出比较1的极性
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
// 配置输出比较1N的极性
void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
// 配置输出比较2的极性
void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
// 配置输出比较2N的极性
void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
// 配置输出比较3的极性
void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
// 配置输出比较3N的极性
void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
// 配置输出比较4的极性
void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);// 使能或禁用捕获/比较通道x
void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);// 使能或禁用互补输出通道xN
void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);// 选择输出比较x模式
void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);// 禁用更新事件
void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState);// 配置更新请求源
void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource);// 选择霍尔传感器接口
void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState);// 选择单脉冲模式
void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode);// 选择定时器的输出触发源
void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);// 选择定时器的从模式
void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode);
// 选择定时器的主从模式
void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode);// 设置定时器的计数值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);// 设置定时器的自动重装载寄存器的值这个值决定了计数器的最大值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);// 设置定时器的比较寄存器1的值用于输出比较模式
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
// 设置定时器的比较寄存器2的值
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
// 设置定时器的比较寄存器3的值
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
// 设置定时器的比较寄存器4的值
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);// 设置输入捕获通道1的预分频器
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
// 设置输入捕获通道2的预分频器
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
// 设置输入捕获通道3的预分频器
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
// 设置输入捕获通道4的预分频器
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);// 设置定时器的时钟分割
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);// 获取输入捕获通道1的捕获值
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);
// 获取输入捕获通道2的捕获值
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);
// 获取输入捕获通道3的捕获值
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);
// 获取输入捕获通道4的捕获值
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);// 获取定时器的计数值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);// 获取定时器的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);// 获取定时器标志的状态
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
// 清除定时器的特定标志
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);// 获取定时器中断的状态
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
// 清除定时器的中断待处理位
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);Ⅱ、TIM_TimeBaseInitTypeDef结构体参数
①、TIM_ClockDivision 配置定时器时钟分配系数 该参数可以是ref TIM_Clock_Division_CKD 宏定义解释 TIM_CKD_DIV1 描述1分频不分频。这意味着定时器的时钟频率与输入时钟频率相同 TIM_CKD_DIV2 描述2分频。这意味着定时器的时钟频率是输入时钟频率的1/2 TIM_CKD_DIV4 描述4分频。这意味着定时器的时钟频率是输入时钟频率的1/4 宏函数 IS_TIM_CKD_DIV(DIV) 描述检查给定的时钟分频设置是否有效参数DIV代表定时器的时钟分频设置功能检查DIV是否等于TIM_CKD_DIV1、TIM_CKD_DIV2或TIM_CKD_DIV4中的任一个返回值如果DIV有效返回1真否则返回0假 表格 宏定义值描述TIM_CKD_DIV10x00001分频TIM_CKD_DIV20x01002分频TIM_CKD_DIV40x02004分频 宏函数描述IS_TIM_CKD_DIV(DIV)检查DIV是否为有效的定时器时钟分频设置 ②、TIM_CounterMode 计数器模式 该参数可以是ref TIM_Counter_Mode 枚举类型定义 typedef enum
{TIM_CounterMode_Up 0x0000, /*! 向上计数模式 */TIM_CounterMode_Down 0x0010, /*! 向下计数模式 */TIM_CounterMode_CenterAligned1 0x0020, /*! 中心对齐模式1 */TIM_CounterMode_CenterAligned2 0x0040, /*! 中心对齐模式2 */TIM_CounterMode_CenterAligned3 0x0060 /*! 中心对齐模式3 */
} TIMCounterMode_TypeDef;TIM_CounterMode_Up值为 0x0000表示定时器向上计数 从0开始计数直到自动重装载寄存器ARR的值 TIM_CounterMode_Down值为 0x0010表示定时器向下计数 从自动重装载寄存器ARR的值开始计数直到0 TIM_CounterMode_CenterAligned1值为 0x0020表示中心对齐模式1 计数器在向上计数和向下计数时都会在中间重置 TIM_CounterMode_CenterAligned2值为 0x0040表示中心对齐模式2 计数器在向上计数时在中间重置向下计数时在最大值重置 TIM_CounterMode_CenterAligned3值为 0x0060表示中心对齐模式3 计数器在向上计数时在最大值重置向下计数时在中间重置 宏函数 #define IS_TIM_COUNTER_MODE(MODE) (((MODE) TIM_CounterMode_Up) || \((MODE) TIM_CounterMode_Down) || \((MODE) TIM_CounterMode_CenterAligned1) || \((MODE) TIM_CounterMode_CenterAligned2) || \((MODE) TIM_CounterMode_CenterAligned3))描述检查给定的计数模式是否有效参数MODE代表定时器的计数模式功能检查MODE是否等于预定义的计数模式中的任一个返回值如果MODE有效返回1真否则返回0假 表格 计数模式常量值描述TIM_CounterMode_Up0x0000向上计数从0开始计数直到自动重装载寄存器ARR的值TIM_CounterMode_Down0x0010向下计数从自动重装载寄存器ARR的值开始计数直到0TIM_CounterMode_CenterAligned10x0020中心对齐模式1计数器在向上计数和向下计数时都会在中间重置TIM_CounterMode_CenterAligned20x0040中心对齐模式2计数器在向上计数时在中间重置向下计数时在最大值重置TIM_CounterMode_CenterAligned30x0060中心对齐模式3计数器在向上计数时在最大值重置向下计数时在中间重置 ③、TIM_Period 自动重装载寄存器的值 功能指定要加载到定时器的*自动重载寄存器ARR*中的周期值。该值在下一个更新事件时被加载取值范围0x0000到0xFFFF即0到65535作用这个周期值决定了定时器的溢出时间。定时器每计数到这个值时会触发一次更新事件并重新从0开始计数 示例 假设使用一个定时器其时钟频率为72MHz定时器每1秒钟触发一次中断。可以这样配置TIM_Period 计算定时器的时钟频率 假设定时器的时钟频率为72MHz你使用了一个预分频器Prescaler其值为7200。这意味着定时器的计数频率为72MHz / 7200 10kHz 计算周期值 你希望定时器每1秒钟触发一次中断因此周期值TIM_Period应该为10kHz * 1s 10000 配置定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;// 定时器时钟频率为72MHz预分频器为7200
TIM_TimeBaseStructure.TIM_Prescaler 7200 - 1; // 预分频器值为7199
TIM_TimeBaseStructure.TIM_Period 10000 - 1; // 周期值为9999
TIM_TimeBaseStructure.TIM_ClockDivision 0; // 时钟分频因子为0
TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; // 向上计数模式// 选择定时器例如TIM2
TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);// 使能定时器
TIM_Cmd(TIM2, ENABLE);④、TIM_Prescaler 预分频器的值 功能指定用于分频定时器时钟的预分频器值取值范围0x0000到0xFFFF即0到65535作用预分频器值为PSC时定时器的计数频率为定时器时钟频率 / (PSC 1)。这意味着预分频器值为0时计数频率等于定时器的时钟频率预分频器值为65535时计数频率为定时器时钟频率 / 65536 ⑤、TIM_RepetitionCounter 重复计数器的值 若不使用直接将值取 0 即可 功能指定重复计数器的值。每次重复计数器RCR的下计数器达到0时会生成一个更新事件并从RCR的值N重新开始计数取值范围0x00到0xFF即0到255作用 在边缘对齐模式下N1表示PWM周期的重复次数在中心对齐模式下N1表示半PWM周期的重复次数 适用范围此参数仅适用于TIM1和TIM8定时器 Ⅱ、定时器配置 #include stm32f10x.h // Device headervoid Timer_Init(void)
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能时钟TIM_InternalClockConfig(TIM2);// 配置定时器的内部时钟模式TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1;//设置定时器时钟分频1分频TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up;//计数模式向上计数TIM_TimeBaseInitStruct.TIM_Period 10000 - 1;//自动重装载寄存器的值TIM_TimeBaseInitStruct.TIM_Prescaler 7200 - 1;//预分频器的值TIM_TimeBaseInitStruct.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStruct);TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除定时器的更新中断标志位TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//配置定时器中断更新中断//设置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置嵌套向量中断控制器NVIC的优先级分组NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel TIM2_IRQn;//选择IRQ通道NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;//启用这个IRQ通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 2;//设置抢占优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority 1;//设置响应优先级为1NVIC_Init(NVIC_InitStruct);TIM_Cmd(TIM2, ENABLE);//启用定时器
}
/*
//定时中断函数
void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) SET)//获取定时器中断的状态{//用户代码TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除定时器的中断标志位}
}
*/
Ⅲ、定时器外部中断
#include stm32f10x.h // Device headervoid Timer_Init(void)
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能外部时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//配置GPIOGPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStruct);TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x0F);// 配置定时器的内部时钟模式TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1;//设置定时器时钟分频1分频TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up;//计数模式向上计数TIM_TimeBaseInitStruct.TIM_Period 11 - 1;//自动重装载寄存器的值TIM_TimeBaseInitStruct.TIM_Prescaler 1 - 1;//预分频器的值TIM_TimeBaseInitStruct.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStruct);TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除定时器的更新中断标志位TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//配置定时器中断更新中断//设置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置嵌套向量中断控制器NVIC的优先级分组NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel TIM2_IRQn;//选择IRQ通道NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;//启用这个IRQ通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 2;//设置抢占优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority 1;//设置响应优先级为1NVIC_Init(NVIC_InitStruct);TIM_Cmd(TIM2, ENABLE);//启用定时器
}uint16_t Timer_GetCount(void)
{return TIM_GetCounter(TIM2);
}定时中断函数
//void TIM2_IRQHandler(void)
//{
// if(TIM_GetITStatus(TIM2, TIM_IT_Update) SET)//获取定时器中断的状态
// {
// //用户代码
// TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除定时器的中断标志位
// }
//}
NVIC配置
//设置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置嵌套向量中断控制器NVIC的优先级分组NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel TIM2_IRQn;//选择IRQ通道NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;//启用这个IRQ通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 2;//设置抢占优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority 1;//设置响应优先级为1NVIC_Init(NVIC_InitStruct);