找回密码
 立即注册
查看: 150|回复: 8

8H1K08-TSSOP20 使用P11输出的高级PWM 设置是否正确

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-4-7 11:53:31 | 显示全部楼层 |阅读模式
  1. void PWM_init()
  2. {
  3.     P_SW2 = 0x80;
  4.                 PWMA_PS=0x00;                        //高级 PWM 通道输出脚选择位
  5.     PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
  6.     PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式
  7.     PWMA_CCER1 = 0x01;                          //使能CC1通道
  8.     PWMA_CCR1 = 5;                            //设置占空比时间
  9.     PWMA_ARR = 60000;                             //设置周期时间
  10.     PWMA_ENO = 0x02;  
  11.     PWMA_BKR = 0x80;                            //使能主输出
  12.     PWMA_CR1|=0x01;                          //开始计时
  13. }
复制代码
8H1K08-TSSOP20  使用P11输出 的高级PWM 上面面的程序是否正确?实际下载现象不对?帮忙看下类似的程序再别的IO已经成功了,不知道哪个寄存器没设置好

回复

使用道具 举报 送花

3

主题

722

回帖

155

积分

等待验证会员

积分
155
发表于 2025-4-7 11:58:00 | 显示全部楼层
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据您提供的代码,以下是对其正确性的分析及可能的改进建议。

1. 寄存器配置分析

1.1 PSW2寄存器
  1. c
  2. PSW2 = 0x80;
复制代码
该行代码将PSW2寄存器的最高位设置为1,通常用于使能对特殊功能寄存器的访问。这一设置是正确的。

1.2 PWMAPS寄存器
  1. c
  2. PWMAPS = 0x00;
复制代码
PWMAPS寄存器用于选择高级PWM通道的输出引脚。设置为0x00表示选择默认的PWM输出引脚。如果P11是默认的PWM输出引脚,则此设置正确。否则,需要根据具体引脚映射进行修改。

1.3 PWMACCER1寄存器
  1. c
  2. PWMACCER1 = 0x00;
复制代码
该行代码将PWMACCER1寄存器清零,关闭所有通道。这是为了在配置CCMR1寄存器之前确保通道处于关闭状态,这是正确的做法。

1.4 PWMACCMR1寄存器
  1. c
  2. PWMACCMR1 = 0x60;
复制代码
PWMACCMR1寄存器用于配置通道1的模式。0x60表示将通道1配置为PWM模式1,这是正确的设置。

1.5 PWMACCER1寄存器
  1. c
  2. PWMACCER1 = 0x01;
复制代码
该行代码使能通道1,这是正确的。

1.6 PWMACCR1寄存器
  1. c
  2. PWMACCR1 = 5;
复制代码
PWMACCR1寄存器用于设置通道1的占空比。设置为5表示占空比为5/ARR,这是合理的设置,但具体值应根据实际需求调整。

1.7 PWMAARR寄存器
  1. c
  2. PWMAARR = 60000;
复制代码
PWMAARR寄存器用于设置PWM的周期。设置为60000表示周期为60000个时钟周期,这是合理的设置,但具体值应根据实际需求调整。

1.8 PWMAENO寄存器
  1. c
  2. PWMAENO = 0x02;
复制代码
PWMAENO寄存器用于使能PWM输出。0x02表示使能通道1的输出,这是正确的。

1.9 PWMABKR寄存器
  1. c
  2. PWMABKR = 0x80;
复制代码
PWMABKR寄存器用于使能主输出。0x80表示使能主输出,这是正确的。

1.10 PWMACR1寄存器
  1. c
  2. PWMACR1 |= 0x01;
复制代码
该行代码使能PWM计数器,开始计时,这是正确的。

2. 可能的问题及改进建议

2.1 引脚映射
确保P11引脚被正确映射为PWM输出引脚。如果P11不是默认的PWM输出引脚,需要修改PWMAPS寄存器的值。

2.2 时钟配置
确保系统时钟和PWM时钟配置正确。如果时钟配置不正确,PWM输出可能无法正常工作。

