[STM32] 407定时器驱动EC11编码器 无法计数求指导

[复制链接]
 楼主| wzrde21 发表于 2016-5-27 16:06 | 显示全部楼层 |阅读模式
本帖最后由 wzrde21 于 2016-5-27 16:08 编辑

使用TIM4编码器模式驱动EC11,初始化函数如下
  1. void EC11_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         NVIC_InitTypeDef NVIC_InitStructure;
  5.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  6.   TIM_ICInitTypeDef TIM_ICInitStructure;   
  7.         
  8.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);                                                                                                                                                                                                                        //使能TIM4时钟         
  9.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  10.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  11.         
  12.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;                                                                                                                                                                        //EC11A MOD B A
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                                                                                                                                                                                                                                                        //普通输入模式

  14.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;                                                                                                                                                                                                                                                        //上拉
  15.         GPIO_Init(GPIOB, &GPIO_InitStructure);

  16.   NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;                                                                                                                                                                                                                                         //定时器4中断
  17.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;                                                                                                                                                                                        //抢占优先级1
  18.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                                                                                                                                                                                                        //子优先级3
  19.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                                                                                                                                                                                         //中断使能
  20.   NVIC_Init(&NVIC_InitStructure);
  21.         
  22.         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  23.         TIM_TimeBaseStructure.TIM_Period = 1333;                                                                                                                                                                                                                                                                  //设定计数器重装值   
  24.         TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                                                                                                                                                                                                         //TIM4时钟预分频值
  25.         TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;                                                                                                                                                                                                                //
  26.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                                                                                                                                                                                         //TIM向上计数
  27.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  28.         
  29.         TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising);        //使用编码器模式3,
  30.         TIM_ICStructInit(&TIM_ICInitStructure);                                                                                                                                                                                                                                                                                //将结构体中的内容缺省输入
  31.         TIM_ICInitStructure.TIM_ICFilter = 1;                                                                                                                                                                                                                                                                                  //选择输入比较滤波器
  32.         TIM_ICInit(TIM4, &TIM_ICInitStructure);                                                                                                                                                                                                                                                                                //将TIM_ICInitStructure中的指定参数初始化TIM3

  33.         TIM_ClearFlag(TIM4, TIM_FLAG_Update);                                                                                                                                                                                                                                                                                        //清除TIM3的更新标志位
  34.         TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);                                                                                                                                                                                                                                                                //开启TIM3更新标志使能

  35.         TIM_SetCounter(TIM4,0);                                                                                                                                                                                                                                                                                                                                                //

  36.         TIM_Cmd(TIM4, ENABLE);                                                                                                                                                                                                                                                                                                                                           //启动TIM3定时器
  37. }
复制代码
初始化结束后再main中循环读取计数器的值,但是没有变化
  1. int main(void)
  2. {
  3. //  u8 i;
  4.         u32 n_Counter;
  5.         delay_init(168);
  6.         
  7.         KEY_Init();
  8.         EC11_Init();
  9.         
  10.     while (1)
  11.     {
  12. //                        i=KEY_Scan(1);
  13.                         n_Counter = TIM_GetCounter(TIM4);
  14.                         n_Counter =n_Counter;
  15.                         delay_ms(500);
  16.     }
  17. }
复制代码
循环读取计数器的值,但是没有变化
示波器能看到输入引脚的波形   波形没问题  
原理图如下
求各位大神解答

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gaoyang9992006 发表于 2023-9-5 20:58 | 显示全部楼层
zwsam 发表于 2024-1-27 09:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部