2403|0

156

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Nucleo G071评测】PWM呼吸灯 [复制链接]

    评测一个开发板的定时器功能,最简单的方式就是评测它的呼吸灯功能,呼吸灯是由PWM波实现的,PWM则是由定时器产生的。
    打开CubeMX初始化PC6 PC8 PC9三个引脚,分别映射为定时器3的CH1 CH3 CH4通道,用于驱动RGB灯的三个引脚,设置定时器3不分频(即分频值为0),独立时钟,计数值为100上限:

调好了之后就可以直接接RGB灯了,初始化函数如下:
void TIM3_Init()
{
        GPIO_InitTypeDef GPIO_InitStruct;
  
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_TIM3_CLK_ENABLE();
       
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
       
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 0;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 100;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  HAL_TIM_PWM_Init(&htim3);


  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse=0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
        HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);


        HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
        HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
        HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
       
        TIM3->CCR1=0;
        TIM3->CCR3=0;
        TIM3->CCR4=0;       

}
通过TIM3的CCRX寄存器来修改三个通道的占空比:
                TIM3->CCR1=0;
                TIM3->CCR3=0;
                TIM3->CCR4=0;       
                for(i=0;i<=100;i++)
                {
                        TIM3->CCR1=i;
                        Delay_ms(5);
                }
                Delay_ms(500);
                for(i=100;i>=0;i--)
                {
                        TIM3->CCR1=i;
                        Delay_ms(5);
                }
                for(i=0;i<=100;i++)
                {
                        TIM3->CCR3=i;
                        Delay_ms(5);
                }
                Delay_ms(500);
                for(i=100;i>=0;i--)
                {
                        TIM3->CCR3=i;
                        Delay_ms(5);
                }
                for(i=0;i<=100;i++)
                {
                        TIM3->CCR4=i;
                        Delay_ms(5);
                }
                Delay_ms(500);
                for(i=100;i>=0;i--)
                {
                        TIM3->CCR4=i;
                        Delay_ms(5);

                }
看看效果:


此帖出自stm32/stm8论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表