嵌入式
返回首页

STM8系列--PWM捕获输入检测

2025-09-08 来源:cnblogs

最重要的下载程序的option bety 设置;


函数1:


void Init_Timer1(void)

{    

    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);   //输入浮动,没有外部中断     

    TIM1_DeInit();                                         //tim1 定时器寄存器全部复位  

    TIM1_TimeBaseInit(31, TIM1_COUNTERMODE_UP, 15625-1, 0);//  500ms  最小捕获5hz      设置时间分频  向上计数    捕捉5Hz及 以上的周期和占空比         

    TIM1_PWMIConfig(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00); //选择TI1输入上升沿触发 选择TI2输入下降沿触发 输入捕捉预定标器  无滤波

    TIM1_SelectInputTrigger(TIM1_TS_TI1FP1);                 //滤波后输入TI1

    TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);  //复位输入

    TIM1_ClearFlag(TIM1_FLAG_CC1);                                 //指定要清除的标志

    TIM1_ClearFlag(TIM1_FLAG_CC2);                                //指定要清除的标志

    TIM1_ITConfig( TIM1_IT_CC1, ENABLE);                     //去掉是查询方式,否则是中断方式

    TIM1_ITConfig( TIM1_IT_CC2, ENABLE);                    //去掉是查询方式,否则是中断方式

    TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);          //使能输入捕获通道1

    TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);          //使能输入捕获通道2

    TIM1_Cmd(ENABLE);                                                     //使能定时器

 

}


函数2:


extern __IO uint32_t LSIClockFreq;

extern __IO uint32_t LSIDuty;

INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  uint16_t num = 0;

  static uint16_t num1;

  static uint32_t num2;


 if(TIM1_GetITStatus(TIM1_IT_CC1) != RESET) //如果CH1边沿触

  {  

      num1 = TIM1_GetCapture1();  

      TIM1_ClearITPendingBit(TIM1_IT_CC1);    //清除标志位  

  }  

 else if(TIM1_GetITStatus(TIM1_IT_CC2) != RESET) //如果CH2边沿触发  

  {  

      num2 = TIM1_GetCapture2();             //

      TIM1_ClearITPendingBit(TIM1_IT_CC2);    //清除标志位  

      if(flag_send==0)

      {

           LSIDuty = ((num2 * 100) / num1); //计算占空比

           SIClockFreq = 62500/( num1);        //计算频率

          if(LSIClockFreq>=0xff)

         {

             LSIClockFreq=0xff;

         }

     }

  }

}


进入嵌入式查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • FollowMe 第二季:3 - EK_RA6M5 开发板入门

  • FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解

  • Azure RTOS step by step workshop

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • 从0到1:树莓派与物联网教程(英文)

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章