PWM休眠后状态问题 |已解决
本帖最后由 lzzasd 于 2023-12-13 19:09 编辑我在测试中对PWM3P-PWM3N做了对称互补输出,正常运行时工作正常,对单片机进行掉电(PCON |= 0x02),休眠唤醒后PWM的状态出现问题(端口已经重新配置为标准IO口),互补输出端口全部为低电平也无PWM输出,尝试休眠后对PWM重新进行配置也无反应,请知道问题的大师们问题出在什么地方??
进休眠前关闭PWM输出通道,然后就可以使用IO口方式控制脚位电平,唤醒后再使能PWM通道输出功能:
PWMA_ENO = 0x00; //关闭PWM输出
P2 = 0x00; //用IO口方式控制电平
PCON |= 0x02; //休眠
NOP(8);
PWMA_ENO |= ENO3P | ENO3N; //使能PWM输出 本帖最后由 lzzasd 于 2023-12-12 14:28 编辑
乘风飞扬 发表于 2023-12-12 10:01
进休眠前关闭PWM输出通道,然后就可以使用IO口方式控制脚位电平,唤醒后再使能PWM通道输出功能:
...
没有用啊 我用串口将PWM的寄存器都打印出来 和配置是一样的 没有错误 PWM已经使能了也没有作用 参考附件例子吧,验证过的。 本帖最后由 lzzasd 于 2024-8-22 18:50 编辑
乘风飞扬 发表于 2023-12-12 15:20
参考附件例子吧,验证过的。
调试了好几天,终于发现问题所在
休眠的时候依据省电说明对所有IO做了高阻处理并将数字输入关闭:
P0M0 = 0x00; P0M1 = 0xff; P0IE = 0x00; //高阻模式,关闭数字输入
P1M0 = 0x00; P1M1 = 0xff; P1IE = 0x00;
P2M0 = 0x00; P2M1 = 0xff; P2IE = 0x00;
P3M0 = 0x00; P3M1 = 0xff; P3IE = 0x00;
唤醒后对所有IO进行了配置,全部为普通IO:
P0M0 = 0x00; P0M1 = 0x00; //设置为准双向口
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
一直以为是寄存器配置错误,唤醒后打印出所有PWM相关寄存器数值都正确,百思不得其解,就试了下是不是IO的问题,在IO配置时打开了数字输入 P1IE |= 0x30;
P0M0 = 0x00; P0M1 = 0x00; //设置为准双向口
P1M0 = 0x00; P1M1 = 0x00;
P1IE |= 0x30;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
结果P14 P15休眠后PWM互补输出再打开就正常了,IO数字输入和PWM输出是有关联的,这故障有点隐秘 lzzasd 发表于 2023-12-13 11:50
调试了好几天,终于发现问题所在
休眠的时候依据省电说明对所有IO做了高阻处理并将数字输入关闭:
P0M0 ...
谢谢分享
页:
[1]