高级PWM配置问题 | 已解决,引脚虚焊
老师们,我在学习高级PWM的时候,代码不知道哪里错误,PWMB的5P和8P没有信号,请老师们帮忙 看一下代码哪里错误,谢谢了现在是1P和1N,2P和2N是输出一样的PWM,3P,4P,6P,7P正常输出,5P和8P没有信号 。
#define PWM_PERIOD 1999 //设置PWM周期值
u16 PWM_Duty = 1500;//设置点空比
void PWM_Int(void)
{
PWMA_PS |= 0x55;//高级 PWM 通道输出脚选择P20位,P22,P24,P26.
PWMB_PS |= 0xAA;//高级 PWM 通道输出脚选择P00位,P01,P02,P03.
PWMA_CCER1 = 0x00;//写CCMRx前必须先清零CCxE关闭通道
PWMA_CCMR1= 0x68;//通道模式配置
PWMA_CCMR2= 0x68;//通道模式配置
PWMA_CCER1 =0x7D;//配置通道输出使能和极性
PWMA_CCER2 = 0x00;//写CCMRx前必须先清零CCxE关闭通道
PWMA_CCMR3= 0x68;//通道模式配置
PWMA_CCMR4= 0x68;//通道模式配置
PWMA_CCER2 =0x11;//配置通道输出使能和极性
PWMB_CCER1 = 0x00;//写CCMRx前必须先清零CCxE关闭通道
PWMB_CCMR1= 0x68;//通道模式配置
PWMB_CCMR2= 0x68;//通道模式配置
PWMB_CCER1 =0x11;//配置通道输出使能和极性
PWMB_CCER2 = 0x00;//写CCMRx前必须先清零CCxE关闭通道
PWMB_CCMR3= 0x68;//通道模式配置
PWMB_CCMR4= 0x68;//通道模式配置
PWMB_CCER2 =0x11;//配置通道输出使能和极性
PWMA_ARRH = (u8)(PWM_PERIOD>>8);//设置周期时间
PWMA_ARRL = (u8)PWM_PERIOD;
PWMB_ARRH = (u8)(PWM_PERIOD>>8);//设置周期时间
PWMB_ARRL = (u8)PWM_PERIOD;
PWMA_ENO = 0x5F;//使能输出
PWMB_ENO = 0x55;//使能输出
PWMA_CCR1H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMA_CCR1L = (u8)(PWM_Duty);
PWMA_CCR2H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMA_CCR2L = (u8)(PWM_Duty);
PWMA_CCR3H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMA_CCR3L = (u8)(PWM_Duty);
PWMA_CCR4H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMA_CCR4L = (u8)(PWM_Duty);
PWMB_CCR5H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMB_CCR5L = (u8)(PWM_Duty);
PWMB_CCR6H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMB_CCR6L = (u8)(PWM_Duty);
PWMB_CCR7H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMB_CCR7L = (u8)(PWM_Duty);
PWMB_CCR8H = (u8)(PWM_Duty >>8);//设置占空比时间
PWMB_CCR8L = (u8)(PWM_Duty);
PWMA_BKR = 0x80;//使能主输出
PWMB_BKR = 0x80;//使能主输出
PWMA_CR1 = 0x01;//开始计时
PWMB_CR1 = 0x01;//开始计时
}
在您提供的代码中,PWMB的5P和8P没有信号输出,可能是由于以下几个原因导致的。以下是对代码的详细分析和建议:
1. PWMBPS寄存器配置问题
您当前的配置是PWMBPS |= 0xAA;,这表示PWMB的通道输出脚选择为P00、P01、P02、P03。然而,5P和8P可能对应的是其他引脚,您需要确认这些引脚是否被正确映射到PWMB的通道上。
建议检查芯片手册,确认5P和8P对应的引脚是否被正确配置到PWMB的通道上。如果未正确配置,需要调整PWMBPS的值。
2. PWMBCCER1和PWMBCCMR1配置问题
您当前的配置是PWMBCCER1 = 0x00;和PWMBCCMR1= 0x68;。PWMBCCER1用于配置通道输出使能和极性,而PWMBCCMR1用于配置通道模式。
确保PWMBCCER1的值正确配置了5P和8P对应的通道使能位。如果未使能,通道将不会输出信号。
建议检查PWMBCCER1的值,确保5P和8P对应的通道使能位被正确设置。
3. PWMBCCMR2配置问题
您当前的配置是PWMBCCMR2= 0x68;。PWMBCCMR2用于配置通道模式,确保5P和8P对应的通道模式被正确配置。
如果通道模式配置不正确,可能会导致信号无法输出。建议检查PWMBCCMR2的值,确保5P和8P对应的通道模式被正确设置。
4. PWM周期和占空比配置
您当前的PWM周期和占空比配置为#define PWMPERIOD 1999和u16 PWMDuty = 1500;。确保这些值在芯片的允许范围内,并且与您的应用需求相符。
如果周期或占空比配置不正确,可能会导致信号无法正常输出。建议检查这些值,并根据需要进行调整。
5. 硬件连接问题
除了软件配置,还需要检查硬件连接是否正确。确保5P和8P对应的引脚与外部电路连接正确,并且没有短路或断路现象。
6. 调试建议
使用调试工具(如示波器或逻辑分析仪)检查5P和8P的引脚是否有信号输出。如果没有信号输出,可以逐步检查上述配置,找出问题所在。
如果仍然无法解决问题,建议参考芯片手册中的PWM模块章节,详细了解每个寄存器的功能和配置方法。
7. 代码示例
以下是一个可能的修正代码示例,供您参考:
c
define PWMPERIOD 1999 //设置PWM周期值
u16 PWMDuty = 1500; //设置占空比
void PWMInt(void)
{
// 配置PWMA和PWMB的输出引脚
PWMAPS |= 0x55; // 高级PWM通道输出脚选择P20位,P22,P24,P26.
PWMBPS |= 0xAA; // 高级PWM通道输出脚选择P00位,P01,P02,P03.
// 配置PWMA的通道1和2
PWMACCER1 = 0x00; // 写CCMRx前必须先清零CCxE关闭通道
PWMACCMR1 = 0x68; // 通道模式配置
PWMACCMR2 = 0x68; // 通道模式配置
PWMACCER1 = 0x7D; // 配置通道输出使能和极性
// 配置PWMA的通道3和4
PWMACCER2 = 0x00; // 写CCMRx前必须先清零CCxE关闭通道
PWMACCMR3 = 0x68; // 通道模式配置
PWMACCMR4 = 0x68; // 通道模式配置
PWMACCER2 = 0x11; // 配置通道输出使能和极性
// 配置PWMB的通道1和2
PWMBCCER1 = 0x00; // 写CCMRx前必须先清零CCxE关闭通道
PWMBCCMR1 = 0x68; // 通道模式配置
PWMBCCMR2 = 0x68; // 通道模式配置
PWMBCCER1 = 0x7D; // 配置通道输出使能和极性
// 配置PWMB的通道3和4
PWMBCCER2 = 0x00; // 写CCMRx前必须先清零CCxE关闭通道
PWMBCCMR3 = 0x68; // 通道模式配置
PWMBCCMR4 = 0x68; // 通道模式配置
PWMBCCER2 = 0x11; // 配置通道输出使能和极性
}
总结
通过以上分析和建议,您可以逐步排查并解决PWMB的5P和8P没有信号输出的问题。如果问题仍然存在,建议进一步检查硬件连接和芯片手册中的相关配置。希望这些建议对您有所帮助。
[本文内容由国芯人工智能辅助生成,仅供参考] 找到问题了,芯片引脚虚焊了,查了一下午代码。唉
页:
[1]