PWM输出,呼吸灯

一、初始化GPIO

使用PB1,查芯片手册对应TIM3_CH4

        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        
        GPIO_Init(GPIOB, &GPIO_InitStructure);

 

 

二、初始化TIM和PWM

   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;

    /* 周期1000 */
    TIM_TimeBaseStructure.TIM_Period = 999;
    /* 定时器时间间隔1微秒 */
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    /* 向上计数 */
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    /* 配置 */
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    /* 选择PWM1模式 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    /* 允许输出模式 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    
    /* 匹配值 */
    TIM_OCInitStructure.TIM_Pulse = 1000;    
    /* 设置小于匹配值时为高电平 */
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    /* 使能通道1 */
    TIM_OC4Init(TIM3, &TIM_OCInitStructure);    
    
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM3, ENABLE);
    TIM_Cmd(TIM3, ENABLE); 

 

 

三、main函数部分

通过修改CCRx寄存器,改变占空比。从而调整电流大小

     while(1)
    {
            if(CCR3_Val >=0 && CCR3_Val <= 1000)
            {
                CCR3_Val -= 50;
                Delay(1);
            }
            else
            {
                CCR3_Val = 1000;
                Delay(1);
            }
            TIM3->CCR4 = CCR3_Val;
            Delay(1);
    }

 


posted @ 2017-08-15 09:11  习惯就好233  阅读(533)  评论(0编辑  收藏  举报