魔幻使者Jack 发表于 2015-11-16 17:04:22

STM8使用TIM1的PWM输入捕获

最近在编一个空气质量模块的程序,模块的输出信号为一个PWM波,需要测出其输出的PWM周期和占空比,虽然完全可以自己写,但是STM8自带PWM输入捕获,不用浪费了;P。

首先初始化TIM1:
void Init_Tim1(void)//使用TIM1的PWM输入捕获
{
TIM1_CCER1 &= 0xee;//禁止输入捕获1,2

TIM1_PSCRH = 0x3e;
TIM1_PSCRL = 0x7f; //分频到1毫秒为单位,

TIM1_CCMR1 = 0x01;// ch1到ti1fp1
TIM1_CCMR2 = 0x02;// ch2选择 ti1fp2上
TIM1_SMCR |= 0x54;//选源触发源和触发方式 复位

TIM1_CCER1 |= 0x20;//ch1上升沿(周期) CH2下降沿触发(占空比)
TIM1_CCER1 |= 0x11;//使能输入捕获1,2
TIM1_CR1 |= 0x01;//开定时器使能
TIM1_IER |=0x02;//使能中断 ch1
}
然后在中断函数中读取就OK了(主函数中记得要__asm("rim");   //开全局中断)

#pragma vector =TIM1_CAPCOM_CC1IF_vector
__interrupt void TIM1_CAPCOM(void) //利用计数器1来算PWM
{
if(TIM1_SR1_CC1IF==1&&TIM1_SR1_CC2IF==1)
{
    IrHigh = (u32)(TIM1_CCR2H);
    IrHigh = (IrHigh << 8) + TIM1_CCR2L;//IrHigh占空比
    IrCycle = (u32)(TIM1_CCR1H);
    IrCycle = (IrCycle << 8) + TIM1_CCR1L;//IrCycle周期
}
}
页: [1]
查看完整版本: STM8使用TIM1的PWM输入捕获