void Encoder_Init_TIM4(void)
{
RCC->APB1ENR|=1<<2; //TIM4ʱÖÓʹÄÜ
RCC->APB2ENR|=1<<3; //ʹÄÜ
ORTbʱÖÓ
GPIOB->CRL&=0X00FFFFFF;//PB6 PB7
GPIOB->CRL|=0X44000000;//¸¡¿ÕÊäÈë
/* °Ñ¶¨Ê±Æ÷³õʼ»¯Îª±àÂëÆ÷ģʽ */
TIM4->
SC = 0x0;//Ô¤·ÖƵÆ÷
TIM4->ARR = ENCODER_TIM_PERIOD-1;//É趨¼ÆÊýÆ÷×Ô¶¯ÖØ×°Öµ
TIM4->CCMR1 |= 1<<0; //ÊäÈëģʽ£¬IC1FP1Ó³Éäµ½TI1ÉÏ
TIM4->CCMR1 |= 1<<8; //ÊäÈëģʽ£¬IC2FP2Ó³Éäµ½TI2ÉÏ
TIM4->CCER |= 0<<1; //IC1²»·´Ïò
TIM4->CCER |= 0<<5; //IC2²»·´Ïò
TIM4->SMCR |= 3<<0; //SMS='011' ËùÓеÄÊäÈë¾ùÔÚÉÏÉýÑغÍϽµÑØÓÐЧ
TIM4->CR1 |= 0x01; //CEN=1£¬Ê¹Äܶ¨Ê±Æ÷
}
/**************************************************************************
º¯Êý¹¦ÄÜ£ºµ¥Î»Ê±¼ä¶ÁÈ¡±àÂëÆ÷¼ÆÊý
Èë¿Ú²ÎÊý£º¶¨Ê±Æ÷
·µ»Ø Öµ£ºËÙ¶ÈÖµ
**************************************************************************/
int Read_Encoder(u8 TIMX)
{
int Encoder_TIM;
Encoder_TIM= (short)TIM4 -> CNT; TIM4 -> CNT=0;
return Encoder_TIM;
}
1 看到一些测速程序 TIM2->CNT就是速度值
2 TIM2->CNT这个不是脉冲数吧
3 是要关闭TIM4再读TIM2->CNT吧还是定时时间到了直接读 然后寄存器设为0
4 有没有什么好的方法捕获输出的脉冲数参考一下
感谢解答 拜托了
你1s内测到1000个脉冲,结果只走了1米。难到速度是1000米/秒?中间有个转换关系的。
一周热门 更多>