找回密码
 立即注册
查看: 1980|回复: 7

关于 STC8H3K64S2 看门狗

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-16 18:51:56 | 显示全部楼层 |阅读模式
关于 STC8H3K64S2 看门狗的应用
看到有硬件(ISP)与软件启动方式2种.
    我的疑问是:
    如果由硬件(ISP)配置,启动看门狗,同时设置分频系数,
在程序里,软件是不能再关闭的,那分频系数这个软件还能修改吗?
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-16 19:10:27 | 显示全部楼层
本帖最后由 LFB 于 2023-3-16 20:05 编辑
  1. #define MAIN_Fosc                   22118400L   //定义主时钟(精确计算9600波特率)
  2. #define D_WDT_FLAG          (1<<7)
  3. #define D_EN_WDT            (1<<5)
  4. #define D_CLR_WDT           (1<<4)  // auto clear
  5. #define D_IDLE_WDT          (1<<3)  // WDT counter when Idle
  6. #define D_WDT_SCALE_2       0
  7. #define D_WDT_SCALE_4       1
  8. #define D_WDT_SCALE_8       2       // T=393216*N/fo
  9. #define D_WDT_SCALE_16      3
  10. #define D_WDT_SCALE_32      4
  11. #define D_WDT_SCALE_64      5
  12. #define D_WDT_SCALE_128     6
  13. #define D_WDT_SCALE_256     7
  14. #define WDT_PS_Set(n)   do{ WDT_CONTR = (WDT_CONTR & ~0x07) | (n & 0x07); } while(0)        // 看门狗定时器时钟分频系数设置
  15. #define WDT_reset(n)    do{ WDT_CONTR = D_EN_WDT + D_CLR_WDT + D_IDLE_WDT + (n); } while(0)     // 初始化WDT,喂狗
  16. #define CLRWDT()        do{ WDT_CONTR |= D_CLR_WDT; } while(0)
  17. CLRWDT()        do{ WDT_CONTR |= D_CLR_WDT; } while(0)                                // 清看门狗
复制代码

通过ISP启用WDT,64分频(20M主频时,约1.26秒,我这个应该差不多),程序中通过 CLRWDT() 清看门够,发现不起作用(会复位).但同一个程序通过ISP关闭WDT方式重新烧录是正常.
这种清看门狗方式不对?


-----------------------------编辑增加说明-----------------------------
程序中有EEPROM操作(FLASH模拟)



-----------------------------再编辑增加说明-----------------------------
上面的清WDT方式(WDT_CONTR |= D_CLR_WDT;)没问题,关于同一个程序通过ISP关闭WDT方式重新烧录是正常,是乌龙,程序修改有错,没注意看,直接在STC-ISP软件点下载.
但关于ISP配置WDT分频,软件能不能修改这个暂时未测试.
  • 打卡等级:常住居民I
  • 打卡总天数:66
  • 最近打卡:2025-05-13 11:26:56

719

主题

1万

回帖

1万

积分

管理员

积分
15703
发表于 2023-3-16 19:46:11 | 显示全部楼层
启动看门狗后:
1,看门狗就不能被关闭,除非停电===这才是尽职的狗
2,喂狗时间可以被反复修改====灵活性
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-16 20:07:48 | 显示全部楼层
神*** 发表于 2023-3-16 19:46
启动看门狗后:
1,看门狗就不能被关闭,除非停电===这才是尽职的狗
2,喂狗时间可以被反复修改====灵活性 ...

感谢,已经确认是软件问题.
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-16 20:13:17 | 显示全部楼层
本帖最后由 LFB 于 2023-3-16 20:15 编辑

有个奇怪的问题还没想到哪不对
  1. void F_ShowAll(void)
  2. {
  3.     volatile u16 u16Xms = 500;
  4.     App_AllDisplayData(0xff);
  5.     App_TM1640Display();
  6.     //F_DelayXms(250);
  7.     //F_DelayXms(250);
  8.     fTick1ms = 0;
  9.     while(u16Xms)
  10.     {
  11.         if(1 == fTick1ms)
  12.         {
  13.             fTick1ms = 0;
  14.             CLRWDT();
  15.             u16Xms--;
  16.         }
  17.     }
  18.     App_AllDisplayData(0x00);
  19.     App_TM1640Display();
  20. }
  21. 这段程序就会死机(WDT复位),效果就是一直全显示.fTick1ms在定时中断置位.
