STM8奇怪的PWM

[复制链接]
4331|18
 楼主| y306512180 发表于 2011-11-28 19:06 | 显示全部楼层 |阅读模式
本帖最后由 y306512180 于 2011-11-28 19:08 编辑

今天要用TIM1做PWM,但是发现一个奇怪的问题,产生多个PWM波形后会有一段低电平时间,如图所示;
程序代码如下:
void TIM1_Init(void)
{//定时器1初始化
  CLK_PCKENR1|=0x80;//开启定时器1外设时钟  
  TIM1_EGR=0x01;//重新初始化TIM1
  TIM1_EGR|=0x20;//重新初始化TIM1
  TIM1_ARRH=0x00;//设定重装载值
  TIM1_ARRL=254;
  TIM1_PSCRH=0;//预分频
  TIM1_PSCRL=9;
  TIM1_CR1=0x01;//边沿对齐,向上计数
  TIM1_RCR=0;
}

void TIM1_PWM_Init()
{
  TIM1_CCER1=0x03;
  TIM1_CCMR1=0x70;//PWM模式2
  TIM1_CCR1H=0;//占空比
  TIM1_CCR1L=10;
  TIM1_BKR=0x80;
}

求解啊
DSC_00212.jpg
 楼主| y306512180 发表于 2011-11-28 20:16 | 显示全部楼层
求教啊,求教
 楼主| y306512180 发表于 2011-11-28 21:07 | 显示全部楼层
怎么没人啊
 楼主| y306512180 发表于 2011-11-28 21:26 | 显示全部楼层
等高手啊
香水城 发表于 2011-11-29 10:00 | 显示全部楼层
可能程序中有其他部分干扰。
 楼主| y306512180 发表于 2011-11-29 10:29 | 显示全部楼层
5# 香水城
#include <iostm8s105s4.h>
#define u8 unsigned char
#define u16 unsigned int
void CLK_Init(void)
{
  CLK_CKDIVR=0;//内部RC输出不分频,CPU亦分频
}

void GPIO_Init()
{
  PC_DDR|=0x02;
  PC_CR1|=0x02;
  PC_CR2|=0x02;
  PD_DDR|=0x10;
  PD_CR1|=0x10;
  PD_CR2|=0x10;
}

void TIM2_Init(void)
{//定时器1初始化
  CLK_PCKENR1|=0x20;//开启定时器2外设时钟
// TIM2_EGR|=0x01;//重新初始化TIM1
  //TIM2_ARRH=0x03;//设定重装载值
  //TIM2_ARRL=0xff;
  //TIM2_PSCR=3;//预分频
  //TIM2_CR1=0;//边沿对齐,向上计数
}
void TIM2_PWM_Init()
{
  TIM2_CCMR1=0x70;//PWM模式2
  TIM2_CCER1=0x03;
  TIM2_ARRH=0x00;//设定重装载值
  TIM2_ARRL=0xff;
  TIM2_CCR1H=0;//占空比
  TIM2_CCR1L=5;
  //TIM2_IER=0x01;
  TIM2_CR1=0x01;//向上计数,无缓存,使能
}

void main()
{
  CLK_Init();
  GPIO_Init();
  TIM2_Init();
  TIM2_PWM_Init();
  while(1);
}

香水版主,换用了定时器2还是这个情况,程序就这么简单,应该不会有干扰吧,想不通啊
}
香水城 发表于 2011-11-29 11:00 | 显示全部楼层
建议你把所有的 |= 都换成 =
bobo5650 发表于 2011-11-29 11:24 | 显示全部楼层
确定是不是发生了RST,可以看一下RST脚的信号。有些型号的看门狗能硬件使能,看看是不是被使能了。

评分

参与人数 1威望 +2 收起 理由
香水城 + 2 Good point !

查看全部评分

香水城 发表于 2011-11-29 11:34 | 显示全部楼层
确定是不是发生了RST,可以看一下RST脚的信号。有些型号的看门狗能硬件使能,看看是不是被使能了。
bobo5650 发表于 2011-11-29 11:24


Good point !
 楼主| y306512180 发表于 2011-11-29 12:36 | 显示全部楼层
9# 香水城
刚接了示波器看RST的电平一直为高,查看RST_SR寄存器,只发现SWIMF为1,因为我接了ST-LINK,为了保险起见,我在while(1)中加了个32位变量计数,发现一直递增,并未复位,所以还是搞不懂~
 楼主| y306512180 发表于 2011-11-29 12:44 | 显示全部楼层
7# 香水城
换了
 楼主| y306512180 发表于 2011-11-29 13:01 | 显示全部楼层
9# 香水城
而且发现一个问题,如果ARR为255,那么CCR如果高于一个值比如20几,波形基本正常
香水城 发表于 2011-11-29 13:14 | 显示全部楼层
对于产生出来的PWM波形,频率和占空比正确吗?多少周期后会出现低电平?每次都是这么多周期吗?

现象比较奇怪,可惜我没有玩过,想不出具体原因。
 楼主| y306512180 发表于 2011-11-29 14:20 | 显示全部楼层
13# 香水城
用电压表量了下,电压基本正确,可能是示波器扫描的问题吧
z3571240 发表于 2011-11-29 14:57 | 显示全部楼层
:lol 求解。、
hm4243343 发表于 2011-11-29 16:13 | 显示全部楼层
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
leijie2001 发表于 2011-11-30 08:01 | 显示全部楼层
也许是示波器采样点刚好落在PWM的低电平位置,把波形展开一些观察,就可以确定。
bobo5650 发表于 2011-11-30 10:41 | 显示全部楼层
输出脚后面是不是接了其他电路?照你所说,脉宽加大之后就偏于正常,则有可能是后面的电路有干扰。
可以把这个输出脚悬空了来看一下波形不?
丑奴儿atl 发表于 2011-11-30 14:26 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部