×
嵌入式 > 技术百科 > 详情

STM8S PWM应用 用于设置红外38KHZ 载波

发布时间:2020-06-17 发布时间:
|

/*

 TIM1_CCMR

  BIT 6-4:

  110:PWM模式1- 在向上计数时,一旦TIM1_CNT

  ,否则为无效电平;在向下计数时,一旦TIM1_CNT>TIM1_CCR1时通道1为无效电平(OC1REF=0)

  ,否则为有效电平(OC1REF=1)。

  111:PWM模式2- 在向上计数时,一旦TIM1_CNT

  ,否则为有效电平;在向下计数时,一旦TIM1_CNT>TIM1_CCR1时通道1为有效电平

  ,否则为无效电平。

  */

  

//PWM模式选择

#define  TIM1_MODE_PWM1  0X6C//PWM1模式

#define  TIM1_MODE_PWM2  0X7C//PWM2模式

#define  TIM1_MODE_OFF  0x08 //冻结模式

  

  

//预分频选择

#define  TIM1_DIV1   (uint16)0//不分频

#define  TIM1_DIV2   (uint16)1//2分频

#define  TIM1_DIV4   (uint16)3//4分频

#define  TIM1_DIV8   (uint16)7//8分频

#define  TIM1_DIV16   (uint16)15//16分频

#define  TIM1_DIV32   (uint16)31//32分频

 

  

//TIM1 PWM 输出指向的使能位

 _Bool   PWMPC1OUT_PINENBLE  @TIM1_CCER1:0 ;//TIM1_CH1 -- PC1

 _Bool   PWMPC2OUT_PINENBLE  @TIM1_CCER1:4 ;//TIM1_CH2 -- PC2

 _Bool   PWMPC3OUT_PINENBLE  @TIM1_CCER2:0 ;//TIM1_CH3 -- PC3

 _Bool   PWMPC4OUT_PINENBLE  @TIM1_CCER2:4 ;//TIM1_CH4 -- PC4

 

 

 

 

#define PWMPC1OUT_EN PWMPC1OUT_PINENBLE=1//PC1输出PWM

#define PWMPC1OUT_DIS PWMPC1OUT_PINENBLE=0//PC1不输出PWM

 

#define PWMPC2OUT_EN PWMPC2OUT_PINENBLE=1

#define PWMPC2OUT_DIS PWMPC2OUT_PINENBLE=0

 

#define PWMPC3OUT_EN PWMPC3OUT_PINENBLE=1

#define PWMPC3OUT_DIS PWMPC3OUT_PINENBLE=0

 

#define PWMPC4OUT_EN PWMPC4OUT_PINENBLE=1

#define PWMPC4OUT_DIS PWMPC4OUT_PINENBLE=0

 

 

 

 

 

 

 

// PWM 频率设定

//#define MDIV2

//16M 2分频的设置

#if defined(MDIV2)

#define TIM1_DIV_SET TIM1_DIV2

#define PWMFRE_8KHZ  1000

#define PWMFRE_4KHZ  2000

#define PWMFRE_2KHZ  4000

#define PWMFRE_1KHZ  8000

#define PWMFRE_05KHZ  16000

#define PWMFRE_38KHZ  210//用于红外38KHZ载波

#define PWMFRE_OPEN   70//1/3的PWM占空比

#else

//16M 不分频的设置

#define TIM1_DIV_SET TIM1_DIV1

#define PWMFRE_8KHZ  2000

#define PWMFRE_4KHZ  4000

#define PWMFRE_2KHZ  8000

#define PWMFRE_1KHZ  16000

#define PWMFRE_05KHZ  32000

#define PWMFRE_38KHZ  421//用于红外38KHZ载波

#define PWMFRE_OPEN   140//1/3的PWM占空比

#endif

 

 

//*************************************

// 函数名称:Init_Timer1_PWM

// 函数功能:定时器1作PWM输出时初始化

// 入口参数: 设置频率 分频系数

 

// 出口参数:无

//***************************************

void Init_Timer1_PWM(uint16 Tcon,uint16 Pscr)

 

  //16M系统时钟经预分频f=fck/(PSCR+1)  

 

  TIM1_PSCRH = (Pscr >> 8) & 0xff ;  

  TIM1_PSCRL = Pscr & 0xff ; 

  

  //设定重装载时的寄存器值,255是最大值   

  TIM1_ARRH = (Tcon >> 8) & 0xff ;

  TIM1_ARRL = Tcon & 0xff ;//输出频率为:16M/ ARR 

  //设置刹车寄存器   

  TIM1_BKR|=0X80 ;   

 

  //PWM1模式,TIM1_CNT

  TIM1_CCMR1 =TIM1_MODE_PWM1 ; 

  //冻结模式,TIM1_CNT

  TIM1_CCMR2 =TIM1_MODE_OFF ; 

  //冻结模式,TIM1_CNT

  TIM1_CCMR3 =TIM1_MODE_OFF ; 

  //冻结模式,TIM1_CNT

  TIM1_CCMR4 =TIM1_MODE_OFF ; 

  

   //PWM 占空比 清0

  TIM1_CCR1H = 0;

  TIM1_CCR1L = 0;

  TIM1_CCR2H = 0;

  TIM1_CCR2L = 0;

  TIM1_CCR3H = 0;

  TIM1_CCR3L = 0;

  

  TIM1_EGR = 0X01 ; 

  //UG = 1 ;初始化计数器 预装载载入影子寄存器中

  TIM1_CNTRH = 0 ;  //计数器清0

  TIM1_CNTRL = 0 ;

  TIM1_CR1 |= 0X01;  // 计数器使能,开始计数  

    

}

//*************************************

// 函数名称:PWM_CCR1_SET

// 函数功能:设置PWM占空比

// 入口参数:占空比值

// 出口参数:无

//***************************************

void PWM_CCR1_SET(uint16 OPEN_PWM)

{

 TIM1_CCR1H= (uint8)((OPEN_PWM >> 8 ) & 0xFF);

 TIM1_CCR1L = (uint8)(OPEN_PWM & 0xFF);

}

//*************************************

// 函数名称:PWM_CCR2_SET

// 函数功能:设置PWM占空比

// 入口参数:占空比值

// 出口参数:无

//***************************************

void PWM_CCR2_SET(uint16 OPEN_PWM)

{

 TIM1_CCR2H= (uint8)((OPEN_PWM >> 8 ) & 0xFF);

 TIM1_CCR2L = (uint8)(OPEN_PWM & 0xFF);

}

//*************************************

// 函数名称:PWM_CCR3_SET

// 函数功能:设置PWM占空比

// 入口参数:占空比值

// 出口参数:无

//***************************************

void PWM_CCR3_SET(uint16 OPEN_PWM)

{

 TIM1_CCR3H= (uint8)((OPEN_PWM >> 8 ) & 0xFF);

 TIM1_CCR3L = (uint8)(OPEN_PWM & 0xFF);

}

//*************************************

// 函数名称:PWM_CCR3_SET

// 函数功能:设置PWM占空比

// 入口参数:占空比值

// 出口参数:无

//***************************************

void PWM_CCR4_SET(uint16 OPEN_PWM)

{

 TIM1_CCR4H= (uint8)((OPEN_PWM >> 8 ) & 0xFF);

 TIM1_CCR4L = (uint8)(OPEN_PWM & 0xFF);

}

//应用:

  Init_Timer1_PWM(PWMFRE_38KHZ,TIM1_DIV_SET) ;//16M   设置38K PWM输出

  PWM_CCR1_SET(PWMFRE_OPEN);



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展