打印
[其他ST产品]

定时器2的寄存器值全为0

[复制链接]
417|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2024-1-18 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
型号为103系列,将PA0和PA1作为编码器的两个输入通道(定时器通道1和通道2), 配置代码如下:

    GPIO_InitTypeDef             GPIO_InitStructure;
    tiM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;
    TIM_ICInitTypeDef             TIM_ICInitStructure;  
    NVIC_InitTypeDef              NVIC_InitStructure;     

    RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能TIM2时钟
    /* Enable GPIOA, clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能GPIOA时钟
   
    GPIO_StructInit(&GPIO_InitStructure);//将GPIO_InitStruct中的参数按缺省值输入
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1;     
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);                           

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Period = 360 * 4 -1;  //设定计数器重装值
    TIM_TimeBaseStructure.TIM_Prescaler = 0;         //TIM2时钟预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;//设置时钟分割 T_dts = T_ck_int   
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up; //TIM向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);              

   
    TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//使用编码器模式3,上升下降都计数
    TIM_ICStructInit(&TIM_ICInitStructure);        //将结构体中的内容缺省输入

    TIM_ICInitStructure.TIM_ICFilter = 6;          //选择输入比较滤波器
    TIM_ICInit(TIM2, &TIM_ICInitStructure);        //将TIM_ICInitStructure中的指定参数初始化TIM2
   
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);        //清除TIM2的更新标志位
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);    //运行更新中断
    //Reset counter
    TIM2->CNT = 0;

    TIM_Cmd(TIM2, ENABLE);   //启动TIM2定时器


结果是定时器2的寄存器值全为0,  定时器2也无法开启,  单独将定时器2作为普通定时器用则正常, 求帮忙找下原因啊

使用特权

评论回复
沙发
cr315| | 2024-1-22 16:31 | 只看该作者
检查是否在配置编码器之前开启了定时器2。

使用特权

评论回复
板凳
两只袜子| | 2024-1-22 16:31 | 只看该作者
可能是编码器接口配置问题

使用特权

评论回复
地板
jcky001| | 2024-1-22 16:32 | 只看该作者
有时,中断或事件线的配置可能会与编码器模式冲突。

使用特权

评论回复
5
elephant00| | 2024-1-22 16:32 | 只看该作者
检查定时器2的配置寄存器是否在配置为编码器模式后被重新编程。如果有,这可能导致定时器无法启动或值归零。

使用特权

评论回复
6
远山寻你| | 2024-2-21 11:03 | 只看该作者
无法开启的话,是不是你定时器配置错了

使用特权

评论回复
7
淡漠安然| | 2024-2-21 15:00 | 只看该作者
有可能是有些芯片没有定时器2的,你得看看

使用特权

评论回复
8
别乱了阵脚| | 2024-2-21 20:00 | 只看该作者
一般情况,这种应该用cubemx配置,就比较简单了

使用特权

评论回复
9
夜阑风雨| | 2024-2-21 23:00 | 只看该作者
话说,不是有例程的么,直接用例程搞多好啊

使用特权

评论回复
10
三生万物| | 2024-2-22 02:30 | 只看该作者
看你配置应该没啥问题啊,咋不好使呢

使用特权

评论回复
11
江河千里| | 2024-2-22 05:30 | 只看该作者
你说定时器没启动,你是仿真看的吗?

使用特权

评论回复
12
一秒落纱| | 2024-2-22 08:30 | 只看该作者
直接用其他定时器试试呢?也许会OK

使用特权

评论回复
13
光辉梦境| | 2024-2-22 11:00 | 只看该作者
那你用定时器1试试呗

使用特权

评论回复
14
暖了夏天蓝了海| | 2024-2-22 15:00 | 只看该作者
一般编码器的话不是用定时器1么?

使用特权

评论回复
15
冰春彩落下| | 2024-2-22 20:00 | 只看该作者
这个配置可能不对吧,定时器2本身就是普通定时器

使用特权

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

本版积分规则

378

主题

2023

帖子

3

粉丝