lzzasd 发表于 2023-12-11 22:04:53

PWM休眠后状态问题 |已解决

本帖最后由 lzzasd 于 2023-12-13 19:09 编辑

我在测试中对PWM3P-PWM3N做了对称互补输出,正常运行时工作正常,对单片机进行掉电(PCON |= 0x02),休眠唤醒后PWM的状态出现问题(端口已经重新配置为标准IO口),互补输出端口全部为低电平也无PWM输出,尝试休眠后对PWM重新进行配置也无反应,请知道问题的大师们问题出在什么地方??

乘风飞扬 发表于 2023-12-12 10:01:41

进休眠前关闭PWM输出通道,然后就可以使用IO口方式控制脚位电平,唤醒后再使能PWM通道输出功能:
      PWMA_ENO = 0x00;    //关闭PWM输出
      P2 = 0x00;          //用IO口方式控制电平
      PCON |= 0x02;       //休眠
      NOP(8);
      PWMA_ENO |= ENO3P | ENO3N; //使能PWM输出

lzzasd 发表于 2023-12-12 14:27:04

本帖最后由 lzzasd 于 2023-12-12 14:28 编辑

乘风飞扬 发表于 2023-12-12 10:01
进休眠前关闭PWM输出通道,然后就可以使用IO口方式控制脚位电平,唤醒后再使能PWM通道输出功能:
...
没有用啊    我用串口将PWM的寄存器都打印出来    和配置是一样的    没有错误   PWM已经使能了也没有作用

乘风飞扬 发表于 2023-12-12 15:20:15

参考附件例子吧,验证过的。

lzzasd 发表于 2023-12-13 11:50:30

本帖最后由 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输出是有关联的,这故障有点隐秘

rip 发表于 2024-8-22 16:05:22

lzzasd 发表于 2023-12-13 11:50
调试了好几天,终于发现问题所在
休眠的时候依据省电说明对所有IO做了高阻处理并将数字输入关闭:
P0M0 ...

谢谢分享
页: [1]
查看完整版本: PWM休眠后状态问题 |已解决