初级会员

- 积分
- 79
- 金钱
- 79
- 注册时间
- 2016-3-21
- 在线时间
- 23 小时
|
15金钱
本帖最后由 xiaov 于 2016-8-8 00:00 编辑
小弟最近在学PID控制电机,发现watch窗口里面TIM3的CNT一直是0,芯片是stm32f103c8,编码器的A、B相分别和PA6(TIM3 CH1)、PA7(TIM3 CH2)相连,电机、编码器和驱动板都是好的,接线也没错,用示波器测PA6、PA7显示方波,说明编码器有信号传过来,可是CNT一直是0,TIM3的其它寄存器的值也都显示为0。然后我把原子哥的定时器中断的例程代码改了拿来测试,watch窗口有显示CNT的实时变化,TIM3的寄存器数值也有变化,所以我觉得是我的编码器的代码出了问题,但是改了一晚上也没整出来,跪求大神指导一下。测试程序:
int main(void)
{
PWM_Init();
Encoder_Init();
PA8=1; //使能
while(1)
{
a=Encoder_Get_CNT();
TIM1->CCR2 = 1000;
}
}
编码器初始化函数
void Encoder_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruc;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
GPIO_InitStruc.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruc.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStruc.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOA,&GPIO_InitStruc);
TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Falling,TIM_ICPolarity_Falling);
TIM_Cmd(TIM3,ENABLE);
}
int cnt = 0;
int Encoder_Get_CNT(void)
{
cnt = (TIM3->CNT)-0x7fff;
TIM3->CNT = 0x7fff;
return cnt;
}
|
|