STM32编码器接口模式程序问题

2019-08-20 17:09发布

请教下论坛里有没有哪位大神用SYM32的编码器接口做过编码器位置控制的?小弟刚刚学习这一块,遇到了一些问题,我的程序是这样的:
//TIME3 编码器接口模式 //编码器模式初始化 void encoder_Init(u16 ENCODER_TIM_PERIOD,u16 COUNTER_RESET) { RCC->APB1ENR|=1<<1;//TIM3时钟使能 
RCC->APB2ENR|=1<<2;    //使能PORTA时钟 GPIOA->CRL&=0X00FFFFFF; GPIOA->CRL|=0X4400000;//PA6,7浮空输入 
TIM3->DIER|=1<<0;   //允许更新中断 TIM3->DIER|=1<<6;   //允许触发中断 MY_NVIC_Init(1,3,TIM3_IRQChannel,2); /* Timer configuration in Encoder mode */  TIM3->SC = 0x0;//预分频器 TIM3->ARR = ENCODER_TIM_PERIOD;//设定计数器自动重装值  TIM3->CR1 &=~(3<<8);// 选择时钟分频:不分频 TIM3->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式 TIM3->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1 TIM3->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2 TIM3->CCER &= ~(1<<1); //CC1P='0' IC1FP1不反相,IC1FP1=TI1 TIM3->CCER &= ~(1<<5); //CC2P='0' IC2FP2不反相,IC2FP2=TI2 TIM3->CCMR1 |= 3<<4; // IC1F='1000' 输入捕获1滤波器 TIM3->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效 TIM3->CNT = COUNTER_RESET; //计数器初始值 TIM3->CR1 |= 0x01;    //CEN=1,使能定时器 }
然后在主函数里读出计数器的值:
        encoder_Init(1999,0); while(1) { delay_ms(100); currentCount=TIM3->CNT;
        }
现在是当电机转动时,要么读不出数据,currentCount一直为0 ,要么就是读出的数据为ENCODER_TIM_PERIOD(即是1999).而且之后也一直是这个值不会变化。不知是什么情况?望有这方面经验的兄弟们指教。还有就是我想用编码器来做定位,该怎么来实现呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
tsacy
1楼-- · 2019-08-21 12:11
回复【7楼】648342243:
---------------------------------
这个有解决吗?我也是用的TIM3来接解决这个问题?
但是一直度不行了,楼主,主要是什么问题呢!!!!求详细解释!!!
伤心地中海
2楼-- · 2019-08-21 17:48
回复【2楼】正点原子:
---------------------------------
原子哥,我想问一下,stm32f101c8t6这个芯片有没有编码器模式的?
正点原子
3楼-- · 2019-08-21 21:57
回复【9楼】伤心地中海:
---------------------------------
应该有吧,你看看数据手册.
伤心地中海
4楼-- · 2019-08-22 02:29
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-08-22 05:04
回复【11楼】伤心地中海:
---------------------------------
额,101有固件库函数么?
有的话,找找看.
伤心地中海
6楼-- · 2019-08-22 07:45
回复【12楼】正点原子:
---------------------------------
101和103的固件库好像是同一个的,通用的

一周热门 更多>