void TIM1_Configuration(void) //只用一个外部脉冲端口
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure; //后加的中断配置
//后添加的中断配置
//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel=TIM1_IRQn; //TIM1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
//配置TIMER1作为计数器
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Period = 10000; //原来是0xffff
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;//设置预分频可以将外部信号分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // Time base configuration
TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF); //我测试中一直不能用的原因是缺少这句话,缺少后,timer的驱动时钟源默认是RCC,需要更改为外部ETR输入才行。
TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
//后添加的关于中断的部分
TIM_ARRPreloadConfig(TIM1, ENABLE);
/*预先清除所有中断位*/
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
/* 4个通道和溢出都配置中断*/
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
TIM_SetCounter(TIM1, 0); //设置寄存器值函数
TIM_Cmd(TIM1, ENABLE); //使能TIM1
}
这是我的配置,但是不知道为什么会有错误,..\HARDWARE\timer\timer.c(43): error: #20: identifier "TIM1_IRQn" is undefined,换成别的都不会有错误
|