通过引脚复用检测PWM输入,检测不到信号的问题
思路是,通过引脚的切换,检测两个风机的PWM输入。可以在主程序中没2S切换一次,两个风机都检测不到了,在初始化过程中设定固定一个,都可以检测到脉冲信号。
如果切换,两路都是0 ,单独一路都有用,请前辈指点一下!!!
主程序这样的:
while (1)
{
if(SystemTick%2000 == 0)//2S一次
{
if(isPWM4_Moto4 == 0)
{
isPWM4_Moto4 = 1;
//PWMA_PS |= PWM4_2;//风机1
PWMA_PS |= PWM4_3;//风机4
}
else
{
PWMA_PS |= PWM4_2;//风机1
//PWMA_PS |= PWM4_3;//风机4
}
for(i=0;i<5;i++)
{
printf("CH%d: %u ",(int)i,Cycles);
}
}
}
中断中这样处理的:
void PWMA_ISR() interrupt PWMA_VECTOR
{
u16 ccr;
if(PWMA_SR1 &0x10)//PWM4风机1或风机4
{
PWMA_SR1 &=~0x10;
ccr = (PWMA_CCR4H<<8)+PWMA_CCR4L;
if(isPWM4_Moto4 == 1)
{
Cycles = ccr;
}
else
{
Cycles = ccr;
}
}
}
中间NTC的图是无关的图
这里用=,不能用|=
DebugLab 发表于 2024-9-6 09:23
这里用=,不能用|=
或者修改之前相关位先清零 对于STC8H、STC32系列,每路PWM都可以单独切换的,你可能没切换对。 本帖最后由 kookeda 于 2024-9-7 15:57 编辑
DebugLab 发表于 2024-9-6 09:25
或者修改之前相关位先清零因为前面还要其他PWM的映射,清零或者用=号就修改了其他映射,但是还是疏忽了。看了下切换的定义,现在这么操作,实际上修改了P3.3去了。他俩都不会有结果。
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!!
应该修修改回去 if(isPWM4_Moto4 == 0)
{
isPWM4_Moto4 = 1;
//PWMA_PS |= PWM4_2;//风机1
PWMA_PS &=~PWM4_2;
PWMA_PS |= PWM4_3;//风机4
}
else
{
PWMA_PS &=~PWM4_3;
PWMA_PS |= PWM4_2;//风机1
//PWMA_PS |= PWM4_3;//风机4
}
kookeda 发表于 2024-9-7 15:51
明白了,应该是把那一位改成0,再修改其他位置,现在这样就冲突了。感谢感谢!!! ...
对的,|=之后全变1了,再也无法变成0 DebugLab 发表于 2024-9-7 15:55
对的,|=之后全变1了,再也无法变成0
明白明白,感谢,我太不细心了!
页:
[1]