找回密码
 立即注册
查看: 765|回复: 13

求救关于独立PWM输出问题,没有输出怎么办?

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2024-12-07 20:13:36

2

主题

12

回帖

104

积分

注册会员

积分
104
发表于 2024-5-10 12:23:05 | 显示全部楼层 |阅读模式
求救关于独立PWM输出问题,没有输出?

本人新手小白,芯片是STC8H1K08T,想使用P3.3的PWM4_N2独立输出PWM控制LED亮暗,参照ISP上面的示例做了修改,但是没有任何输出。。
望大师指点迷津。还有就是独立设置PWM输出需要怎么个流程?期待大师的指点!先在此感谢!
#include "stc8h.h"
#include "intrins.h"


#define PWMA_CCER2      (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CCMR4      (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_ENO        (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_BKR        (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_CCR4       (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_ARR        (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_CR1        (*(unsigned char volatile xdata *)0xfec0)


void main()
{

   //P3M0 |= 0x1c; P3M1 &= ~0x1c;
    P3PU |= 0x0c;



    P_SW2 = 0x80;
    PWMA_CCER2 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR4 = 0x60;                          //设置CC4为PWMA输出模式
    PWMA_CCER2 = 0xC0;                          //使能CC2通道
    PWMA_CCR4 = 100;                            //设置占空比时间
    PWMA_ARR = 500;                             //设置周期时间
    PWMA_ENO = 0x80;                            //使能PWM4P端口输出
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1 = 0x01;                            //开始计时
    //led=1;

    while (1);
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-5-10 14:34:33 | 显示全部楼层
2024-05-10_143357.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2024-5-10 14:37:56 | 显示全部楼层
本帖最后由 乘风飞扬 于 2024-5-10 14:39 编辑

这颗芯片是P33对应的是PWM4N_4。
截图202405101427413290.jpg
需要将设置:PWMA_PS |= 0xc0;
截图202405101438576290.jpg
此外,PWMA_CCR4(占空比值)也要设置:
截图202405101436524691.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2024-12-07 20:13:36

2

主题

12

回帖

104

积分

注册会员

积分
104
发表于 2024-5-10 14:43:41 | 显示全部楼层
乘风*** 发表于 2024-5-10 14:37
这颗芯片是P33对应的是PWM4N_4。

需要将设置:PWMA_PS |= 0xc0;

非常大师您的指点,我这边又重新核实了下,做了些修改,好像还是不行。麻烦您再指导下哪里有问题?

#include "stc8h.h"
#include "intrins.h"


#define PWMA_CCER2      (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CCMR4      (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_ENO        (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_BKR        (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_CCR4       (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_ARR        (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_CR1        (*(unsigned char volatile xdata *)0xfec0)
#define PWMA_PS        (*(unsigned char volatile xdata *)0xfeb2)

void main()
{
   
   //P3M0 |= 0x1c; P3M1 &= ~0x1c;
    //P3PU |= 0x0c;



    P_SW2 = 0x80;
    PWMA_PS |= 0xc0;
    PWMA_CCER2 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR4 = 0x60;                          //设置CC4为PWMA输出模式
    PWMA_CCER2 = 0xC0;                          //使能CC2通道
    PWMA_CCR4 = 500;                            //设置占空比时间
    PWMA_ARR = 100;                             //设置周期时间
    PWMA_ENO = 0x80;                            //使能PWM4P端口输出
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1 = 0x01;                            //开始计时
    //led=1;

    while (1);
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2024-12-07 20:13:36

2

主题

12

回帖

104

积分

注册会员

积分
104
发表于 2024-5-10 14:46:44 | 显示全部楼层

我也不清楚开启PWM,对应的P3.3的IO脚位是否需要设置为上拉电阻模式,还是说开漏输出?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2024-5-10 14:51:40 | 显示全部楼层
zys0*** 发表于 2024-5-10 14:43
非常大师您的指点,我这边又重新核实了下,做了些修改,好像还是不行。麻烦您再指导下哪里有问题?

#incl ...

占空比不能设置的比周期还大。
周期(PWMA_ARR)设置100,那么占空比(PWMA_CCR4)设置50试试。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2024-12-07 20:13:36

2

主题

12

回帖

104

积分

注册会员

积分
104
发表于 2024-5-10 15:06:40 | 显示全部楼层
乘风*** 发表于 2024-5-10 14:51
占空比不能设置的比周期还大。
周期(PWMA_ARR)设置100,那么占空比(PWMA_CCR4)设置50试试。 ...

谢谢您的指导,还是不行。不知道哪里没有设置到还是程序不对?需要对P3.3的IO设置输入输出的模式吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2024-5-10 15:29:39 | 显示全部楼层
STC8H1K08T系列PWM脚的IO口模式需要手动设置,初始化设置P33为准双向模式,或者推挽输出模式试试。
附件例程已经过测试,供参考。

PWM4N输出程序.zip

5.71 KB, 下载次数: 100

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2024-12-07 20:13:36

2

主题

12

回帖

104

积分

注册会员

积分
104
发表于 2024-5-10 15:46:57 | 显示全部楼层
本帖最后由 zys0797 于 2024-5-10 15:49 编辑
乘风*** 发表于 2024-5-10 15:29
STC8H1K08T系列PWM脚的IO口模式需要手动设置,初始化设置P33为准双向模式,或者推挽输出模式试试。
附件例 ...

非常感谢,现在成功输出PWM了。我这边对比了下程序,发现我就是P3口没有设置准准双向模式,设置为推挽输出的话直接就是相当于IO口置为1一样。
请教大师以下几点:
1、我需要如何控制PWM的输出频率?比如我要输出20KHZ
2、如果我要控制PWM的30%,60%这样的输出需要修改那个参数,如何计算而来?
非常感谢您的回复和指导!谢谢。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2024-5-10 16:29:00 | 显示全部楼层
频率控制可以参考规格书计算公式:
截图202405101626352567.jpg
百分比输出通过周期、占空比设置修改。
例如周期(PWMA_ARR)设置100,占空比(PWMA_CCR4)设置50,那么输出信号占空比就是50%。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-8 02:10 , Processed in 0.124739 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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