0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32mp1 Cortex M4开发篇7:窗口看门狗

华清远见工控 2021-10-29 17:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前面:

本文章为《ARM Cortex-M4裸机开发篇》系列中的一篇,,全系列总计14篇。笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板),Cortex-M4裸机开发篇除了讲M4裸机开发外,还会讲解通过M4控制资源扩展板上的各种传感器执行器模块(包括空气温湿度传感器LED灯、数码管、蜂鸣器、震动马达、按键中断、风扇等),本篇是M4控制资源扩展板中的一篇。

资源扩展板是FS-MP1A开发板的扩展模块,主要包含了10余种助主流传感器、执行器件、总线控制器件,非常方便项目扩展用。可拓展开发智慧家庭、智能医疗、智能安防、工业控制、图像识别、环境检测等方向的10个左右综合项目,华清远见开发板也将配套提供所有项目的说明文档、实验源码、应用程序等资料。

针对FS-MP1A开发板,除了Cortex-M4裸机开发篇外,还包括其他多系列教程,包括Cortex-A7开发篇、FreeRTOS篇、Linux基础及应用开发篇、Linux系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器视觉篇、Qt应用编程篇、Qt综合项目实战篇等。d=622457259672

1.资源扩展板介绍

1.1硬件介绍&资源扩展板可开发项目

poYBAGFn9z-AAMA3AAJtk6t7vns204.jpg

2.Cortex-M4 窗口看门狗

2.1实验目的

熟悉STM32CubeIDE工具软件的使用。

掌握STM32CubeIDE软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、仿真调试。

学习窗口看门狗的使用方法,掌握如何利用STM32MP157A芯片的窗口看门狗复位程序。

2.2实验环境

FS-MP1A开发平台

ST-Link仿真器

STM32CubeIDE开发软件

PC机 XP、Window7/10 (32/64bit)

串口调试工具

2.3实验原理

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的简单一点,看门狗就是能让程序出问题时能重新启动系统。

窗口看门狗的工作原理是一个递减计数器不断的往下递减计数,当减到一个固定值 0x40 时还不喂狗的话,产生复位,这个值叫作窗口的下限,是固定的值,不能改变。另外窗口看门狗计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫作窗口的上限,上限值由用户独立设置。

窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义。

poYBAGF7Rw-AEe8RAAB_s7Gm7nk188.jpg

WWDG功能框图

窗口看门狗时钟

窗口看门狗时钟来自PCLK1,由RCC时钟控制器启动。

计数器时钟:

计数器时钟由 CK计时器时钟经过预分频器分频得到,分频系数由配置寄存器 CFR 的位 8:7 WDGTB[1:0]配置,可以是[0,1,2,3],其中 CK计时器时钟=PCLK1/4096,4096对应于内部分频器的值。所以计数器的时钟CNT_CK=PCLK1/4096/(2^WDGTB),这就可以算出计数器减一个数的时间 T= 1/CNT_CK =Tpclk1 * 4096 * (2^WDGTB)。

计数器:

窗口看门狗的计数器是一个递减计数器,共有 7 位,其值存在控制寄存器 CR 的位 6:0,即 T[6:0],当 7 个位全部为 1时是 0x7F,这个是最大值,当递减到 T6 位变成 0时,即从0x40 变为0x3F时候,会产生看门狗复位。这个值 0X40 是看门狗能够递减到的最小值,所以计数器的值只能是:0x40~0x7F之间,实际上用来计数的是 T[5:0]。当递减计数器递减到 0x40 的时候,还不会马上产生复位,如果使能了提前唤醒中断:CFR 位 9 EWI 置 1,则产生提前唤醒中断,如果真进入了这个中断的话,就说明程序肯定是出问题了,那么在中断服务程序里面我们就需要做最重要的工作,比如保存重要数据,或者报警等,这个中断我们也叫它死前中断。

窗口值:

我们知道窗口看门狗必须在计数器的值在一个范围内才可以喂狗,其中下窗口的值是

固定的 0x40,上窗口的值可以改变,具体由配置寄存器 CFR 的位 6:0 W[6:0]设置。其值必须大于 0x40,如果小于或者等于 0x40就是失去了窗口的价值,而且也不能大于计数器的值,所以必须得小于 0x7F。

窗口看门狗激活情况下,满足以下条件会产生复位。

1.当递减计数器的值小于0x40时(即从0x40到0x3F)会产生复位。

2.当计数器值大于窗口寄存器的值时,如果软件重载计数器,则会产生复位。

poYBAGF7RxCACDupAABu19uUsho650.jpg