复制代码
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-16 20:18:14 | 显示全部楼层
  1.              ; FUNCTION F_ShowAll (BEGIN)
  2.                                            ; SOURCE LINE # 398
  3.                                            ; SOURCE LINE # 399
  4.                                            ; SOURCE LINE # 400
  5. 0000 750001      R     MOV     u16Xms,#01H
  6. 0003 7500F4      R     MOV     u16Xms+01H,#0F4H
  7.                                            ; SOURCE LINE # 401
  8. 0006 7FFF              MOV     R7,#0FFH
  9. 0008 120000      E     LCALL   _App_AllDisplayData
  10.                                            ; SOURCE LINE # 402
  11. 000B 120000      E     LCALL   App_TM1640Display
  12.                                            ; SOURCE LINE # 407
  13. 000E C200        E     CLR     fTick1ms
  14. 0010         ?C0098:
  15.                                            ; SOURCE LINE # 408
  16. 0010 E500        R     MOV     A,u16Xms+01H
  17. 0012 4500        R     ORL     A,u16Xms
  18. 0014 6012              JZ      ?C0099
  19.                                            ; SOURCE LINE # 409
  20. C51 COMPILER V9.60.0.0   APP_UI                                                            03/16/2023 20:08:07 PAGE 25  
  21.                                            ; SOURCE LINE # 410
  22. 0016 3000F7      E     JNB     fTick1ms,?C0098
  23.                                            ; SOURCE LINE # 411
  24.                                            ; SOURCE LINE # 412
  25. 0019 C200        E     CLR     fTick1ms
  26.                                            ; SOURCE LINE # 414
  27. 001B 120000      E     LCALL   CLRWDT
  28.                                            ; SOURCE LINE # 415
  29. 001E E500        R     MOV     A,u16Xms+01H
  30. 0020 1500        R     DEC     u16Xms+01H
  31. 0022 70EC              JNZ     ?C0098
  32. 0024 1500        R     DEC     u16Xms
  33. 0026         ?C0104:
  34.                                            ; SOURCE LINE # 416
  35.                                            ; SOURCE LINE # 417
  36. 0026 80E8              SJMP    ?C0098
  37. 0028         ?C0099:
  38.                                            ; SOURCE LINE # 419
  39. 0028 E4                CLR     A
  40. 0029 FF                MOV     R7,A
  41. 002A 120000      E     LCALL   _App_AllDisplayData
  42.                                            ; SOURCE LINE # 420
  43. 002D 020000      E     LJMP    App_TM1640Display
  44.              ; FUNCTION F_ShowAll (END)
  45. 这是反汇编
  46. void F_DelayXms(u8 u8Xms)
  47. {
  48.     fTick1ms = 0;
  49.     while(u8Xms)
  50.     {
  51.         if(1 == fTick1ms)
  52.         {
  53.             fTick1ms = 0;
  54.             CLRWDT();
  55.             u8Xms--;
  56.         }
  57.     }
  58. }
  59. 但通过调用上面函数的方式[调用2次F_DelayXms(250)]就没问题.
复制代码
  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-05-12 09:50:54

73

主题

5922

回帖

1万

积分

超级版主

积分
12209
发表于 2023-3-16 23:26:26 | 显示全部楼层
我一般建议再程序里启动看门狗,只在主循环喂狗一次。
硬件启动也可以,程序运行后,在看门狗溢出之前一定要喂狗。碰到个别客户,用硬件启动看门都,但初始化时间太长,没有及时喂狗,导致不断复位。

特别提醒:不要在中断中喂狗。研发程序时先不要启动看门狗,研发完成最后再启动。
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-01-18 18:18:52

8

主题

24

回帖

220

积分

中级会员

积分
220
发表于 2023-3-17 10:28:39 | 显示全部楼层
梁*** 发表于 2023-3-16 23:26
我一般建议再程序里启动看门狗,只在主循环喂狗一次。
硬件启动也可以,程序运行后,在看门狗溢出之前一定 ...

没在中断喂狗,肯定不会在中断这样操作的.
因为就是上电全显示,所以简单处理,直接延时个0.5秒(延时过程中清WDT),
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-13 15:22 , Processed in 0.130386 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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