野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14602|回复: 4

用单片机改变PWM占空比来控制LED灯渐熄渐灭

[复制链接]
发表于 2020-4-30 09:45:42 | 显示全部楼层 |阅读模式
程序部分int main(void)
{
  uint8_t        ch;
        int PWMvalue=0,FLag=1;
        init();
        Delay(20);
        //printf("EXTI_Line15");
        while(1)
  {
                if(FLag)
                 PWMvalue++;
                else
                 PWMvalue--;
   if(PWMvalue==200)
    FLag=0;
         if(PWMvalue==0)
                  FLag=1;
    TIM_SetCompare1(TIM3,PWMvalue);
  }
}

void init()
{
        EXTI15_Config();
        EXTI12_Config();
  Key_Config();
  UART1_Config();
  PWM_Config();
        LED_Config();
}

void PWM_Config(void)
{  
         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
         TIM_OCInitTypeDef TIM_OCInitStructure;
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟
  /***********设置TIM3的ARR和PSC**************/
   TIM_TimeBaseStructure.TIM_Period = 899;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值
   TIM_TimeBaseStructure.TIM_Prescaler = 0;//时钟频率的预分频值
   TIM_TimeBaseStructure.TIM_ClockDivision = 0x00;//时钟分割
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//设置为向上计数模式
   TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);

        /***********设置TIM3_CH3的PWM模式及通道方向,使能TIM3的CH3输出 **************/
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0;//设置待装入捕获比较寄存器的脉冲值
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
  TIM_OC3Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC3
        //TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH3 预装载使能
        TIM_ARRPreloadConfig(TIM3, ENABLE); //使能 TIM3 在 ARR 上的预装载寄存器
        TIM_Cmd(TIM3, ENABLE); //使能 TIM3
        //TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE );
}

void LED_Config(void)
{  
         GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE);

  /************配置PA.0为PWM输出***************/
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选PA.0为输出引脚
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//引脚速率
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设PA.O为复用推免输出
   GPIO_Init(GPIOA, &GPIO_InitStructure);

         /************配置PB.0为PWM输出***************/
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选PB.0为输出引脚
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//引脚速率
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设PB.O为复用推免输出
   GPIO_Init(GPIOB, &GPIO_InitStructure);
         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3复用功能部分映射
}

硬件部分在图片中

电路.PNG
回复

使用道具 举报

 楼主| 发表于 2020-5-7 10:38:01 | 显示全部楼层
怎么没人啊:@
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 15:55:39 | 显示全部楼层
这帖子要成海了吗
回复 支持 反对

使用道具 举报

发表于 2020-5-14 22:32:05 | 显示全部楼层
顶一下,还没学到PWM
回复 支持 反对

使用道具 举报

发表于 2020-5-15 08:53:55 | 显示全部楼层
顶一下               
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-13 21:40 , Processed in 0.040373 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表