从上面的时序图中可以看到,如果递减计数器的值(T[6:0])大于窗口寄存器(W[6:0])的值,重载计数器会产生复位。当递减计时器的值小于0x40时,也会产生复位。所以只能在W[6:0] ~ 0x3F之间刷新,在窗口之外重载递减计数器时复位。存储在窗口寄存器(WWDG_CR)中的值必须介于0xFF和0xC0之间。开启窗口看门狗中断时,当递减计数器的值等于0x40时触发中断。

看门狗超时时间

pYYBAGF7Rw-AcsVOAAAgSt6Oylg669.jpg

WWDG时钟是挂在APB1上的,本实验配置PCLK1时钟为64MHz,预分频为8,T[5:0]最大为63

ms

poYBAGF7Rw-AQYYgAABHHiIygi8920.jpg

2.4实验步骤

打开STM32CubeIDE->File->New->STM32 Project

poYBAGD1ME2AVPeTAACVnz-qkMk546.png

可以在左侧搜索框内输入芯片型号STM32MP157A进行搜索,选择对应芯片,点击Next

poYBAGFmcj-ASM-mAAC8KlaJkAU786.jpg

填写工程名,点击Finsh

pYYBAGF7RxCALB5OAABYYhOwuAQ384.jpg

点击Yes打开配置页面

pYYBAGD1MFqAKmnWAAAp3TMlYLo989.png

配置WWDG1,勾选Cortex-M4,勾选Activated

配置WWDG计数器预分频为8,窗口寄存器的值为90,递减计数器刷新值为127

Early wakeup interrupt使能 Enable,开启窗口看门狗中断

pYYBAGF7RxCABOYIAADElFg6X18346.jpg

poYBAGF7RxCAGtbzAAAsGAfuDIs285.jpg

配置UART4,勾选Cortex-M4,Mode选择Asynchronous,搜索框搜索PB2、PG11,分别配置为UART4_RX、UART4_TX

poYBAGF7RxCAJ4b8AADMv_hNViE303.jpg

默认时钟配置64MHz

pYYBAGF7RxCABF03AADEmtaJIAc131.jpg

在Code Generator处选择为每个外设生成单独的C和H文件,这样设置方便阅读代码

poYBAGD1MGmAams0AACpGOkAn0s579.png

完成以上设置后,Ctrl+S保存,会提示是否需要生成代码,选择Yes即可自动生成代码。系统会自动生成System Clock代码

poYBAGD1MG2ADAi6AAAgBCPP1k8477.png

可以在左侧工程文件夹找到WDT_CM4子工程,打开main.c

添加窗口看门狗中断回调函数,串口重定向函数

123456789 void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg){ HAL_WWDG_Refresh(hwwdg);}int __io_putchar(int ch){ HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF); return ch;}

在main函数中添加打印语句,实现程序运行正常,不断打印信息

pYYBAGF7RxGAc6U8AACoHXqnIf0772.jpg

上述为新建工程配置过程,可参考12.3.2章节进行导入已有工程,工程存放路径【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\6_WDT】

配置完成或导入工程后进行程序下载,具体步骤参考12.3.3节进行开发板连接,程序编译、下载

2.5实验现象

连接串口线,打开串口调试助手可以看到

poYBAGF7RxGAE0baAACyD2gf7kw914.jpg

在窗口看门狗中断回调函数中注释掉HAL_WWDG_Refresh(hwwdg)后,不刷新计数器。由于不刷新计数器,看门狗每33ms复位重启一次,重新编译下载后串口输出如下

