牛卧堂MCU技术交流

标题: M051 Time Capture 捕获的值都为0 [打印本页]

作者: 匿名    时间: 2020-7-9 17:21
标题: M051 Time Capture 捕获的值都为0
  1. int main(void)
  2. {
  3.                
  4.         volatile uint32_t u32InitCount;
  5.         
  6.         
  7.     SYS_Init();
  8.     /* Init UART0 for printf */
  9.     UART0_Init();
  10.                 PWM_Init();
  11.                 Timer_Init();
  12.         
  13.                
  14.                 /*允许时钟输出*/
  15.                 CLK_EnableCKO( CLK_CLKSEL2_FRQDIV_S_HXT, 1, 1);
  16.         
  17.                 PWM_Start(PWMA,1);
  18.                  u32InitCount = g_au32TMRINTCount[0] = 0;
  19.         
  20.                 TIMER_Start(TIMER0);
  21.                 TIMER_Start(TIMER3);
  22.                
  23.                
  24.           printf("*** TEST***\n\n");
  25. #if 1
  26.                 while(g_au32TMRINTCount[0] <= 10)
  27.     {
  28.         if(g_au32TMRINTCount[0] != u32InitCount)
  29.         {
  30.             printf("[%2d]-%d\n\n", g_au32TMRINTCount[0], TIMER_GetCaptureData(TIMER0));
  31.             u32InitCount = g_au32TMRINTCount[0];
  32.         }
  33.     }
  34. #endif
  35.     /* Stop Timer0, Timer1 and Timer3 counting */
  36.     TIMER_Close(TIMER0);
  37.    // TIMER_Close(TIMER1);
  38.     TIMER_Close(TIMER3);

  39.     printf("*** PASS ***\n\n");

  40.     while(1);
  41. }
复制代码


作者: admin    时间: 2020-7-10 10:25
请问你的定时器的计数器是记外部事件还是定时器的时钟?
作者: admin    时间: 2020-7-10 10:26
可以的话,请把你的初始化代码贴出来
作者: 匿名    时间: 2020-7-10 15:29
admin 发表于 2020-7-10 10:26
可以的话,请把你的初始化代码贴出来

void Timer_Init()
{
                TIMER_Open(TIMER3, TIMER_TOGGLE_MODE, 50);
       
                /* Initial Timer1 default setting */
    TIMER_Open(TIMER0, TIMER_CONTINUOUS_MODE,1);
        /* Configure Timer0 setting for external counter input and capture function */
    TIMER_SET_PRESCALE_VALUE(TIMER0,0);
    TIMER_SET_CMP_VALUE(TIMER0,0xFFFFFF);
    TIMER_EnableEventCounter(TIMER0,TIMER_COUNTER_FALLING_EDGE);
    TIMER_EnableCapture(TIMER0,TIMER_CAPTURE_FREE_COUNTING_MODE,TIMER_CAPTURE_FALLING_EDGE);
    TIMER_EnableCaptureInt(TIMER0);
       
       
                //TIMER1->TCSR = TIMER1->TCSR |  TIMER_TCSR_IE_Msk | TIMER_TCSR_TDR_EN_Msk  ;
                     
    /* Enable Timer1 NVIC */
    NVIC_EnableIRQ(TMR0_IRQn);
       
       
       
}
作者: 匿名    时间: 2020-7-10 15:33
admin 发表于 2020-7-10 10:26
可以的话,请把你的初始化代码贴出来

外部输入50HZ的方波……读取的值都为0……能读到值说明进入了中断函数,但是10次读取的值都是0
作者: admin    时间: 2020-7-13 10:19
你能把你引脚复用的代码也贴一下嘛?
作者: 匿名    时间: 2020-7-13 16:20
admin 发表于 2020-7-13 10:19
你能把你引脚复用的代码也贴一下嘛?

/* Enable UART module clock */
    CLK_EnableModuleClock(UART0_MODULE);
    /* Select UART module clock source */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL , CLK_CLKDIV_UART(1));
               
                /*Enable ADC module clock*/
          CLK_EnableModuleClock(ADC_MODULE);
                /* select adc module clock source  ADC的频率为(PLL时钟/div) 50M/100=500K*/
                CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_PLL ,CLK_CLKDIV_ADC(100));
               
                /*Enable  PWM0 PWM1 PWM2 PWM3module clk*/
                CLK_EnableModuleClock(PWM01_MODULE);
                CLK_EnableModuleClock(PWM23_MODULE);
                /* Select PWM module clock source */
                CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HXT, 0);
                CLK_SetModuleClock(PWM23_MODULE, CLK_CLKSEL1_PWM23_S_HXT, 0);
               
                /*Enable T0 clk*/
                CLK_EnableModuleClock(TMR0_MODULE);
                CLK_EnableModuleClock(TMR3_MODULE);
                /*select To module  clk*/
                CLK_SetModuleClock(TMR0_MODULE,CLK_CLKSEL1_TMR0_S_HCLK ,0);
                CLK_SetModuleClock(TMR3_MODULE,CLK_CLKSEL1_TMR3_S_HCLK ,0);

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Set P3 multi-function pins for UART0 RXD and TXD   p3.2为T0*/
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P32_T0EX );
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P32_T0EX );
                /*设置p3.6为时钟输出*/
                SYS->P3_MFP &= ~SYS_MFP_P36_Msk;
                SYS->P3_MFP |=SYS_MFP_P36_CKO;
                /*设置p4.0为pwm输出*/
                SYS->P4_MFP &=~SYS_MFP_P40_Msk;
                SYS->P4_MFP |=SYS_MFP_P40_PWM0;
        #if 0       
                 /* Configure the P1.0 - P1.3 ADC analog input pins */
    SYS->P1_MFP &= ~(SYS_MFP_P10_Msk | SYS_MFP_P11_Msk | SYS_MFP_P12_Msk | SYS_MFP_P13_Msk);
    SYS->P1_MFP |= SYS_MFP_P10_AIN0 | SYS_MFP_P11_AIN1 | SYS_MFP_P12_AIN2 | SYS_MFP_P13_AIN3 ;
        #endif       
        SYS->P1_MFP =SYS_MFP_P11_T3;
作者: admin    时间: 2020-7-14 09:44
你的引脚配错了 要配置time0的引脚,你配的time3的
作者: 匿名    时间: 2020-7-14 10:55
admin 发表于 2020-7-14 09:44
你的引脚配错了 要配置time0的引脚,你配的time3的

/* Set P3 multi-function pins for UART0 RXD and TXD   p3.2为T0*/
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P32_T0EX );
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P32_T0EX );
我用的是P32脚做捕获
作者: nes6502    时间: 2020-10-22 14:12
游客 121.35.101.x 发表于 2020-7-14 10:55
/* Set P3 multi-function pins for UART0 RXD and TXD   p3.2为T0*/
    SYS->P3_MFP &= ~(SYS_MFP_P30 ...

    /* Set P3 multi-function pins for UART0 RXD and TXD   p3.2为T0*/
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P32_T0EX );
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P32_T0EX );
兄弟, 你上面那个是不是写错了, 应该是下面这样子:

    /* Set P3 multi-function pins for UART0 RXD and TXD   p3.2为T0*/
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P32_Msk );
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P32_T0EX );





欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2