打印
[STM8]

STM8定时器1编码器计数器读不到数据,第一次发帖,请大神帮

[复制链接]
4428|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanceyzou|  楼主 | 2014-2-12 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
--------------------------输入端口配置------------------------------------------
        GPIO_Init_User(EN_CODER,  EN_A_PIN, GPIO_MODE_IN_FL_NO_IT);//ENCODER
        GPIO_Init_User(EN_CODER,  EN_B_PIN, GPIO_MODE_IN_FL_NO_IT);//ENCODER
---------------------------定时器1配置-------------------------------------------
        TIM1->SMCR        |=  0x03;//同时在TI1和TI2边缘计数
        TIM1->CCMR1 |=  0x01;//CC1通道被配置为输入,IC1映射在TI1FP1
        TIM1->CCMR2 |=  0X01;//CC2通道被配置为输入,IC2映射在TI2FP2
        TIM1->ARRH        =  0xEA;
        TIM1->ARRL        =  0x60;
        TIM1->CR1        =  0x01;//使能计数器
------------------------------读数--------------------------------------------------------
void VolumControl(void)
{
        static vu16 LastCentValue;
        vu16  NowCentValue;
        vu16  Temp;
        vu8                VolumValue;

        NowCentValue = TIM1->CNTRH;
        NowCentValue = NowCentValue<<8;
        NowCentValue |= TIM1_CNTL;

        if(NowCentValue>LastCentValue)
        Temp=NowCentValue-LastCentValue;
        else
        Temp=LastCentValue-LastCentValue;//对编码器消抖动
       
        if(Temp>10)
        {
                         VolumValue=NowCentValue/256;
        }
        else
        EncoderStatus=STOP;
}
这是我用STM8S103F2P6的定时器1做的编码器接口配置,当我旋转编码器时,管脚有信号,
为什么计数器的值始终为零。

沙发
huzi2099| | 2014-2-12 17:39 | 只看该作者
你那个感觉差得远呢.

//tim2=103retim5:ch1234,pa0、1、2、3 remap:  pa15、pb3、10、11
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        //A0A1码盘,A3码盘0位置,A4电机0位置
        GPIOX_Init(GPIOA,(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3),GPIO_Mode_IPU);//Tim1C1~C4
  
          TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling
          TIM_TimeBaseStructure.TIM_Period = 2000*2-1;        //溢出设置  
          TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
          TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
          TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

          TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1,TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
          TIM_ICStructInit(&TIM_ICInitStructure);
        //TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_TRC;
          TIM_ICInitStructure.TIM_ICFilter = 0x08;
          TIM_ICInit(TIM2, &TIM_ICInitStructure);


/*ch3捕获上升沿
        TIM_ICStructInit(&TIM_ICInitStructure);
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
          TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
          TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_ICSelection_IndirectTI;//
          TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
          TIM_ICInitStructure.TIM_ICFilter = 0x00;
          TIM_ICInit(TIM2, &TIM_ICInitStructure);        */
// Clear all pending interrupts
          TIM_ClearFlag(TIM2, TIM_FLAG_Update|TIM_IT_CC1|TIM_IT_CC2);
          TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);          //TIM_IT_CC3|
          TIM2->CNT=2000;
          TIM_Cmd(TIM2, ENABLE);

使用特权

评论回复
板凳
yanceyzou|  楼主 | 2014-2-13 08:57 | 只看该作者
huzi2099 发表于 2014-2-12 17:39
你那个感觉差得远呢.

//tim2=103retim5:ch1234,pa0、1、2、3 remap:  pa15、pb3、10、11

您这个是STM32的吧,我是用STM8不用库函数的,所以代码少很多。
我看别人的代码也是这么写的,能帮我指出哪里配置有问题吗?

使用特权

评论回复
地板
airwill| | 2014-2-13 10:10 | 只看该作者
为了代码少, 不用库函数确实是个办法, 不过这样却很容易出现楼主遇到的类似问题.
不妨先用例程的苦函数方式测试一下, 我想能够正常的, 再分析你的代码的问题吧

使用特权

评论回复
5
yanceyzou|  楼主 | 2014-2-13 11:36 | 只看该作者
airwill 发表于 2014-2-13 10:10
为了代码少, 不用库函数确实是个办法, 不过这样却很容易出现楼主遇到的类似问题.
不妨先用例程的苦函数方式 ...

库函数我也试过啊,还是不行啊,难道这么玄妙!
你有没有相关的代码供我参考下啊,愁死了!

使用特权

评论回复
6
airwill| | 2014-2-13 14:20 | 只看该作者
特意看了一下, 固件库里有 TIM 输入捕捉的例程. 但不一定符合你的要求.
我没有玩过这个, 楼主再对照手册看看吧.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