初级会员

- 积分
- 56
- 金钱
- 56
- 注册时间
- 2016-7-20
- 在线时间
- 13 小时
|
1金钱
本帖最后由 晴空万里的天 于 2016-7-26 17:22 编辑
void TIM5_Int_Init()
{
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //时钟使能
TIM_TimeBaseStructure.TIM_Period =999; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到1000为1ms
TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值 1Mhz的计数频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;//时间比较
TIM_OCInitStructure.TIM_Pulse = 104; //设置跳变值,当计数器计数到这个值时,电平发生跳变
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR2_Val时为高电平
TIM_OC2Init(TIM5,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM5,TIM_OCPreload_Enable);
TIM_ITConfig(TIM5,TIM_IT_CC2,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM3中断,NVIC中断管理在默认情况下都是0级组,所以不分组也能用
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_Cmd(TIM5, ENABLE); //使能TIMx外设
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_CC2)!=RESET)
{
TIM_ClearITPendingBit(TIM5,TIM_IT_CC2);
GPIOB->ODR ^=GPIO_Pin_0;
}
}
为什么我设定了104us中断,可是我用示波器看那个GPIOB0引脚的时候是1ms中断呢,意思就是 TIM_OCInitStructure.TIM_Pulse = 104;这个值设不设都没关系,我也实验了,无论怎么改,最终都是以TIM_TimeBaseStructure.TIM_Period =999; 这个值为准,为什么呢?
求助大神。
|
|