This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GXL 使用TIVA关于定时器分频问题

我在使用timerA的TIMER3做捕获定时时发现使用TimerPrescaleSet(TIMER3_BASE, TIMER_A, 80);这个函数不能成功对定时器的时钟进行分频。请问一下是什么原因是我没有正确使用库函数吗?

  • 这里在附上初始化程序希望工程师能看看是否有问题

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4);


    //使能外设
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);


    GPIOPinConfigure(GPIO_PB2_T3CCP0);
    GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_2);

    //给定时器分频

    TimerPrescaleSet(TIMER3_BASE, TIMER_A, 80);

    //
    //设置定时器为捕获定时
    TimerConfigure(TIMER3_BASE, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME));

    //设置为双边沿触发
    TimerControlEvent(TIMER3_BASE, TIMER_A, TIMER_EVENT_BOTH_EDGES);
    TimerIntEnable(TIMER3_BASE, TIMER_CAPA_EVENT);

    //
    IntEnable(INT_TIMER3A); //使能定时器中断

    IntMasterEnable();
    ROM_TimerLoadSet(TIMER3_BASE, TIMER_A, 0xffff);
    TimerEnable(TIMER3_BASE, TIMER_A);//使能定时器

  • Pengyin

    你说的无效是指什么现象。

    该寄存器在单次或周期的定时是真正的预分频寄存器。延长单次或周期的定时器的范围。

    在其他模式下,包括捕获模式,该寄存器是计数器的高8 位(16/32定时器)/16位(32/64定时器)。

  • 我是使用定时器的边沿捕获定时的功能,用来捕获PWM调制信号,发现从计数其中读出来的数值不正确,比实际设置的16位要大,而且发现设置了分频系数后,计数器中的计数值还是以计数器来计数。

    翻看手册发现正如你所说的在单次或周期的定时是真正的预分频寄存器,而在边沿定时捕获时是寄存器是计数器的高8 位;就就不对系统分频了,只是增加了计数其中的容量,取出来时还系统将至去除分频值。

    我现在还有个问题,我现在是用PWM模块时,使用的是PWM0和PWM1,引脚使用了D0,D1和B6、B7作为输出。D0,D1和B6、B7分别使用PWM0发生器0,和PWM1发生器0,可是初始化后只用D0和B6输出两路,这是为什么?不是手册上说能一个发生器产生两路独立的PWM吗?