poYBAGF7RxGAXSJyAAC-LvOFzrs337.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45344

    浏览量

    663757
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9501

    浏览量

    388826
  • 嵌入式
    +关注

    关注

    5186

    文章

    20159

    浏览量

    328989
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218015
  • 开发板
    +关注

    关注

    25

    文章

    6132

    浏览量

    113507
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IWDT窗口看门狗的配置

    :配置 IWDT_ARR,配置看门狗的重载值; 步骤 6:配置 IWDT_WINR,配置窗口大小,注意 IWDT_WINR 必须小于 IWDT_ARR 重载值; 步骤 7:等待 IWDT_SR.ARRF
    发表于 12-10 06:10

    中科芯CKS32F107XX系列MCU的独立看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口看门狗WWDG(Window Watchdog
    的头像 发表于 11-28 14:51 3539次阅读
    中科芯CKS32F107XX系列MCU的独立<b class='flag-5'>看门狗</b>介绍

    中科芯CKS32F107XX系列MCU的窗口看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口看门狗WWDG(Window Watchdog
    的头像 发表于 11-28 14:48 3687次阅读
    中科芯CKS32F107XX系列MCU的<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>介绍

    “喂狗”的艺术:看门狗不叫,才是系统好

    看门狗选哪只好呢? 中间那只看起来不错。 咳咳搞错了,自动化项目中说的看门狗是PLC的看门狗,那这个有什么用呢?难道真的是看大门的
    的头像 发表于 11-25 10:50 82次阅读
    “喂狗”的艺术:<b class='flag-5'>看门狗</b>不叫,才是系统好

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?
    发表于 11-21 06:42

    CW32配置IWDT为窗口看门狗的步骤

    IWDT_ARR,配置看门狗的重载值; 步骤 6:配置 IWDT_WINR,配置窗口大小,注意 IWDT_WINR 必须小于 IWDT_ARR 重载值; 步骤 7:等待 IWDT_SR.ARRF
    发表于 11-13 06:53

    德州仪器TPS3436-Q1汽车级窗口看门狗定时器技术解析

    Texas Instruments TPS3436-Q1精密窗口看门狗定时器是一款超低功耗(250nA典型值)器件,提供可编程窗口看门狗定时
    的头像 发表于 08-18 14:54 678次阅读
    德州仪器TPS3436-Q<b class='flag-5'>1</b>汽车级<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>定时器技术解析

    STM32L433单片机如何在调试的时候关闭看门狗

    调试单步时,独立看门狗iwdg暂停 The independent watchdog counter clock is stopped when the core is halted__HAL_DBGMCU_FREEZE_WWDG();//窗口
    发表于 07-11 07:15

    第二十四章 WWDG——窗口看门狗

    W55MH32的窗口看门狗7位递减计数器,有上下窗口值,时钟来自PCLK1用于监测软件故障,代码演示了其配置、中断测试与复位测试。
    的头像 发表于 06-20 14:00 1035次阅读
    第二十四章 WWDG——<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>

    TPS3430 具有可编程复位延迟的窗口看门狗定时器数据手册

    TPS3430 是一款独立的窗口看门狗定时器,具有可编程看门狗窗口和可编程看门狗复位延迟,适用于各种应用。TPS3430
    的头像 发表于 04-10 14:23 602次阅读
    TPS3430 具有可编程复位延迟的<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>定时器数据手册

    TPS3430-Q1 具有可编程复位延迟的汽车级窗口看门狗定时器数据手册

    TPS3430-Q1 是一款独立的汽车窗口看门狗定时器,具有可编程看门狗窗口和可编程看门狗复位延
    的头像 发表于 04-10 14:15 723次阅读
    TPS3430-Q<b class='flag-5'>1</b> 具有可编程复位延迟的汽车级<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>定时器数据手册

    TPS3436-Q1 汽车级纳米静态电流精密窗口看门狗定时器数据手册

    TPS3436-Q1 是一款超低功耗(典型值为 250 nA)器件,提供可编程窗口看门狗定时器。 TPS3436-Q1 提供高精度窗口
    的头像 发表于 04-09 14:40 624次阅读
    TPS3436-Q<b class='flag-5'>1</b> 汽车级纳米静态电流精密<b class='flag-5'>窗口</b><b class='flag-5'>看门狗</b>定时器数据手册

    看门狗,你真的会用吗?

    嵌入式系统开发中,看门狗是一种重要的机制,用于在程序异常时自动重启系统,保障其稳定性。本文将深入探讨看门狗及其在程序稳定性中的作用,帮助您更好地理解和应用看门狗技术。
    的头像 发表于 03-12 11:37 4597次阅读
    <b class='flag-5'>看门狗</b>,你真的会用吗?

    安利给工程师!看门狗相关知识

    看门狗能够及时检测并采取相应措施,从而避免系统长时间处于故障状态。本文将详细介绍看门狗的工作原理及其正确使用方法。 同时通过具体示例解析,教你如何在一个简单的LuatOS项目中集成看门狗定时器,设置
    的头像 发表于 12-31 14:29 929次阅读
    安利给工程师!<b class='flag-5'>看门狗</b>相关知识

    抄作业!看门狗定时器必备知识

    Air201在模组内部集成了硬件看门狗,今天就一起来聊聊~ 本文将带你了解看门狗的工作原理、应用架构、定时时间设置、软硬件看门狗的区别,以及看门狗定时器的典型应用场景及关键设计因素等内
    的头像 发表于 12-30 14:44 1097次阅读
    抄作业!<b class='flag-5'>看门狗</b>定时器必备知识