找回密码
 立即注册
查看: 238|回复: 15

8g2k64s4 增强型PWM上电初始化正常,程序中初始化无PWM输出 | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-28 09:57:20
已绑定手机

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 2025-8-26 13:50:05 | 显示全部楼层 |阅读模式
下面是初始化代码:
使用的是P1.3-P1.6四个IO:

        EAXSFR();        
//        PWM1FDCR = 0; //clear fault REG
//        P1M0 = 0x00;
//  P1M1 |= 0x78;
        PWMSET = 0x02;  //EN PWM1
        PWM13T1H = 0;                                                                // P1.3 out 0
        PWM13T1L = 0;                                                        
        PWM13T2H = 0;                        
        PWM13T2L = 0;
        
        PWM14T2H = 0;                                                                // P1.4 out 1
        PWM14T2L = 0;        
        PWM14T1H = (PID.PWM_Value-1)/256 ;        
        PWM14T1L = (PID.PWM_Value-1)%256;                                
        
        PWM13CR= 0x84;                        //PWM13 default 1
        PWM14CR= 0x80;                        //PWM14 default 0
        
        PWM15T1H = 0;                                                                // P1.5 out 0
        PWM15T1L = 0;                                                        
        PWM15T2H = 0;                        
        PWM15T2L = 0;
        
        PWM16T2H = 0;                                                                // P1.6 out 1
        PWM16T2L = 0;        
        PWM16T1H = (PID.PWM_Value-1)/256 ;        
        PWM16T1L = (PID.PWM_Value-1)%256;        
        
        PWM1CH = (PID.PWM_Value-1) / 256;                                // PWM1
        PWM1CL = (PID.PWM_Value-1) % 256;                                //

        PWM1CKS = 0x00;                                                        // PWM1 source system  F/1/PWM1 = 40k
        PWM15CR= 0x84;                        //PWM13 default 1
        PWM16CR= 0x80;                        //PWM14 default 0        
        
        PWMCFG01 |=  0x50;        //EN PWM1 IT  //当我把该行设置PWMCFG01 |=  0x40;暂时不开启计数,后面通过串口使能,那么PWM输出异常



有没有大佬能帮忙看看,使能和中断函数在附件图片。






截图202508261346569866.jpg

中断部分代码

中断部分代码
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-28 09:57:20
已绑定手机

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 6 天前 | 显示全部楼层
已经确认到问题点了,程序中有个数组,指到了溢出位置,
可能导致地址访问异常,修改掉后可以正常使能失能。

和初始化寄存器配置没有关联,但是怎么导致PWM出问题的不清楚。
感谢大家。
回复

使用道具 举报 送花

3

主题

2001

回帖

850

积分

等待验证会员

积分
850
发表于 2025-8-26 13:53:00 | 显示全部楼层
根据您提供的初始化代码及描述,STC8G2K64S4 的增强型 PWM 在上电后初始化正常,但在程序中未输出 PWM 信号。以下是对该问题的分析与建议:

首先,检查 PWM 模块使能配置是否正确。代码中设置了 PWMSET = 0x02;,该寄存器用于启用 PWM1 模块,但需确认该值是否符合芯片手册中对 PWMSET 寄存器的定义。若配置不正确,可能导致 PWM 模块未被激活。

其次,检查 P1 端口的模式配置。代码中注释掉的 P1M0 = 0x00; 和 P1M1 |= 0x78; 表示将 P13-P16 设置为推挽输出模式。若这些配置未被正确执行,可能导致 IO 引脚未被配置为 PWM 输出功能,从而无法输出信号。

接下来,检查 PWM 各个寄存器的配置是否合理。例如,PWM13CR 和 PWM14CR 用于设置 PWM13 和 PWM14 的输出极性及模式,应确保其配置符合预期。此外,PWM1CH 和 PWM1CL 用于设置 PWM1 的周期,需确认其值是否在有效范围内,并且与 PIDPWMValue 的计算逻辑一致。

