RTL8762DW呼吸灯

/** Define pwm output pin.
  * P0_1 is connected to LED0 on the EVB.
  */
#define PWM_OUT_PIN             P0_1
/** Define pwm complementary output pin.
  * P0_2 is connected to LED1 on the EVB.
  */
#define PWM_OUT_P_PIN           P0_2
#define PWM_OUT_N_PIN           P2_2

#define PWM_TIMER_NUM           TIM2
#define PWM_OUT_PIN_PINMUX      timer_pwm2
#define PWM_OUT_P_PIN_PINMUX    PWM2_P
#define PWM_OUT_N_PIN_PINMUX    PWM2_N

/* Config PWM_PERIOD and PWM_DUTY_CYCLE */
#define PWM_PERIOD              1000000 //uint:us
#define PWM_DUTY_CYCLE          50      //uint:percent
/* PWM_HIGH_COUNT =  */
#define PWM_HIGH_COUNT          (((PWM_PERIOD)*((PWM_DUTY_CYCLE*40)/100))-1)    //PWM CLOCK = 40000000
#define PWM_LOW_COUNT           (((PWM_PERIOD)*(((100-PWM_DUTY_CYCLE)*40)/100))-1)


#define PWM_DEAD_ZONE_TIME      1 //uint:ms
#define PWM_DEAD_ZONE_SIZE      ((PWM_DEAD_ZONE_TIME)*32-1)


void m_set_pwm(uint32_t percent)
{
    TIM_TimeBaseInitTypeDef TIM_InitStruct;

    if (percent>100)percent=100;

    TIM_Cmd(TIM2, DISABLE);


    TIM_StructInit(&TIM_InitStruct);
    TIM_InitStruct.TIM_PWM_En   = PWM_ENABLE;


    TIM_InitStruct.TIM_Period = 2000 * 10 - 1 ;
    TIM_InitStruct.TIM_PWM_High_Count = percent;//HGIH - 1; //should be large enough to generate a complementary PWM
    TIM_InitStruct.TIM_PWM_Low_Count = (100-percent);//LOW - 1 ;
    TIM_InitStruct.TIM_Mode = TIM_Mode_UserDefine;
    TIM_InitStruct.PWM_Deazone_Size = 0x10;


    TIM_InitStruct.PWMDeadZone_En       = DEADZONE_ENABLE;  //enable to use pwn p/n output
    TIM_TimeBaseInit(TIM2, &TIM_InitStruct);

    TIM_Cmd(TIM2, ENABLE);
}
void pwm_demo(void)
{
    Pad_Config(PWM_OUT_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE, PAD_OUT_HIGH);
    Pad_Config(PWM_OUT_P_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE,
               PAD_OUT_HIGH);
    Pad_Config(PWM_OUT_N_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE,
               PAD_OUT_HIGH);

    /* Normal mode */
    Pinmux_Config(PWM_OUT_PIN, PWM_OUT_PIN_PINMUX);
    /* Deadzone mode */
    Pinmux_Config(PWM_OUT_P_PIN, PWM_OUT_P_PIN_PINMUX);
    Pinmux_Config(PWM_OUT_N_PIN, PWM_OUT_N_PIN_PINMUX);

    //=====================
    RCC_PeriphClockCmd(APBPeriph_TIMER, APBPeriph_TIMER_CLOCK, ENABLE);

#define DELAY_TIME   (100000)
    uint32_t i;
    uint32_t j=0;
    while (1)
    {

        for (j=0; j<101; j++)
        {
            m_set_pwm(j);
            for (i = 0; i < DELAY_TIME; i++);
        }
        while(j)
        {
            m_set_pwm(j);
			j--;
            for (i = 0; i < DELAY_TIME; i++);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值