iyxectrx 发表于 2025-4-7 11:53:31

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

void PWM_init()
{
    P_SW2 = 0x80;
                PWMA_PS=0x00;                        //高级 PWM 通道输出脚选择位
    PWMA_CCER1 = 0x00;                        //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR1 = 0x60;                        //设置CC1为PWMA输出模式
    PWMA_CCER1 = 0x01;                        //使能CC1通道
    PWMA_CCR1 = 5;                            //设置占空比时间
    PWMA_ARR = 60000;                           //设置周期时间
    PWMA_ENO = 0x02;
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1|=0x01;                        //开始计时
}8H1K08-TSSOP20使用P11输出 的高级PWM 上面面的程序是否正确?实际下载现象不对?帮忙看下类似的程序再别的IO已经成功了,不知道哪个寄存器没设置好

国芯人工智能 发表于 2025-4-7 11:58:00

在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据您提供的代码,以下是对其正确性的分析及可能的改进建议。

1. 寄存器配置分析

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

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

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

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

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

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

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

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

1.9 PWMABKR寄存器
c
PWMABKR = 0x80;
PWMABKR寄存器用于使能主输出。0x80表示使能主输出,这是正确的。

1.10 PWMACR1寄存器
c
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输出引脚:

c
void PWMinit() {
    PSW2 = 0x80;// 使能对特殊功能寄存器的访问
    PWMAPS = 0x00;// 选择默认的PWM输出引脚
    PWMACCER1 = 0x00;// 关闭通道1
    PWMACCMR1 = 0x60;// 设置通道1为PWM模式1
    PWMACCER1 = 0x01;// 使能通道1
    PWMACCR1 = 5;// 设置占空比
    PWMAARR = 60000;// 设置周期
    PWMAENO = 0x02;// 使能通道1输出
    PWMABKR = 0x80;// 使能主输出
    PWMACR1 |= 0x01;// 开始计时
}

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

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

DebugLab 发表于 2025-4-7 12:42:37

      PWMA_PS=0x00;                //选择 PWM1_1 通道
      
      PWMA_CCER1 = 0x00;      //写 CCMRx 前必须先清零 CCxE 关闭通道
      PWMA_CCMR1 = 0x60;      //通道模式配置
      PWMA_CCER1 = 0x04;      //配置通道输出使能和极性
      
      PWMA_ARRH=(unsigned char)(24000>>8); //设置周期时间
      PWMA_ARRL=(unsigned char)24000;
      
      PWMA_ENO=0x00;
      PWMA_ENO|=0x02;                //使能输出PWM1N
      
      PWMA_BKR=0x80;                //使能主输出
      PWMA_CR1|=0x01;                //开始计时以上是初始化顺序

iyxectrx 发表于 2025-4-7 16:57:49

国芯人工智能 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...

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

iyxectrx 发表于 2025-4-7 17:05:29

DebugLab 发表于 2025-4-7 12:42
以上是初始化顺序

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

iyxectrx 发表于 2025-4-7 17:06:50

国芯人工智能 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...

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

DebugLab 发表于 2025-4-8 01:00:05

iyxectrx 发表于 2025-4-7 17:05
PWMA_CCER1 = 0x04;      //配置通道输出使能和极性
这句修改了是可以了,但是我还是不是很明白这个寄 ...

E是Enable,P是Polar
带N的是N,不带N的是P
使用的通道必须Enable,相位不对改Polar
你要用的是1N,所以1NE必须设置为1
页: [1]
查看完整版本: 8H1K08-TSSOP20 使用P11输出的高级PWM 设置是否正确