[学习笔记] AC7801-聊聊例程-看门狗

[复制链接]
3819|14
 楼主| Gavin3389 发表于 2022-3-11 10:53 | 显示全部楼层 |阅读模式
本帖最后由 Gavin3389 于 2022-3-11 10:53 编辑

官网的资料都保存好了,
一点点的开始跑各种例程,首先感受最舒畅的一点,官网的资料非常舒适,(例程+说明文档)


好了,今天来看看看门狗例程
例程路径
\ac7801xSampleCode20210720\watchdog
非常整齐和人性化,例程代码和应用笔记

981116227221f40864.png

看,内容也都是干货,不冗余
3132962272269034a0.png

这么温馨的官网资料,突然给我弄不会了,节省了很多时间。
以WDG5STimeout例程为例
主函数非常简单整洁
乍一看,这也太简单了吧
  1. *
  2. * @param[in] none
  3. *
  4. * [url=home.php?mod=space&uid=266161]@return[/url] none
  5. *
  6. * [url=home.php?mod=space&uid=247401]@brief[/url] 配置独立看门狗,超时周期为5S。
  7. */
  8. int main(void)
  9. {
  10.     InitDelay();
  11.   
  12.     WDG_5s_Timerout();
  13.    
  14. }
InitDelay();
这还没深究,应该是时钟相关吧,
回头看看手册,做做算术题
  1. /*!
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] Init Delay count factor, 1s = TICKS * (1/f)  s;
  3. *
  4. * @param[in]  none
  5. * [url=home.php?mod=space&uid=266161]@return[/url] none
  6. */
  7. void InitDelay(void)
  8. {
  9.     s_facus = __SYSTEM_CLOCK / 1000000;
  10.     s_facms = s_facus * 1000;
  11. }

WDG_5s_Timerout();
实现看门狗的基础配置,测试
这里有些人可能会因为main函数中没有看到while循环而困惑
实则是为了测试功能,官方把while放在了这个函数里,
这样从功能上来说,形成了闭环。
  1. /**
  2. * WDG_5s_Timerout
  3. *
  4. * @param[in]  none
  5. * @return    none
  6. *
  7. * @brief  配置看门狗超时时间为5S
  8. */
  9. void WDG_5s_Timerout(void)
  10. {
  11.         uint32_t tmpTimeoutValue = WDG_CLK(5);            // (119999999+1)/24000000 = 5s(时钟为48M)
  12.     WDG_ConfigType WDGConfig;
  13.         
  14.         memset(&WDGConfig,0,sizeof(WDGConfig));
  15.         
  16.         WDGConfig.clockSource = WDG_CLOCK_APB;                //0 is 24MHz clk source
  17.     WDGConfig.WDGEn = ENABLE;
  18.     WDGConfig.interruptEn = ENABLE;           //使能中断,延迟128个总线时钟后复位,可在128总线时钟内执行中断例程
  19.                                                          //若需要超时立即复位,禁能中断即可
  20.     WDGConfig.prescalerEn = DISABLE;          //0:disable 256 pre, 1:enable 256 pre
  21.     WDGConfig.updateEn = ENABLE;                        //if update is 0,can't do any setting
  22.     WDGConfig.windowEn = DISABLE;          //window mode watchdog
  23.     WDGConfig.timeoutValue = tmpTimeoutValue;            //time = pre*timeout/clk source
  24.     WDGConfig.windowValue = NULL;
  25.     WDGConfig.callBack = WDGCallback;              //设置中断回调
  26.     WDG_Init(&WDGConfig);

  27.     GPIO_SetDir(GPIOC,GPIO_PIN9,GPIO_OUT);        //LED1,用于测试看门狗功能
  28.         GPIO_SetPinLevel(GPIOC,GPIO_PIN9,GPIO_LEVEL_HIGH);
  29.         
  30.         WDG_Feed();        
  31.         while (1)
  32.     {
  33.                 mdelay(4000);      //延时4S再喂狗,不会重启,若为验证看门狗有效性,可把时间改为6S
  34.         WDG_Feed();                                  //刷新看门狗               
  35.                 GPIO_SetPinLevel(GPIOC,GPIO_PIN9,GPIO_LEVEL_LOW);
  36.     }
  37. }

实际效果
原例程

37235622ab884724b9.png

板子复位后,绿灯先点亮测试
后熄灭,说明正常喂狗

6529622ab8d52a3d1.png

延长喂狗时间


29625622ab84b86005.png

绿灯常亮,喂狗超时

95209622ab90ac2fb6.png

回过去,看看官网的说明文档
77212622ab934209df.png

非常的nice!!



七毛钱 发表于 2022-3-15 16:07 来自手机 | 显示全部楼层
看门狗的例程和文档都很nice
 楼主| Gavin3389 发表于 2022-3-16 08:50 | 显示全部楼层
七毛钱 发表于 2022-3-15 16:07
看门狗的例程和文档都很nice

每个例程都有配套的文档
tpgf 发表于 2022-4-2 16:30 | 显示全部楼层
芯片自带的看门狗吗
guanjiaer 发表于 2022-4-2 16:39 | 显示全部楼层
我一般不敢用看门狗
heimaojingzhang 发表于 2022-4-2 16:47 | 显示全部楼层
这是非常简单的案例了
keaibukelian 发表于 2022-4-2 16:57 | 显示全部楼层
一般来说看门狗可靠吗
labasi 发表于 2022-4-2 17:04 | 显示全部楼层
看门狗可靠 但是不容易用好
paotangsan 发表于 2022-4-2 17:10 | 显示全部楼层
是的  用不好反而起反作用
jimmhu 发表于 2022-5-28 15:18 | 显示全部楼层
AC7801性能怎么样
claretttt 发表于 2022-5-28 16:54 | 显示全部楼层
要是配置网络的时候,需要定时器喂狗了呢。  
biechedan 发表于 2022-5-28 17:21 | 显示全部楼层
这个不都是定时喂狗吗
juliestephen 发表于 2022-5-29 08:32 | 显示全部楼层
while循环不大适合这个。
 楼主| Gavin3389 发表于 2022-5-29 11:17 | 显示全部楼层
tpgf 发表于 2022-4-2 16:30
芯片自带的看门狗吗

是的
 楼主| Gavin3389 发表于 2022-5-29 11:18 | 显示全部楼层
jimmhu 发表于 2022-5-28 15:18
AC7801性能怎么样

稳定的很
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

536

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部