本帖最后由 arm_nuedu 于 2017-11-16 14:45 编辑  
 
在新唐m4 nuedu 红外线接收与发送的程序中,关于pwm有一下配置。 问题:1:什么是施密特触发, 我的理解:平时都是高于某一临界值,高便为高,低便是低,施密特等于说设置了两个值。高于一个临界值才是高,低同样这样抗干扰的能力肯定会更高。 只是在trm技术手册上没有看到pwm  capture的相关简介,所以厚着脸皮来这里问问  。。。。  
2:capture的1000是怎么选的?在nec bit0/1 的规范中如图下面附件,有560us的pwm方波和560的低电平,capture下降沿应该不会收到560us pwm那个影响(因为他是30%占空比,它本身就有下降沿,从程序来看,这个下降沿应该没算),应该跟1000这个设置有关系,但就是想不通 我的理解:1/38000 =2.63*10^-5,就是26us,即使再 *0.3,高电平也是7.8us。 那么capture的1000怎么算出来的呢??? 点进入,该参数的说明是计数的单位。该单位是ns级的,设为1000,也就是1us记一个数。 如果这样,pwm 输出时,NEC协议要求的,560us微妙的pwm,都会引起pwmcapture的捕获,不是吗? 在nec rx函数中是严格控制步骤,应该不会这样: 下面是部分rx程序: voidIrDa_NEC_Rx(uint32_t u32Time) {  
if(IR_State == 0)     {         IR_LDC_Ready = 0;           // Clear LeaDer Code Ready         IR_CTC_Ready = 0;           // Clear CusTomer Code Ready         IR_State++;     }     // Leader or Repeater code     else if(IR_State == 1)     {         // Leader code         if((u32Time >= IR_LDC_MIN)&& (u32Time <= IR_LDC_MAX))         {             IR_LDC_Ready = 1;       // Set LeaDer Code Ready             IR_State++;         }         else         {             IR_State = 1;             IR_LDC_Ready = 0;           // Clear LeaDer Code Ready             IR_CTC_Ready = 0;           // Clear CusTomer Code Ready         }     }     // Customer code 0     else if((IR_State >= 2 &&IR_State < 10) && (IR_LDC_Ready == 1))     {         IR_State++;         IR_CTC0 = IR_CTC0 >> 1;  
这是配置函数: 输出 PWM_ConfigOutputChannel(PWM0,3, 38000, 30);  
接收   /* set PWM1 channel 3 capture configuration*/     PWM_ConfigCaptureChannel(PWM0, 5, 1000,0);//1000说是捕获单位,单位是ns,我觉得不对的是,72M对应不是ns. 0没有用  
    /* Enable capture falling edge interruptfor PWM1 channel 3 */     PWM_EnableCaptureInt(PWM0, 5,PWM_CAPTURE_INT_FALLING_LATCH);  
    /* Enable PWM1 NVIC interrupt */     NVIC_EnableIRQ(PWM0P2_IRQn);  
    /* Enable Timer for PWM1 channel 3 */     PWM_Start(PWM0, PWM_CH_5_MASK);  
    /*Enable Input Schmitt Trigger*/     PD->SMTEN |= GPIO_SMTEN_SMTEN7_Msk;  
    /* Enable Capture Function for PWM1 channel3 */     PWM_EnableCapture(PWM0, PWM_CH_5_MASK);  
    /* Enable falling capture reload */     PWM0->CAPCTL |= PWM_CAPCTL_FCRLDEN5_Msk;
 
 
 |