PWM

作者: 清亮2015 | 来源:发表于2018-08-31 20:23 被阅读0次
    image.png image.png
    void pwm_init(void)
    {
        //定时一个该结构体
        TIM_OCInitTypeDef  TIM_OCInitStructure; 
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure1;
        GPIO_InitTypeDef  GPIO_InitStructure1;
        //库函数使能 TIM14 时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13,ENABLE);
        //还需要使用到GPIOF9,所以也要使能该引脚 
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 
        //由于使用到PF9的复用功能,利用库函数使其引脚与TIM14定时器
        GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 
      GPIO_PinAFConfig(GPIOF,GPIO_PinSource8,GPIO_AF_TIM13);  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8;        //GPIOF9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    //配置引脚为复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //速度 50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;    //上拉
        GPIO_Init(GPIOF,&GPIO_InitStructure);     
    
        //设置定时器的的自动重装载的值
        TIM_TimeBaseStructure.TIM_Period=10000-1; 
        //设置定时器的分频值
        TIM_TimeBaseStructure.TIM_Prescaler=8400-1; 
        //设置定时器为向上计数模式
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        //设置定时器的时钟分频因子
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器 14
    
            //设置定时器的的自动重装载的值
        TIM_TimeBaseStructure1.TIM_Period=10000-1; 
        //设置定时器的分频值
        TIM_TimeBaseStructure1.TIM_Prescaler=8400-1; 
        //设置定时器为向上计数模式
        TIM_TimeBaseStructure1.TIM_CounterMode=TIM_CounterMode_Up;
        //设置定时器的时钟分频因子
        TIM_TimeBaseStructure1.TIM_ClockDivision=TIM_CKD_DIV1;
      TIM_TimeBaseInit(TIM13,&TIM_TimeBaseStructure1);//初始化定时器 13
        
        //选择PWM的模式,选择PWM模式1
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
        //用于设置输出的使能,使能PWM输出到端口
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
        //输出的极性,输出是高电平还是低电平,这里选择低。
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
        //根据设定信息配置TIM14 OC1
        TIM_OC1Init(TIM14, &TIM_OCInitStructure); 
      TIM_OC1Init(TIM13, &TIM_OCInitStructure); 
        // 使能预装载寄存器:
        TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 
        TIM_OC1PreloadConfig(TIM13, TIM_OCPreload_Enable); 
        //使能自动重装载的预装载寄存器允许位
        TIM_ARRPreloadConfig(TIM14,ENABLE);
        TIM_ARRPreloadConfig(TIM13,ENABLE);
        TIM_Cmd(TIM14,ENABLE);
        TIM_Cmd(TIM13,ENABLE);
        
    }
    

    实现呼吸灯:只要重装载的值设置小一点灯就不会闪烁。

    
        while(1)
        {
        
            for(i=0; i<100; i++)
            {
                TIM_SetCompare1(TIM14, i);
                delay_ms(10);
            }
            for(i=100; i>0; i--)
            {
                TIM_SetCompare1(TIM14, i);//设置占空比
    
                delay_ms(10);
            }   
            
        }

    相关文章

      网友评论

          本文标题:PWM

          本文链接:https://www.haomeiwen.com/subject/hppewftx.html