找回密码
 立即注册
查看: 1014|回复: 4

STC8H PWM 如何关闭--看这里 | 已解决

[复制链接]

该用户从未签到

1

主题

1

回帖

37

积分

新手上路

积分
37
发表于 2023-7-12 14:45:56 | 显示全部楼层 |阅读模式
查找了STC论坛,都没有,解决这个问题。

如下方法也试了,没在成功


STC8H系列的高级PWM,连续输出0或1有2种方法(以PWM1P为例):

1、使用PWMx_ENO禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,由这个IO直接输出高或低电平。
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 1;            // P1.0输出高电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms
               
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 0;            // P1.0输出低电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms

2、设置PWMx_CCMRn,强制PWM输出有效(高)电平/无效(低)电平。
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x40;  // 强制PWM输出无效(低)电平
  delay_ms(5);                               // PWM输出低电平5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x50;  //强制PWM输出有效(高)电平
  delay_ms(5);                               // PWM输出高电平5ms





后来与STC的陈工联系,与     PWMB_ENO设置时扩展寄存器访问使能开了没有  有关。



                if(DR_Flag)
                {
                                DR_Flag = 0;
                                P_SW2 |= 0x80;
                                PWMB_ENO |= ENO8P; //使能输出
                                P_SW2 &= 0x7f;
                }
                else
                {
                                DR_Flag = 1;
                                P_SW2 |= 0x80;
                                PWMB_ENO &= ~ENO8P; //禁止输出
                                P_SW2 &= 0x7f;
                                P34 = 0; //输出低电平
                }



就是操作PWMB_ENO时都要打开SW2高8位。


实测可行

25-高级PWM5-PWM6-PWM7-PWM8,开关.zip

27.58 KB, 下载次数: 30

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 22:20
  • 签到天数: 159 天

    [LV.7]常住居民III

    9

    主题

    308

    回帖

    3763

    积分

    荣誉版主

    积分
    3763
    发表于 2023-7-12 17:09:24 | 显示全部楼层
    没有冲突时建议保持EAXFR为1
    Screenshot 2023-07-12 170815.png
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6755

    积分

    超级版主

    积分
    6755
    发表于 2023-7-13 15:48:07 | 显示全部楼层
    访问位于xdata的扩展寄存器,一定要先设置 P_SW2 |= 0x80;
    设置之后,不用清0,后面也不需要重复设置。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:00
  • 签到天数: 118 天

    [LV.6]常住居民II

    9

    主题

    92

    回帖

    574

    积分

    高级会员

    积分
    574
    发表于 2023-8-21 21:57:00 | 显示全部楼层
    P_SW2 这个东西会产生很多问题   我开始也按照手册打开--配置---关闭    有一次调试失败找了好几天都没找到原因    最后发现是别任务的地方把这个P_SW2 关闭了   造成改寄存器失败造成问题    后来我干脆打开就不关闭了    具体的存储区域也没研究估计一般不会用到吧

    点评

    打开不用关闭,不会有问题的。  详情 回复 发表于 2023-8-21 23:50
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6755

    积分

    超级版主

    积分
    6755
    发表于 2023-8-21 23:50:03 | 显示全部楼层
    lzzasd 发表于 2023-8-21 21:57
    P_SW2 这个东西会产生很多问题   我开始也按照手册打开--配置---关闭    有一次调试失败找了好几天都没找到 ...

    打开不用关闭,不会有问题的。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-13 00:01 , Processed in 0.064795 second(s), 51 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表