找回密码
 立即注册
查看: 1588|回复: 6

【已解决】PCA模块关闭后电平如何控制

[复制链接]
已绑定手机

14

主题

154

回帖

257

积分

中级会员

积分
257
发表于 2023-7-11 16:49:10 | 显示全部楼层 |阅读模式
本帖最后由 一笔长空 于 2023-7-15 16:33 编辑

现在启用了PCA模块的PWM功能,使用CR=0;代码进行关闭,现在关闭后仅仅是没了脉冲,但io口的电平完全是随机的,这次停止后是高,下次有可能是低,不可控。在CR=0后面加了P26=0也不行有时还是会高电平。来请教各位老师如何解决。自己想的是在停止前先设置占空比为0然后停止,下次启动时再重新赋值占空比,感觉这样有些麻烦,有没有简单的办法
回复

使用道具 举报 送花

已绑定手机

51

主题

2750

回帖

9613

积分

论坛元老

积分
9613
发表于 2023-7-11 19:05:06 | 显示全部楼层


规格书里有介绍PCA PWM模式如何固定输出高低电平:
1.png

回复

使用道具 举报 送花

已绑定手机

14

主题

154

回帖

257

积分

中级会员

积分
257
 楼主| 发表于 2023-7-11 23:03:52 | 显示全部楼层
乘风*** 发表于 2023-7-11 19:05
规格书里有介绍PCA PWM模式如何固定输出高低电平:

非常感谢您,成功了,现在是停止时给CCAPnH赋值0XFF使之持续为低电平,开启时给CCAPnH再赋初值调整占空比,除CCAPnH之外的都不管,原理这样对不对
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2023-7-13 15:55:21 | 显示全部楼层
PCA-PWM连续输出0或1的方法,以PCA0(PWM0-CCP0)为例:
PCA_PWM0 &= ~0x02;        // PWM0正常输出
PCA_PWM0 |= 0x3f, CCAP0H = 0xff, CCAP0L = 0xff;        // PWM0一直输出0
PCA_PWM0 &= 0xc0, CCAP0H = 0,    CCAP0L = 0;        // PWM0一直输出1

也可以直接关闭这一路PCA,关闭后就是一个普通IO,直接输出高低电平即可。

你执行使用CR=0; 并没有关闭PCA,只是让计数器停止,则所有PCA输出就凝固,保持高电平或低电平输出。
回复

使用道具 举报 送花

0

主题

1

回帖

10

积分

新手上路

积分
10
发表于 2026-10-18 12:02:29 | 显示全部楼层
也遇到这个问题,我的比较麻烦,设为输出固定电平后要立刻进入掉电模式,改PCA_PWM CCAPH 这些都不行了,因为引脚是受硬件控制,需要时钟才会更新输出,所以生效一定要经过若干时钟周期后才可以,最后发现办法是改变PCA模块功能,离开PWM模式,恢复为普通IO,修改电平,才是可以立刻生效的,下次使用恢复PWM模式就可以了。

       
                //关闭PCA模块2 PWM功能
                CCAPM2 = 0;
                //设置IO电平
                LED    = 0;




                //恢复PCA模块2 PWM功能
                CCAPM2 = PCA_Mode_PWM;       


回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-10-18 14:17:33 | 显示全部楼层
截图202610181417302683.jpg
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-10-18 14:17:52 | 显示全部楼层

已按 STC8G2K64S4 的手册核对完毕。结论如下:

一、STC8G2K64S4 确实支持 PCA

在《PCA/CCP/PWM应用》章节开头的功能支持表中,STC8G2K64S4 系列 PCA 一栏为 ●(支持)。三个 PCA 模块(PCA0、PCA1、PCA2)都可用。

二、PCA-PWM 固定输出高/低电平的官方写法

手册中明确给出了这一条,原文是:

当 PCA_PWMn &= 0xC0,CCAPnH = 0x00 时,PWM 固定输出高电平
当 PCA_PWMn |= 0x3F,CCAPnH = 0xFF 时,PWM 固定输出低电平

原理也对得上:PCA_PWMn 的 B7、B6 是 EBSn[1:0](PWM 位数控制),B5~B0 依次是 XCCAPnH[1:0]、XCCAPnL[1:0]、EPCnH、EPCnL。

  • &= 0xC0 保留 B7:B6(EBSn),把 B5~B0 全部清 0,即 EPCnH=0;
  • |= 0x3F 保留 B7:B6,把 B5~B0 全部置 1,即 EPCnH=1。

