STC头文件引用就可以了,测过有效 #define PWM0_NORMAL() PCA_PWM0 &= ~3 //PWM0正常输出(默认) #define PWM0_OUT_0() PCA_PWM0 |= 3 //PWM0一直输出0 #define PWM0_OUT_1() PCA_PWM0 &= ~3, CCAP0H = 0; //PWM0一直输出1 #define PWM1_NORMAL() PCA_PWM1 &= ~3 //PWM1正常输出(默认) #define PWM1_OUT_0() PCA_PWM1 |= 3 //PWM1一直输出0 #define PWM1_OUT_1() PCA_PWM1 &= ~3, CCAP1H = 0; //PWM1一直输出1 #define PWM2_NORMAL() PCA_PWM2 &= ~3 //PWM2正常输出(默认) #define PWM2_OUT_0() PCA_PWM2 |= 3 //PWM2一直输出0 #define PWM2_OUT_1() PCA_PWM2 &= ~3, CCAP2H = 0; //PWM2一直输出1 |
控制CR只是启/停PCA定时器,并不能确定输出口的电平状态。以前做过一个项目用到PWM开停,写CCAP0H=0xff;用占空比0%不理想,输出端还有零星脉冲。后来改用AUXR1特殊功能寄存器把输出脚切换到空闲脚,输出端回复到普通IO口,初始设置低电平的方法解决的。有没有更好的方法就没有继续探索。 |
STC的PWM关闭并不是使端口输出低电平,只是关闭了PWM的时钟而已,端口在你关闭PWM那一刻是什么电平,之后就一直是这个电平 以下是STC8G的关闭,并使端口低电平 CR=0; // CCAPM1=0x00; // CCAP1H=0xff; //PWM保持低电平 PCA_PWM1=0x02; // |
wufa1986 发表于 2022-12-15 14:38 STC的单片的PWM是可以连续输出0或1的。 |
很多单片机PWM置0还是有1/256的脉冲 |
示波器看一下就知道了。 |