找回密码
 立即注册
查看: 40|回复: 5

8H1K08 PWM3P配置完 无法输出PWM

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

3

主题

6

回帖

53

积分

注册会员

积分
53
发表于 5 天前 | 显示全部楼层 |阅读模式
这是代码   引脚在主函数已经配置为推挽了

void pwmInit()// PWM初始设置 约20khz的开关频率
{
    P_SW2 |= 0x80;
   
PWMA_CCER2=0X00;//写CCMR前先关闭通道功能
PWMA_CCMR3=0x60;   //设置PWMA输出模式1
PWMA_CCER2=0X02; //选择通道PWM3P
PWMA_PSCR=11;   //分频+1
PWMA_CCR3=0;   //占空比
PWMA_ARR=100;   //周期
PWMA_ENO=0X10;  //使能PWM3P输出

PWMA_BKR=0X80;  //使能主输出
// PWMA_PS&=0Xcf;
PWMA_CR1=0X01;//边沿对齐模式   开始计数

   
}
void pwm(unsigned char p)
{
    EA = 0;//禁止中断
if (p==100)
{
PWMA_ENO&=~0x10;//禁止端口输出直接操控引脚电平状态
P14 = 0;
}
if (p==0)
{
    PWMA_ENO&=~0x10;
    P14 = 1;
}
if (p<100 && p>0)
{
    PWMA_ENO=0X10;  //使能PWM3P输出
    PWMA_CCR3=100-p;   //反转占空比
}

EA = 1;//开中断


}


回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 5 天前 | 显示全部楼层
根据您提供的代码和描述,STC8H1K08 的 PWM3P 无法输出 PWM 信号,可能存在以下几个方面的问题:

一、引脚配置问题

虽然您提到“引脚在主函数已经配置为推挽”,但需确认是否正确配置了 PWM3P 对应的引脚。STC8H1K08 的 PWM3P 对应的是 P1.5 引脚(具体请参考数据手册)。请检查是否在初始化前对该引脚进行了如下配置:
  1. c
  2. P1M1 &= ~0x20;   // 设置 P1.5 为推挽输出
  3. P1M2 &= ~0x20;
复制代码

若未进行此配置,即使 PWM 模块已开启,也无法输出 PWM 信号。

二、PWM 模块使能问题

在 STM32 或类似单片机中,通常需要在配置完寄存器后开启 PWM 模块。但 STC8H 系列的 PWM 控制逻辑略有不同,需确认是否在配置完成后开启了 PWM 功能。

建议在 pwmInit() 函数末尾添加以下代码以确保 PWM 模块被启用:
  1. c
  2. PWMAEN = 1;     // 启用 PWM 模块
复制代码

三、PWM 寄存器配置顺序问题

在配置 PWM 模块时,寄存器的写入顺序非常重要。例如,在设置 PWMACCMR3 和 PWMACCER2 之前,应确保 PWMACCER2 被置为 0 以关闭通道功能,避免冲突。

您的代码中已经做了这一点,但仍需注意以下几点:
PWMACCMR3 配置为 0x60 表示设置为 PWM 模式 1(高电平有效),这是正确的。
PWMACCER2 设置为 0x02 表示选择 PWM3P 通道,该值是正确的。
PWMAPSCR 设置为 11 表示分频系数为 12(因为分频值 +1),即系统时钟除以 12,计算频率时需考虑这一点。

四、占空比配置问题

PWMACCR3 设置为 0 表示占空比为 0%,此时 PWM 输出将始终为低电平。建议先尝试设置一个非零值,如 PWMACCR3 = 100;,以验证 PWM 是否正常输出。

五、系统时钟配置问题

PWM 输出频率由系统时钟和分频系数决定。若您使用的是内部 RC 振荡器,其频率可能不稳定,导致 PWM 输出异常。建议通过 CLKSW 或 CLKPLL 配置稳定时钟源,并确保系统时钟频率符合预期。

六、代码结构建议

建议对 pwmInit() 函数进行优化,确保所有配置步骤清晰可读,例如:
  1. c
  2. void pwmInit()  // PWM 初始设置 约20kHz的开关频率
  3. {
  4.     PSW2 |= 0x80;        // 打开 PWM 模块时钟
  5.     PWMACCER2 = 0x00;    // 关闭通道功能
  6.     PWMACCMR3 = 0x60;    // 设置 PWM 模式1(高电平有效)
  7.     PWMACCER2 = 0x02;    // 选择 PWM3P 通道
  8.     PWMAPSCR = 11;       // 分频+1(12分频)
  9.     PWMACCR3 = 100;      // 占空比设为 100(根据实际需求调整)
  10.     PWMAEN = 1;          // 启用 PWM 模块
  11. }
复制代码

七、调试建议

1. 使用示波器或逻辑分析仪检测 P1.5 引脚是否有 PWM 信号输出。
2. 检查 PWMACCR3 是否成功更新。
3. 查看是否启用了 PWM 模块(PWMAEN = 1)。
4. 确保没有其他模块占用该引脚(如 UART、ADC 等)。

综上所述,PWM3P 无法输出 PWM 可能由引脚未配置为推挽、PWM 模块未启用、占空比设置为 0、寄存器配置顺序不当等原因引起。建议按照上述步骤逐一排查,并参考 STC8H1K08 数据手册中的 PWM 模块章节进行详细核对。

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 5 天前 | 显示全部楼层
能否贴出完整代码?
回复

使用道具 举报 送花

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

3

主题

6

回帖

53

积分

注册会员

积分
53
发表于 5 天前 | 显示全部楼层
梁*** 发表于 2025-8-19 14:52
能否贴出完整代码?

完整代码是指整个项目?  整个项目有点大      关于PWM部分这个就是pwm的全部代码   我按照手册配置PWM4P_2能正常输出PWM     然后我自己按照手册配置PWM3P无法输出PWM

点评

那就去下载官方例子: STC8H系列-高级PWM范例程序下载,2024/1/3 更新 https://www.stcaimcu.com/thread-1779-1-1.html (出处: 国芯人工智能技术交流网站)  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 5 天前 | 显示全部楼层
虚*** 发表于 2025-8-19 15:02
完整代码是指整个项目?  整个项目有点大      关于PWM部分这个就是pwm的全部代码   我按照手册配置PWM4P ...

那就去下载官方例子:
STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/thread-1779-1-1.html
(出处: 国芯人工智能技术交流网站)
回复

使用道具 举报 送花

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

3

主题

6

回帖

53

积分

注册会员

积分
53
发表于 4 天前 | 显示全部楼层
梁*** 发表于 2025-8-19 17:24
那就去下载官方例子:
STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/thread- ...

感谢你的分享   我平常参考的例子是直接从烧录软件上参考的   不知论坛上有这么详细的例子  参考了官方例程我详细对比我的代码 以及官方寄存器手册 最后发现我代码的原因是出错在通道使能这块  PWM3P是最低位  而我设置的是第二位 一瞬间脑子没转过弯来
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 05:48 , Processed in 0.135992 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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