再配合 CCAPnH 取值。手册在 8 位/7 位/6 位 PWM 的小节里分别列出了对应关系:

PWM 模式 固定输出高 固定输出低
8 位 EPCnH=0 且 CCAPnH=00H EPCnH=1 且 CCAPnH=FFH
7 位 EPCnH=0 且 CCAPnH=00H EPCnH=1 且 CCAPnH=FFH
6 位 EPCnH=0 且 CCAPnH=00H EPCnH=1 且 CCAPnH=FFH
10 位 EPCnH=0、XCCAPnH=0 且 CCAPnH=00H EPCnH=1、XCCAPnH=3 且 CCAPnH=FFH

注意 10 位模式下要多管一个 XCCAPnH[1:0];而 PCA_PWMn &= 0xC0 / |= 0x3F 这种整体写法,正好把 XCCAPnH 和 EPCnH 一起处理掉了,所以四种模式都能用。

三、针对你原帖场景(P26 停止后电平乱跳)的可用代码

以 PCA2 / PWM2 / CCP2 为例(CCP_S[1:0]=10 时 CCP2 在 P2.7,=00 或 01 时同为 P3.7;你帖子里写的是 P26,请确认你实际用的是哪一路):

#include "STC8G.h"

void PCA_PWM2_StopLow(void)        /* PWM2 停止后固定输出低电平 */
{
    PCA_PWM2 |= 0x3F;              /* 保留EBS2[1:0],EPCnH=1及XCCAPnH=3 */
    CCAP2H = 0xFF;                 /* 重载值给满,PWM固定输出低 */
    CCAP2L = 0xFF;                 /* 比较值同步给满 */
}

void PCA_PWM2_StopHigh(void)       /* PWM2 停止后固定输出高电平 */
{
    PCA_PWM2 &= 0xC0;              /* 保留EBS2[1:0],EPCnH=0及XCCAPnH=0 */
    CCAP2H = 0x00;                 /* 重载值给0,PWM固定输出高 */
    CCAP2L = 0x00;                 /* 比较值同步给0 */
}

关键点: 不要在 CR=0 之后去写 P26=0。此时引脚仍归 PCA 硬件控制,写端口锁存不一定反映到引脚,这就是你"加了 P26=0 有时还是高"的原因。

另外要注意 CR=0 的真实含义:它只是让 PCA 计数器停止计数,输出会"凝固"在停止那一瞬间的比较结果上,所以高低不确定。如果一定要"设成固定电平后立刻生效(比如马上进掉电模式)",更稳妥的是退出 PWM 模式回归普通 I/O:

CCAPM2 = 0x00;                     /* 清 CCAPM2,PCA模块2 退出PWM模式,引脚回归普通I/O */
P26 = 0;                           /* 此时写端口锁存才真正作用于引脚 */

四、需要你确认的一点

帖子里提到的是 P26,但 STC8G2K64S4 按《PCA功能脚切换》表,CCP_S[1:0]=10 时 CCP1 对应 P2.6、CCP2 对应 P2.7。所以:

  • 如果 P2.6 是 PWM 输出,那用的是 PCA1,寄存器应换成 PCA_PWM1 / CCAP1H / CCAP1L / CCAPM1;
  • 如果实际是 PCA2,引脚应是 P2.7。

请确认你实际用的是哪一路 PCA 和哪个引脚,我可以把代码按你的确切配置改好。

信息来源:STC8G 系列手册《PCA/CCP/PWM应用》章节(功能支持表、PWM 脉宽调制模式及频率计算公式、PCA功能脚切换、PCA模块PWM模式控制寄存器 PCA_PWMn)。


🔍 搜索 "STC8G2K64S4 PCA STC8G 单片机"

📌 相关论坛讨论

  1. 舞台灯光优先选择 STC8G2K64S4,45组15位增强型PWM
  2. STC8G2K64S4 有45路PWM, 参考步进电机代码
  3. stc8g2k64s4 io口

⏱️ 查找用时 3.3s | 总回答用时 9.4s

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-8 02:09 , Processed in 0.077817 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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