找回密码
 立即注册
查看: 53|回复: 4

PWM寄存器配制问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-07-15 15:02:39
已绑定手机

3

主题

4

回帖

41

积分

新手上路

积分
41
发表于 2026-7-9 10:22:04 | 显示全部楼层 |阅读模式
    PWMA_RCR = rep;    //重复计数寄存器,计数 rep 个脉冲后产生更新事件
    PWMA_CR1 |= 0x89;  //使能ARR预装载,单脉冲模式,开始计时
        //WritePWMA((char)&PWMA_CR1, 0x89);
        //WritePWMA((char)&PWMA_RCR, rep);
直接赋值给寄存器PWM不工作,需要WritePWMA((char)&PWMA_CR1, 0x89);WritePWMA((char)&PWMA_RCR, rep);


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-9 12:11:18 | 显示全部楼层
截图202607091211024947.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-9 12:11:45 | 显示全部楼层

您好,感谢您分享这个链接。我已经查看了该帖子的内容。

问题分析

帖子中描述的现象是:直接对 PWMA 相关寄存器(如 PWMA_RCRPWMA_CR1)进行赋值操作时,PWM 不工作;而通过 WritePWMA() 函数写入时则正常工作。

根本原因

这是 STC 单片机中 高级 PWM(PWMA)寄存器位于扩展 RAM 区域(XFR) 所导致的典型问题。

在 STC 的 8 位单片机(如 STC8H、STC8G、STC8A8K64D4 等系列)中,高级 PWM 的寄存器(如 PWMA_CR1PWMA_RCRPWMA_CCR1 等)属于 扩展特殊功能寄存器(XFR),地址范围在 0xFE000xFEFF0xFF000xFFFF 区域。要访问这些寄存器,必须先使能扩展 RAM 访问权限

正确的做法

在使用 PWMA_CR1PWMA_RCR 等寄存器符号之前,必须先执行:

P_SW2 |= 0x80;   // 使能访问 XFR(扩展特殊功能寄存器)

如果没有执行这一句,直接写 PWMA_RCR = rep; 这样的语句,编译器实际上操作的是 SFR 映射区中相同地址的普通寄存器,而不是高级 PWM 的 XFR 寄存器,因此 PWM 不会工作。

为什么 WritePWMA() 可以工作?

WritePWMA() 函数内部通常已经封装了通过指针访问 XFR 区域的逻辑(例如使用 volatile 指针指向 XFR 地址并写入),或者函数内部已经包含了 P_SW2 |= 0x80; 的操作,因此能够正确写入。

解决方案

请在初始化 PWM 的代码开头添加:

P_SW2 |= 0x80;   // 使能访问 XFR 扩展特殊功能寄存器

然后就可以直接使用 PWMA_RCR = rep;PWMA_CR1 |= 0x89; 等直接赋值方式了。

完整示例框架

void PWMA_Init(void)
{
    P_SW2 |= 0x80;          // 使能访问 XFR

    // 以下直接赋值即可正常工作
    PWMA_CR1 = 0x00;        // 先清零控制寄存器1
    PWMA_CR2 = 0x00;        // 先清零控制寄存器2
  
    // ... 配置其他 PWM 寄存器 ...
    PWMA_RCR = rep;         // 重复计数寄存器
    PWMA_CR1 |= 0x89;       // 使能ARR预装载,单脉冲模式,开始计时
}

总结

问题 原因 解决
直接赋值 PWMA_RCR = rep; 不工作 未使能 XFR 访问权限 在初始化开头加 P_SW2 |= 0x80;
WritePWMA() 函数可以工作 函数内部已处理 XFR 访问 也可继续使用该函数

如果您能告诉我您具体使用的是哪个型号的 STC 单片机(如 STC8H8K64U、STC8G2K64S4 等),我可以帮您进一步确认 PWM 寄存器的具体配置细节。


🔍 搜索 "https://www.stcaimcu.com/thread-24813-1-1.html"

⏱️ 查找用时 3.0s | 总回答用时 12.8s

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-07-15 15:02:39
已绑定手机

3

主题

4

回帖

41

积分

新手上路

积分
41
发表于 2026-7-9 15:11:48 | 显示全部楼层
        EAXFR = 1; //使能访问 XFR
        CKCON = 0x00;//设置外部数据总线速度为最快
        WTST = 0x00;
        P_SW2 |= 0x80;                //SFR enable  
已经加了这条语句了
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-07-15 15:02:39
已绑定手机

3

主题

4

回帖

41

积分

新手上路

积分
41
发表于 2026-7-9 15:12:08 | 显示全部楼层
但还是无效
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-22 10:32 , Processed in 0.071275 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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