中科因仑“3+1”工程特种兵精英论坛

标题: STM8S OPM 模式模式输出源码 [打印本页]

作者: 曾经最美    时间: 2016-5-6 16:19
标题: STM8S OPM 模式模式输出源码
void opmGpioInit(void)
{
        PC_DDR_DDR1 = 1; //输出管脚
        PC_CR1_C11 = 1;
        PC_CR2_C21 = 1;
        
        PC_DDR_DDR2 = 0; //输入管脚
        PC_CR1_C12 = 1;
        PC_CR2_C22 = 0;
}



void  opmInit(void)
{

        TIM1_PSCRH = 0x00;
        TIM1_PSCRL = 0x00;        //时钟分频寄存器  计数器的时钟频率(fCK_CNT)=fCK_PSC/(PSCR[15:0]+1)
        
//与CCR的差值决定脉冲的宽度
        TIM1_ARRH = (uint8_t)(5000 >> 8) ; //设置PWM的周期为5000us
        TIM1_ARRL = (uint8_t)(5000&0xFF);

//控制延时时间
        TIM1_CCR1H = (uint8_t)(1000 >> 8);  //通道1配置占空比
        TIM1_CCR1L = (uint8_t)(1000);

//配置通道1为输出模式
        TIM1_CCMR1_OC1M = 7;        //PWM模式1
        TIM1_CCMR1_OC1PE = 1 ;  //使能预装载
        TIM1_CCER1_CC1P = 0 ; //配置输出极性为高电平
        TIM1_CCER1_CC1E = 1 ; //使能PWM的输出



//捕获设置
        TIM1_CCER1_CC2E = 0; //使能通道捕获
        TIM1_CCMR2_CC2S = 0x01 ;  //配置通道2为输入模式
        TIM1_CCER1_CC2P =0 ;  //采样高电
        TIM1_CCER1_CC2E = 1; //使能通道捕获

        TIM1_SMCR_TS = 6;  //配置触发选择
        TIM1_SMCR_SMS = 6;//配置在重新捕获到触发信号后产生更新事件

        TIM1_CR1_DIR = 0;  //向上计数
        TIM1_CR1_CMS = 0 ;  //计数模式为边沿对其起码
        TIM1_CR1_OPM = 1; //使能OPM
        TIM1_CR1_ARPE = 0;  //禁止自动重装
        TIM1_CR1_CEN = 1 ; //使能定时器1
        TIM1_BKR_MOE = 1;           //  Enable the main output.
        
        TIM1_EGR_UG = 1 ; // 允许在产生更新事件时重装定时器值
}

void eOpmModeInit(void)
{
opmGpioInit();
opmInit();
}





欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4