四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5019|回复: 0

STM8使用TIM1的PWM输入捕获

[复制链接]
  • TA的每日心情
    郁闷
    2016-1-18 09:58
  • 7

    主题

    30

    帖子

    326

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    326
    发表于 2015-11-16 17:04:22 | 显示全部楼层 |阅读模式
    最近在编一个空气质量模块的程序,模块的输出信号为一个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. }
    复制代码

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-3-29 02:34 , Processed in 1.078125 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表