最后,建议在初始化完成后添加延时函数,以确保所有寄存器配置已生效。同时,可使用示波器或逻辑分析仪检测目标引脚的信号,以进一步排查问题所在。

综上所述,建议逐一检查 PWM 模块使能、IO 配置、寄存器设置及信号输出,以确定具体原因并进行相应调整。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-28 09:57:20
已绑定手机

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 2025-8-26 14:05:36 | 显示全部楼层
1.设置普通IO,和推挽模式,都不影响PWM的输出。
2.这些没法解释为什么上电初始化正常,但是通过串口使能之后,PWM就没输出了。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:171
  • 最近打卡:2025-09-03 08:32:47

777

主题

1万

回帖

1万

积分

管理员

积分
18937
发表于 2025-8-26 14:42:36 | 显示全部楼层

在这个程序的基础上修改
截图202508261442126139.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-28 09:57:20
已绑定手机

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 2025-8-26 15:29:38 | 显示全部楼层
就是参考这个写的。

如果PWM1中断标志位不清除,会不会有影响?

点评

这里在操作了PWMCFG01后才打开的XFR操作使能 建议程序中不要使用EAXRAM(); 打开一次后就不要关闭了,EAXRAM是给外扩RAM时,与XFR冲突的时候用的,正常使用情况一直打开就行了 不然XFR部分没法操作  详情 回复 发表于 2025-8-26 16:40
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:506
  • 最近打卡:2025-09-03 10:26:55
已绑定手机

45

主题

2195

回帖

7668

积分

论坛元老

积分
7668
发表于 2025-8-26 15:32:55 | 显示全部楼层
扩展寄存器访问使能“EAXSFR”开启后就不要再关闭“EAXRAM”了。
把所有关闭扩展寄存器访问使能的“EAXRAM”都删掉。
“EAXSFR”在程序初始化前开启一次就可以,之后也不需要再启动。
排查程序其他地方是否有操作“P_SW2”寄存器时误关闭扩展寄存器访问使能。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-28 09:57:20
已绑定手机

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 2025-8-26 15:44:23 | 显示全部楼层
好的,访问16位地址才需要开启EAXSFR对吧
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:168
  • 最近打卡:2025-09-02 10:14:23

76

主题

6682

回帖

1万

积分

超级版主

积分
14003
发表于 2025-8-26 15:54:40 | 显示全部楼层
请下载测试“01-45路15位增强型PWM-非中断更新PWM-C语言”
增强型15位PWM相关程序-STC8G2K64S2-S4系列.rar (402.22 KB, 下载次数: 15)

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:558
  • 最近打卡:2025-09-03 10:28:30
已绑定手机
已实名认证

116

主题

2748

回帖

6932

积分

版主

积分
6932
发表于 2025-8-26 16:40:25 | 显示全部楼层
137679*** 发表于 2025-8-26 15:29
就是参考这个写的。

如果PWM1中断标志位不清除,会不会有影响?



这里在操作了PWMCFG01后才打开的XFR操作使能
建议程序中不要使用EAXRAM();
打开一次后就不要关闭了,EAXRAM是给外扩RAM时,与XFR冲突的时候用的,正常使用情况一直打开就行了
不然XFR部分没法操作

点评

中断标志位不清0,就会重复进入中断,CPU被拖死。  详情 回复 发表于 2025-8-26 16:50
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:168
  • 最近打卡:2025-09-02 10:14:23

76

主题

6682

回帖

1万

积分

超级版主

积分
14003
发表于 2025-8-26 16:50:15 | 显示全部楼层
王*** 发表于 2025-8-26 16:40
这里在操作了PWMCFG01后才打开的XFR操作使能
建议程序中不要使用EAXRAM();
打开一次后就不要关闭了,EA ...

P_SW2可以不用保存和恢复,中断里可以去掉P_SW2的操作。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-3 11:07 , Processed in 0.165584 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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