2.3 占空比和周期
根据实际需求调整PWMACCR1和PWMAARR寄存器的值,以确保PWM输出的占空比和周期符合预期。

2.4 调试建议
使用调试工具(如逻辑分析仪或示波器)检查P11引脚的输出波形,以确认PWM信号是否正确生成。

3. 示例代码改进
以下是一个改进后的示例代码,假设P11是默认的PWM输出引脚:
  1. c
  2. void PWMinit() {
  3.     PSW2 = 0x80;  // 使能对特殊功能寄存器的访问
  4.     PWMAPS = 0x00;  // 选择默认的PWM输出引脚
  5.     PWMACCER1 = 0x00;  // 关闭通道1
  6.     PWMACCMR1 = 0x60;  // 设置通道1为PWM模式1
  7.     PWMACCER1 = 0x01;  // 使能通道1
  8.     PWMACCR1 = 5;  // 设置占空比
  9.     PWMAARR = 60000;  // 设置周期
  10.     PWMAENO = 0x02;  // 使能通道1输出
  11.     PWMABKR = 0x80;  // 使能主输出
  12.     PWMACR1 |= 0x01;  // 开始计时
  13. }
复制代码

4. 结论
您提供的代码在大多数情况下是正确的,但需要确保引脚映射、时钟配置以及占空比和周期的设置符合实际需求。通过上述改进建议和调试步骤,您应该能够解决PWM输出不正确的问题。如果问题仍然存在,建议进一步检查硬件连接和系统时钟配置。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-4-7 12:42:37 | 显示全部楼层
  1.         PWMA_PS=0x00;                //选择 PWM1_1 通道
  2.         
  3.         PWMA_CCER1 = 0x00;        //写 CCMRx 前必须先清零 CCxE 关闭通道
  4.         PWMA_CCMR1 = 0x60;        //通道模式配置
  5.         PWMA_CCER1 = 0x04;        //配置通道输出使能和极性
  6.         
  7.         PWMA_ARRH=(unsigned char)(24000>>8); //设置周期时间
  8.         PWMA_ARRL=(unsigned char)24000;
  9.         
  10.         PWMA_ENO=0x00;
  11.         PWMA_ENO|=0x02;                //使能输出PWM1N
  12.         
  13.         PWMA_BKR=0x80;                //使能主输出
  14.         PWMA_CR1|=0x01;                //开始计时
复制代码
以上是初始化顺序

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-4-7 16:57:49 | 显示全部楼层
国芯人*** 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...

我对了几遍好像 你发的和我写的一样,但是实际就是没有输出。我之前在别的引脚可以使用,PWMA_CCER1设置是否正确,P11是PWM1N的  
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-4-7 17:05:29 | 显示全部楼层
Debu*** 发表于 2025-4-7 12:42
以上是初始化顺序

PWMA_CCER1 = 0x04;        //配置通道输出使能和极性
这句修改了是可以了,但是我还是不是很明白这个寄存器是这么设置的
CC1NP  CC1NE  CC1P  CC1E什么区别,规格书还是不太明白,方便用白话给我讲解一下吗
截图202504071705035688.jpg

点评

E是Enable,P是Polar 带N的是N,不带N的是P 使用的通道必须Enable,相位不对改Polar 你要用的是1N,所以1NE必须设置为1  详情 回复 发表于 2025-4-8 01:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-4-7 17:06:50 | 显示全部楼层
国芯人*** 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...

谢谢您每行的解析,那么多字,码字辛苦了。
问题的原因在PWMA_CCER1 = 0x04;   这个寄存器错了  P11是0x04
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-4-8 01:00:05 | 显示全部楼层
iyxe*** 发表于 2025-4-7 17:05
PWMA_CCER1 = 0x04;        //配置通道输出使能和极性
这句修改了是可以了,但是我还是不是很明白这个寄 ...

E是Enable,P是Polar
带N的是N,不带N的是P
使用的通道必须Enable,相位不对改Polar
你要用的是1N,所以1NE必须设置为1

点评

感谢  发表于 2025-4-8 09:24
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 13:01 , Processed in 0.239798 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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