[mw_shl_code=c,true]谢谢各位,谢谢原子哥 第一,首先明确我的功能,就是想通过STM32实现对直线型磁栅编码器发出的脉冲进行计数,(也即当来一个脉冲,记一次数,)以便知道单位长度对应着多少个脉冲信号; 第二,由于原子哥的视频没有编码器接口的视频,所以我是按照输入捕获实验来学习的;但是还没有学懂;所以找了以前师兄编写的程序在看;如下;里面既设置了GPIO的一些东西(我没有贴出来),也设置了定时器的一些东西,还设置了编码器接口,还设置了输入捕获;所以我的问题来了; 疑问:A:图中对编码器接口的设置能实现我的功能吗?B:我只想对脉冲个数进行计数,是不是只需要设置编码器接口就行了?为什么还要设置定时器那些东西呢?定时器,输入捕获,编码器接口模式他们之间的关系是什么呢?设置定时器后,定时器不就是按照设定的周期自行的计数吗?并不是检测到一个脉冲计一次数;C如果图中程序不能实现我的功能,那请教大师们,想实现我的功能,都需要设置哪些,怎么设置?谢谢了;我搞了10天左右了,都没有搞定这个功能;请大家指点,谢谢; [/mw_shl_code]
[mw_shl_code=c,true] /* Timer configuration in Encoder mode for left encoder*/
TIM_TimeBaseStructure.TIM_Prescaler = 0x00; // No prescaling
TIM_TimeBaseStructure.TIM_Period = 200000; //max resolution(0xffffffff for TIM2&TIM5 0xffff for TIM3&TIM4)
//????????????1/84M,?ó????0.0119us??200000??????×??±???ó????0.02????????????
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//devide by clock by one
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;// count up
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge, TIM_ICPolarity_BothEdge);
TIM_ICStructInit(&TIM_ICInitStructure);//°????????è????????????
TIM_ICInitStructure.TIM_ICFilter = 6;//ICx_FILTER;//???¨?÷???¤?????×??????????????
//???°?????????????????????¨?÷?¤????×÷????
TIM_ICInit(TIM5, &TIM_ICInitStructure);
// Clear all pending interrupts
TIM_ClearFlag(TIM5, TIM_FLAG_Update);
TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);//?ò???ü??????
//Reset counter
TIM5->CNT = 500000;//prevent exceeding 0 when turning wheel backwards
TIM_Cmd(TIM5, ENABLE);//enable left encoder[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
当然你也可以考虑用外部中断来做。
定时器的特殊功能要指定管脚(具体那些管脚对应那些功能,这个你要自己去查看手册和规格书,st官网上有提供的)。
---------------------------------
你还是看下手册吧。感觉你对stm32不是怎么了解。手册上有专门解释tim的,或者你看下原子哥的书。
---------------------------------
可以,中断类型,去看stm32参考手册。
里面有详细描述。
一周热门 更多>