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

本文详细介绍了如何使用TIM1定时器进行PWM输出,包括模式选择、预分频设置、输出使能、占空比设定等关键步骤,并提供了频率设定的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 TIM1_CCMR
  BIT 6-4:
  110:PWM模式1- 在向上计数时,一旦TIM1_CNT<TIM1_CCR1时通道1为有效电平
  ,否则为无效电平;在向下计数时,一旦TIM1_CNT>TIM1_CCR1时通道1为无效电平(OC1REF=0)
  ,否则为有效电平(OC1REF=1)。
  111:PWM模式2- 在向上计数时,一旦TIM1_CNT<TIM1_CCR1时通道1为无效电平
  ,否则为有效电平;在向下计数时,一旦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_CCR1时有效  
  TIM1_CCMR1 =TIM1_MODE_PWM1 ; 
  //冻结模式,TIM1_CNT<TIM1_CCR1时有效  
  TIM1_CCMR2 =TIM1_MODE_OFF ; 
  //冻结模式,TIM1_CNT<TIM1_CCR1时有效  
  TIM1_CCMR3 =TIM1_MODE_OFF ; 
  //冻结模式,TIM1_CNT<TIM1_CCR1时有效  
  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);


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值