OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2659|回复: 2

stm32编码器功能配置怎么办

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2020-3-28
在线时间
1 小时
发表于 2020-3-28 14:36:32 | 显示全部楼层 |阅读模式
1金钱
stm32f103系列单片机,将2个霍尔接近开关通过电路设计接高电平,磁铁靠近,开关闭合,高电平导通进入单片机定时器的tim2的1和2通道,对该定时器进行编码器配置。但是原子哥的视频里面没有该配置,我查找相关资料,摸索了一下,整体框架配出来了,但是某些地方还不对,得不到我想要的现象。
void Encoder_Init(void)
{
        TIM_TimeBaseInitTypeDef          TIM_TimeBaseStructure;
        TIM_ICInitTypeDef                                  TIM_ICStructure;                                              //设置输入比较参数,开启输入捕获
        GPIO_InitTypeDef                                         GPIO_InitStructure;                               //引脚配置
        NVIC_InitTypeDef         NVIC_InitStructure;
        //配置GPIO
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                           //配置两个管脚的模式
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 + GPIO_Pin_1;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
         

        //使能时钟
        ////RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        ////RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
        /* Timer configuration in Encoder mode */
        TIM_DeInit(TIM2);
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
       
        TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //配置预分频,此值+1为分频的除数
        TIM_TimeBaseStructure.TIM_Period = (uint16_t)0xffff; //自动装载值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//配置时钟因子
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;// 配合成向上计数  
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

        TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,
        TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//TIM_EncoderInterfaceConfig是配置定时器的编码器接口函数。TIM_ICPolarity_Rising:上升沿捕获,编码器模式1
        TIM_ICStructInit(&TIM_ICStructure);
        TIM_ICStructure.TIM_ICPrescaler = TIM_ICPSC_DIV4;
        TIM_ICStructure.TIM_ICFilter = 00;//ICx_FILTER;设置滤波器长度
        TIM_ICInit(TIM2, &TIM_ICStructure);
        //Clear all pending interrupts
        TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除 TIM2 的待处理标志位
        TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);//允许更新中断和允许cc1TIM_IT_CC1  TIM_IT_CC1||TIM_IT_Update
        //Reset counter
        TIM2->CNT = 0;//复位后的计数器的值
        // ENC_Clear_Speed_Buffer();
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级设置为0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级设置为1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        TIM_Cmd(TIM2, ENABLE);  
}

void TIM2_IRQHandler(void)
{       
         //TIM2CH1_CAPTURE_STA = 1;

                        //TIM3CH1_CAPTURE_VAL=TIM_GetCounter(TIM3);
                        //TIM3CH1_CAPTURE_oldVAL = TIM3CH1_CAPTURE_VAL;                               
                        //TIM3CH1_deviation = TIMwy;                                               
                        //bac++;
        if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET){
                        RingBuf_Write(PAD_ID_Spider);
                        RingBuf_Write(9);
                        RingBuf_Write(TRANNINGBACK);
                        RingBuf_Write(TIMwy);
                        RingBuf_Write(u16tou8(TIM_GetCounter(TIM3),'H'));
                        RingBuf_Write(u16tou8(TIM_GetCounter(TIM3),'L'));
                        RingBuf_Write((TIM2->CR1&1<<4));
                        RingBuf_Write(Eot);
                        RingBuf_Write(CalcCrc(TxBuffer,TxBuffer[1]-1));
                        TIMwy = 0;
                        TIM_SetCounter(TIM3,0);
                        }
                        //TIM2CH1_CAPTURE_STA = 0;
               
                       
               

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位TIM_IT_CC1|
       
       
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3625
金钱
3625
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-3-28 15:27:24 | 显示全部楼层
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2020-3-28
在线时间
1 小时
 楼主| 发表于 2020-3-28 15:56:54 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 01:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表