四联光电智能照明论坛

标题: STM8使用TIM1的PWM输入捕获 [打印本页]

作者: 魔幻使者Jack    时间: 2015-11-16 17:04
标题: STM8使用TIM1的PWM输入捕获
最近在编一个空气质量模块的程序,模块的输出信号为一个PWM波,需要测出其输出的PWM周期和占空比,虽然完全可以自己写,但是STM8自带PWM输入捕获,不用浪费了

首先初始化TIM1:
  1. void Init_Tim1(void)//使用TIM1的PWM输入捕获
  2. {  
  3.   TIM1_CCER1 &= 0xee;//禁止输入捕获1,2
  4.   
  5.   TIM1_PSCRH = 0x3e;
  6.   TIM1_PSCRL = 0x7f; //分频到1毫秒为单位,
  7.   
  8.   TIM1_CCMR1 = 0x01;// ch1到ti1fp1
  9.   TIM1_CCMR2 = 0x02;// ch2选择 ti1fp2上
  10.   TIM1_SMCR |= 0x54;//选源触发源和触发方式 复位  
  11.   
  12.   TIM1_CCER1 |= 0x20;//ch1上升沿(周期) CH2下降沿触发(占空比)
  13.   TIM1_CCER1 |= 0x11;//使能输入捕获1,2  
  14.   TIM1_CR1 |= 0x01;//开定时器使能
  15.   TIM1_IER |=0x02;//使能中断 ch1
  16. }
复制代码

然后在中断函数中读取就OK了(  主函数中记得要__asm("rim");     //开全局中断)

  1. #pragma vector =TIM1_CAPCOM_CC1IF_vector
  2. __interrupt void TIM1_CAPCOM(void) //利用计数器1来算PWM
  3. {
  4.   if(TIM1_SR1_CC1IF==1&&TIM1_SR1_CC2IF==1)
  5.   {
  6.     IrHigh = (u32)(TIM1_CCR2H);
  7.     IrHigh = (IrHigh << 8) + TIM1_CCR2L;  //IrHigh占空比
  8.     IrCycle = (u32)(TIM1_CCR1H);
  9.     IrCycle = (IrCycle << 8) + TIM1_CCR1L;  //IrCycle周期
  10.   }
  11. }
复制代码






欢迎光临 四联光电智能照明论坛 (http://5xhome.com/) Powered by Discuz! X3.2