|
不好意思,我现在要实现的功能是外面来一次中断我去执行读取一下压力传感器的值,但现在由于是外接的电机编码器的信号,速度实在太快,所以我想用TIM1分频功能先将其分频一下,比如来100个脉冲后再产生一次中断,
下面是我的初始化程序:
//外部prx用作time1计数器分频率输入
void PrxConterInit(void)
{
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Period = 1; //计数周期值(范围:0x0000~0xFFFF)TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。
TIM_TimeBaseStructure.TIM_Prescaler = 1; //TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。
TIM_TimeBaseStructure.TIM_ClockDivision = 0x00; //设置了时钟分割。
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); //
TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
//TIM_ExtTRGPSC_OFF: TIM ETRP 预分频 OFF(范围:0,2,4,6)
//TIM_ExtTRGPolarity_NonInverted: TIM外部触发极性非翻转:高电平或上升沿有效
//ExtTRGFilter: 外部触发滤波器。该参数取值在0x0和0xF之间。
TIM_SetCounter(TIM1,0);
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM1,ENABLE);
}
、、、、、、、、、、、
//中断处理程序
void TIM1_UP_IRQHandler(void)
{
static UINT16 temp;
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
if(sys.powerupFlag) //上电过程中
{
goto ERROR_CONTER_TIM1;
}
}
现在管脚我不管了(焊线过去,原来接的是TIM1_CH2好像不行),现在就用TIM1_ETR(PA12=STM32F103V8)
现在出现一个问题:TIM_TimeBaseStructure.TIM_Period 这个值我必须大于等于1,如果设到0的话就会进入不了中断处理程序,这是为什么?
另外再帮我看一下我的初始化有没有什么问题
谢谢!! |
|