你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助 如何用pwm编程实现呼吸灯效果

[复制链接]
瞌睡大虫 提问时间:2017-4-18 14:41 /
本帖最后由 瞌睡大虫 于 2017-4-18 15:32 编辑

我用的是stm8l152c6 下面是我的pwm 信号    求解答 如何实现呼吸灯


#include"iostm8l152c6.h"
#include"stdint.h" //这个头文件定义了数据类型,可以使用uint8_t,uint16_t
void DelayMS(unsigned int ms)
{
  uint8_t i;
  while(ms != 0)
  {
    for(i=0;i<250;i++);
    for(i=0;i<75;i++);
    ms--;
  }
}
/****************************************************************************************
*  名    称:void TIMER1_Init(void)
*  功    能:stm8定时器初始化
*  入口参数:无
*  出口参数:无
*  说    明:通道1输出pwm波
*  范    例:无
****************************************************************************************/
void TIMER1_Init(void)
{
//对于stm8l,默认时钟源是关闭的,需要先打开,才能配置寄存器
  CLK_PCKENR2_PCKEN21=1;//打开定时器1时钟

  TIM1_CCMR1_OC1M=0x06;//0b110 PWM模式1
  TIM1_CCER1_CC1P=0;//高电平有效
  TIM1_CCER1_CC1E=1;//OC1信号输出到对应引脚,PD2为OC1输出引脚

  //禁用预装载寄存器,TIM1CCR can be wiriten at any time
  TIM1_CCMR1_OC1PE=0;

  TIM1_CR1_CMS=0;//计数器计数方向取决于TIM1_CR1_DIR
  TIM1_CR1_DIR=0;//counter used as up-counter

  //初始化刹车寄存器中的MOE,只有设置此位才能使TIM1的OC1输出pwm
  TIM1_BKR_MOE=1;

  TIM1_PSCRH = 0;// Set the Prescaler value
  TIM1_PSCRL = 0;// Set the Prescaler value
  TIM1_ARRH = 0;// 初始化自动装载寄存器,决定PWM 方波的频率
  TIM1_ARRL = 256;// 初始化自动装载寄存器,决定PWM 方波的频率

  TIM1_CCR1H=0;
  TIM1_CCR1L=0;

  TIM1_CR1_CEN=1;//开启计数器
}
int main( void )
{
  uint8_t i;
  //CLK_CKDIVR寄存器默认0x03分频值为8,所以主频默认为16M/8=2M
  //PD2引脚输出PWM波
   PD_DDR_DDR2 =1;//设置为输出
   PD_CR1_C12 =1;//推挽输出
   TIMER1_Init();
   while(1)
   {
      // 下面的循环将占空比逐渐从0 递增到50%
      for(i=0;i<128;i++)
      {
          TIM1_CCR1H = 0;
          TIM1_CCR1L = i;
          DelayMS(5);
      }
      // 下面的循环将占空比逐渐从50%递减到0
      for(i=128;i>0;i--)
      {
          TIM1_CCR1H = 0;
          TIM1_CCR1L = i;
          DelayMS(5);
      }
   }
}

收藏 2 评论15 发布时间:2017-4-18 14:41

举报

15个回答
瞌睡大虫 回答时间:2017-4-18 15:15:04
本帖最后由 瞌睡大虫 于 2017-4-18 15:16 编辑

信号输出的是PD2  我的led端口是 PC7 和PE7

我下面该怎么做
@乔木 回答时间:2017-7-6 07:48:11
要把PWM输出到接LED的端口上

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

好吃好好吃 回答时间:2017-7-6 08:08:36
在比较中断中翻转端口吧,或者你看下LED连接的那两个端口有没有PWM输出。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-7-6 08:09:55
把 PC7=PD2,看看行不行?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

斜阳__ 回答时间:2017-7-6 08:35:59
把pwm输出到led上。pwm调整脉宽就可以调整亮度。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2017-7-6 08:53:54
PWM是要求定时器指定的比较输出引脚,可以查看一下PC7和PE7有没有相对应的定时器输出比较通道,如果有那就可以实现,改改定时器设置就行,如果没有,那就比较麻烦了。如果要求频率比较低的话,可以自己用软件来做出一个PWM的效果来。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2017-7-6 09:41:40
改变PWM的占空比就能实现

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

jcx0324 回答时间:2017-7-6 11:27:16
可以用DMA输出PWM

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

15616384352 回答时间:2017-7-6 13:19:11
开启定时器的更新中断和比较中断,在中断中设置输出引脚的状态即控制LED,这样定时器的频率就是LED上PWM的频率,改变对应的CCRX寄存器的值就是改变PWM占空比

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版