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

如何实现呼吸灯的效果

[复制链接]
忙音与白衬衫 提问时间:2017-4-23 09:20 /

在stm8-discovery板上  如何实现呼吸灯的效果,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(600);
      }
      // 下面的循环将占空比逐渐从50%递减到0
      for(i=128;i>0;i--)
      {
          TIM1_CCR1H = 0;
          TIM1_CCR1L = i;
          DelayMS(600);
      }
   }
}

收藏 1 评论5 发布时间:2017-4-23 09:20

举报

5个回答
freeelectron 回答时间:2017-4-23 23:16:56
首先要确定一个频率,即就是当占空比改变的时候,灯不闪烁;
再调节占空比就好了
蝶舞娇阳 回答时间:2017-4-24 13:24:09
把PWM的周期拉大,至少保证200ms以上,普遍认为人眼的视觉暂留时间是200ms
enjoyfreescal 回答时间:2017-4-24 15:14:07
你这种实现方法是要上315的,频闪啊。。。
DAC输出【PWM对电容充电也可以实现】
feixiang20 回答时间:2017-7-2 23:23:48
都是高手啊
SInzo 回答时间:2017-7-3 08:52:14
enjoyfreescal 发表于 2017-4-24 15:14
你这种实现方法是要上315的,频闪啊。。。
DAC输出【PWM对电容充电也可以实现】 ...

电容充电我觉得玄乎,放电时候不一定均匀还要算好充电时间

所属标签

相似问题

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