PIC18F67K40(MicroE clicker2开发板)PWM输出激活故障求助
我之前也踩过PIC18F67K40增强型CCP模块的配置坑,看了你的代码后,发现几个关键问题,应该能解决你的PWM无输出问题:
核心问题排查与修复
1. CCP模式配置错误
你当前设置CCP2CON = 0x1C,但PIC18F67K40的增强型CCP模块中,PWM模式需要将CCP2M<3:0>设为0100,而你写的0x1C低四位是1100,对应的是「每4个上升沿捕获」模式,根本不是PWM模式!
正确的左对齐PWM配置应该是:
CCP2CON = 0x14; // 二进制00010100:位4-3=11(左对齐),位2-0=0100(PWM模式),EN位暂时关闭
2. 100%占空比寄存器配置错误
增强型CCP的左对齐PWM是10位精度:占空比的高8位存在CCPR2H,低2位存在CCPR2L的高2位。10位最大值是0x3FF(对应100%占空比),所以正确的寄存器设置应该是:
CCPR2H = 0x3F; // 10位占空比的高8位(0x3F=63) CCPR2L = 0xC0; // 10位占空比的低2位(0xC0的高两位是11)
你之前设置CCPR2H = 0xFF,远超10位的高8位范围(最大63),会导致模块工作异常。
3. 模块启动顺序优化
虽然不是致命问题,但建议先启动Timer2,再启用CCP模块,逻辑更清晰,避免时序冲突。
修改后的完整代码
void main(void) { TRISCbits.TRISC5 = 0; // 设置RC5为输出模式 LATCbits.LATC5 = 0; // 初始化RC5输出低电平 RC5PPS = 0x6; // 将CCP2输出映射到RC5引脚 // 配置CCP2为左对齐PWM模式 CCP2CON = 0x14; // CCP2FMT=11(左对齐),CCP2M<3:0>=0100(PWM模式) // 设置100%占空比 CCPR2H = 0x3F; // PWM占空比高字节 CCPR2L = 0xC0; // PWM占空比低字节(仅高2位有效) CCPTMRS0bits.C2TSEL = 0x0; // 选择Timer2作为CCP2的时基 PIE7bits.CCP2IE = 0; // 关闭CCP2中断 // 配置Timer2 T2RST = 0x00; T2PR = 0xFF; // 设置Timer2周期寄存器 T2TMR = 0x00; // 重置Timer2计数器 PIE5bits.TMR2IE = 0; // 关闭Timer2溢出中断 T2HLT = 0x00; T2CLKCON = 0x01; // Timer2时钟源选择Fosc/4 // 先启动Timer2,再启用CCP2模块 T2CON = 0xD0; // 开启Timer2,预分频器1:32 CCP2CONbits.EN = 1; // 启用CCP2 PWM模块 while (1) { } }
额外排查建议
- 确认系统时钟配置正确:Timer2的时钟源依赖Fosc/4,如果时钟没配置到预期频率,Timer2可能无法正常运行。
- 先测试50%占空比:可以设置
CCPR2H=0x1F、CCPR2L=0x80,更容易用示波器观察到波形,确认模块正常工作后再调整到100%。 - 检查引脚复用:确保RC5未被其他模块占用(比如ADC),可以设置
ANSELCbits.ANSELC5 = 0,强制RC5为数字模式。
内容的提问来源于stack exchange,提问作者DM501
相关产品推荐
相关产品推荐

