代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //floating也不对
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
GPIO_Init(GPIOD, &GPIO_InitStructure);
TIM_SetAutoreload(TIM4, 0xffff);
TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_Cmd(TIM4, ENABLE);
tim4_counter = TIM_GetCounter(TIM4);
PD12和13被remap成tim4的正交编码输入,PD12和13是5V兼容的端口,现象是计数会自动变化,编码器不供电则不会变化。当IO设置成FLOATING模式,则不接编码器都会自己变化。注:PD12和PD13除了接编码器未和其他管脚连接。
这个编码器模式我一直未正常使用过,用过的大侠指导一下,我郁闷的不行了。。。
你的编码器输入接上拉了吗?编码器不是开漏输出就是差分输
差分输出的最好是用专用差分解码片子(485的接收),开漏输出的必需加上拉
感谢楼上的回答
我这个编码器除供电外,只有ABZ三根线,应该是开漏输出的。我将IO模式设为输入上拉,编码器计数仍旧不对,会自动跳变。编码器经测试是完全正常的。只是问题还是不知道出在哪里。
用内部上拉基本不好使的(因为它太弱),直接在外部加5.1K以内