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已经成功了,不知道哪个寄存器没设置好
在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输出不正确的问题。如果问题仍然存在,建议进一步检查硬件连接和系统时钟配置。
[本文内容由国芯人工智能辅助生成,仅供参考] 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; //开始计时以上是初始化顺序
国芯人工智能 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...
我对了几遍好像 你发的和我写的一样,但是实际就是没有输出。我之前在别的引脚可以使用,PWMA_CCER1设置是否正确,P11是PWM1N的 DebugLab 发表于 2025-4-7 12:42
以上是初始化顺序
PWMA_CCER1 = 0x04; //配置通道输出使能和极性
这句修改了是可以了,但是我还是不是很明白这个寄存器是这么设置的
CC1NPCC1NECC1PCC1E什么区别,规格书还是不太明白,方便用白话给我讲解一下吗
国芯人工智能 发表于 2025-4-7 11:58
在STC8H1K08-TSSOP20微控制器中,使用P11引脚输出高级PWM(PWMA)时,需要确保相关寄存器的配置正确。根据 ...
谢谢您每行的解析,那么多字,码字辛苦了。
问题的原因在PWMA_CCER1 = 0x04; 这个寄存器错了P11是0x04 iyxectrx 发表于 2025-4-7 17:05
PWMA_CCER1 = 0x04; //配置通道输出使能和极性
这句修改了是可以了,但是我还是不是很明白这个寄 ...
E是Enable,P是Polar
带N的是N,不带N的是P
使用的通道必须Enable,相位不对改Polar
你要用的是1N,所以1NE必须设置为1
页:
[1]