【北京迅为】《STM32MP157开发板使用手册》- 第三十一章Cortex-M4窗口看门狗实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第三十一章Cortex-M4窗口看门狗实验

本章节最终所完成的实验例程存放路径为“iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程\07_WWDG.zip”。

31.1 WWDG 简介

“看门狗”就是一个计数器,由于位数是有限的,计数器能够装的数值是有限的(比如8位的最多装256个数、16位的最多装65536个数),从开启“看门狗”那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加1,加到计数器盛不下了(术语叫溢出)就就产生一个复位信号,重启系统。”

我们在设计程序时,先根据看门狗计数器的位数和系统的时钟周期算一下计满数需要的时间,就是说在这个时间内“看门狗”计数器是不会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,这个过程叫“喂狗”,这样隔一段时间喂一次狗,只要程序正常运行他就永远计不满,一旦出现死循环之类的故障,没有及时来清零计数器,就会导致装满了溢出,他就重启系统。

STM32MP157总共有三个看门狗,两个独立看门狗 IWDG,一个窗口看门狗 WWDG。独立看门狗只能A7 使用。而窗口看门狗只能M4 使用。IWDG 看门狗有独立时钟,由 LSI 驱动,即使主时钟发生故障它也能保持活动状态,而 WWDG 的时钟由 APB1 时钟分频后得到时钟驱动,最大为 104.5MHz

STM32MP157 看门狗资源框图如下图所示:

31.2 看门狗原理讲解

WWDG 工作示意图如下图所示:

独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到 0 之前如果没有刷新递减计数器的值(即俗称的喂狗)的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义。

WWDG 功能框图如下图所示:

 

首先我们注意到输入为pclk,输出为wwdg_out_rst和wwdg_it。其中pclk为计数器时钟,是由 PCLK1 提供的,最大可为 104.5MHz,后面的分频系数

由用户去配置,那么给 WWDG 时钟频率=PCLK1/(4096*

)。 wwdg_out_rst和wwdg_it分别代表WWDG1复位信号输出和WWDG1的中断输出。

T[6:0]

控制寄存器的低 7 位 WWDG_CR[6:0]用于递减计数,也就是图中的计数器 T[6:0],它的初始值用户可配置,可以配置这 7 位都为 1,这个就是最大的初始值(0X7F)。递减计数器每计数一次的时间间隔=(4096*2WDGTB)/ Fpclk,如果要计数 N 次,则要用的时间为:N*(4096*2WDGTB)/ Fpclk。递减计数器最低可以递减到 0X3F。

W[6:0]

配置寄存器的低 7 位 WWDG_CFR[6:0]也就是图中的 W[6:0],用于与控制寄存器的低 7 位的计数器(T[6:0])的值进行比较,WWDG_CFR[6:0]的值也就是我们说的上限值,由用户设置,不能设置为 0X40,最大可以设置等于递减计数器的初始值。

T6

就是控制寄存器的第 6 位,即递减计数器 T[6:0]的最高位,当递减计数器从 0X40 递减到0X3F 的时候就产生复位,而第 6 位从 1 变成 0。

其中:

:WWDG 超时时间(单位为 ms)

:APB1 的时钟频率(单位为 Khz)

:WWDG 的预分频系数,用户配置,可以选 0~7,如果选为 0,

 =1,如果选为7,则

为128。

T[5:0]:窗口看门狗的计数器的低 5 位,由用户配置,最小为 0x00,最大为 0x3F,配置的越大,超时时间越长。

一般情况下我们会将APB1 的时钟频率设置为104.5Mhz104.5MHz 时钟下 WWDG 的最小最大超时表如下图所示:

WDGTB

最小超时(us)T[5:0]=0x00

最大超时(ms)T[5:0]=0x3F

0

39.20

2.51

1

78.39

5.02

2

156.78

10.03

3

313.57

20.07

4

627.14

40.14

5

1254.28

80.27

6

2508.56

160.55

7

5017.11

321.10

我们来对WDGTB=0的时候进行一个计算,首先计算最小的超时时间,当T[5:0]六位都为0的时候时间最小,计算如下 

31.3 实验目的

1)串口看门狗的学习

2)STM32CubeIDE工具软件的使用与熟悉

实验要求,分别使用LED2和LED3来表示复位状态和喂狗的状态,在看门狗初始化之前默认LED2亮起并且延时500ms,而while循环之中设置LED2为熄灭状态,这样当我们不开启喂狗,且设置看门狗向下计数器的初值足够大,这样如果系统不断复位,就会造成LED2闪烁,而LED3放在看门狗中断,每当喂一次狗就会对LED3状态进行反转。

31.4 实验步骤

31.4.1建立WWDG工程

首先我们打开STM32CubeIDE软件,进入软件界面之后,我们点击File属性,选择NEW下的STM32 Project的选项,如下图所示:

然后我们会进入下图所示界面:在Part Number选择框输入STM32MP157A,然后在右边的选择界面选择STM32MP157AAA,然后点击Next选项 

在Project Name框中输入工程名字WWDG,然后点击Finish选项即可,如下图所示:

等待工程创建完毕,会询问我们是否要安装OpenSTLinux ,由于我们是在windows环境下,所以我们不需要安装,点击NO即可 

至此我们的工程创建完毕,进入工程界面如下图所示界面: 

31.4.2 GPIO功能引脚配置

首先我们在下面的搜索框之中输入我们要配置的引脚,我们在这里以PE1为例进行搜索,输入名称之后,对应的引脚在工程中会闪烁,如下图所示:

然后我们使用鼠标左键点击对应的引脚会弹出PE1的复用功能选择,我们在这里选择复用为GPIO_Output功能,如下图所示: 

配置完复用功能之后,我们还要配置 Pin Reserved 选项如果不配置此项,在生成工程代码的时候将不会看到有关这个 Pin 的初始化代码。继续选中 PE1,右键弹出设置项我们选择Pin ReservedàCortex-M4。如下图所示: 

第二个LED的控制管脚PE14按同样的方法进行配置。

配置完成之后打开左侧菜单的 System CoreàGPIO 进入 GPIO 模式配置界面:如下图所示:

 

点击对应的引脚配置之后会弹出右下方的管脚配置界面,如上图所示:

在下方会列出要配置选项的具体说明和我们要进行的配置。

1)选项 GPIO output level 用来设置IO口的输出电平的高低,这这里我们选择LOW

2)选项GPIO mode 用来设置 IO 口输出模式为 Output Push Pull(推挽)还是 Output Open Drain(开漏)。本实验我们设置为推挽输出 Output Push Pull。

3)选项 GPIO Pull-up/Pull-down 用来设置 IO 口是上拉/下拉/没有上下拉。本实验我们设置为上拉(Pull-up)。

4)选项 Mzximum ouput speed 用来设置 IO 口输出速度为低速(Low)/中速(Medium)/高速 (Hign)/快速(Very High)。我们设置为高速 High 。

5)选项 User Label 是用来设置初始化的 IO 口 Pin 值为我们自定义的宏,这里我们填写为 LED3。按照如上要求设置后的界面如下(由于PE14的配置相同,只是最后的Label值不同,也在下方列了出来):

31.4.3 时钟与看门狗的配置

然后在Clock Configuration里我们选择 HSI,作为锁相环 PLL3P 的时钟源,在 MCU 子系统时钟里输入 209 并回车,软件会自动设置相应的倍频和分频,如下图所示:

设置完成之后,如下图所示,然后再手动配置 APB1DIV、APB2DIV 和 APB3DIV的分频值为 2。当 APB1DIV 的分频数大于 1 的时候,基本定时器的倍频器倍频值始终为 2,所以基本定时器的时钟频率为 209MHz。 

配置完成之后打开左侧菜单的 System Core,选择WWDG1,进入WWDG1配置界面,由于我们是对M4核心进行实验,所以我们对Cortex-M4进行勾选,然后勾选Activated对WWDG进行使能,配置WWDG

分频值为 128,计时器初始值为 127,窗口值为 84,并使能提前唤醒中断。

配置完成如下图所示:

最后在相同界面下,进入NVIC Settings 中断优先级设置界面,勾选Enabled,使能窗口看门狗中断,设置完成如下图所示: 

最后我们需要在Project Manage下的Code Generator选项下勾选 Generate peripheral initialization as a pair of ".c/.h' files per peripheral 选项,这样可以独立生成对应外设的初始化.h 和.c 文件(方便配置的查看),如下图所示:

31.4.3工程的生成与完善

在上述的步骤完成之后,按下键盘的Ctrl+S组合键保存保存 WWDG.ioc 文件,系统开始生成初始化代码,工程生成之后如下图所示:

 

然后我们进行工程的完善,以及添加对应的逻辑代码。

31.4.3.1 对应文件与文件夹的添加

首先在左侧的工程浏览页之中通过鼠标右键在WWDG_CM4的Core目录下创建名字为BSP的文件,具体步骤如下图所示:

由于我们LED章节已经完善了LED对应的文件,所以我们将“iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程\01_LED\LED\CM4\Core\BSP”目录下对应的.c、.h文件拷贝到当前工程的BSP目录下,拷贝完成如下下图所示:

31.4.3.2 main.c文件的完善

我们要修改的main.c文件路径如下图所示:

打开main.c文件,为了规范我们在/* USER CODE BEGIN Includes */和/* USER CODE END Includes */之间添加以下内容

#include "../BSP/Include/led.h"

添加完成如下图所示:

 

然后在 MX_WWDG1_Init()上方,添加以下内容:

   LED2(0);

  HAL_Delay(500);

WWDG初始化之前让LED2的状态为熄灭。添加完成如下图所示:

 

然后在/* USER CODE BEGIN 3 */下添加以下逻辑代码

  LED2(1);

添加完成如下图所示:

进入while循环之后。设置LED2状态为亮起。随后main.c文件中加入WWCG的中断回调函数HAL_WWDG_EarlyWakeupCallback,当递减计数器从初始值 127 递减到 0X40(10 进制为 64)的时候就发生提前唤醒中断,我们就在中断中喂狗

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) {

 HAL_WWDG_Refresh(&hwwdg1);

 LED3_TOGGLE();

}

添加完成之后如下图所示:

 

31.4.4工程的编译

在完成以上步骤之后我们点击工具栏的小锤子进行编译,编译图标如下图所示:

编译完成会在下方的终端中显示打印信息,如下图所示: 

如果报错,需要自己根据错误的提示信息来进行问题的寻找和改正。

31.5.5工程的调试

由于STM32MP157的裸机部分和一般的单片机有些区别,他没有内部的存储,所以只能在程序编译成功之后,通过debug的方式来进行调试(将程序放在内存之中),调试过程如下:

首先,点击菜单栏中的小甲虫Debug调试按钮,弹出以下界面,

在弹出来的界面,按步骤,选择响应的属性(该步骤为Jlink的步骤,如果是STLink,调试探头选择对应的即可)。如下图所示:

选择完成之后,点击右下角的Debug按钮,点击之后,会进行再一次的编译,编译完成之后会弹出如下内容(作者用的是J-LinK),这里弹出的是J-link关于设备的选择,不同调试器的弹窗可能会不同

在弹出来的界面中,选择Accept接受,会弹出以下内容,继续点击下方的OK。 

之后会来到设备选择界面,我们选择Cortex-M4,如下图所示:

选择Cortex-M4之后,点击右下角的OK,会弹出以下界面,选择右下角Switch. 

然后会弹出一个新的页面,选择菜单栏的 resume,按钮开始调试。 

此时,LED3在持续闪烁。

如果想关闭调试,则点击菜单栏的终止按钮即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143294.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java进销存系统源码:管店云进销存解决方案

在当今数字化转型的大背景下,企业对高效、可靠的进销存管理系统的需求日益增长。Java作为一种广泛使用的编程语言,以其成熟的技术栈和强大的生态系统,成为了开发高性能进销存系统的首选语言之一。本文将介绍一款基于Java进销存系统源码的“管…

yolov5s网络结构

鉴于网上关于yolov5s的解读众多然不尽相同,特从YOLOv5官方项目地址:https://github.com/ultralytics/yolov5下载了yolov5的各版本文件并上传至 [资源] 栏目,这里就yolov5s版本的网络结构进行分析展示。 1、yolov5s模型的yaml文件 # Ultralyt…

Git使用教程-将idea本地文件配置到gitte上的保姆级别步骤

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

基于LangChain的Embedding开发手册(保姆级)

前言 时至今日,经过2年的“攻城拔寨”,大模型显然吹进了“寻常百姓家”。如果你还不了解ChatGPT,不了解通义、文心、混元等国内任意一款大模型产品,那么请来博主这里坐坐,我们“边看边聊”。 随着ChatGPT的问世&#…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器,属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格,生成各种各样类似效果的图片,就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片: 不输入任何提示词,出图…

Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)

文章目录 一、 Scrapyd 分布式部署1.1 了解 Scrapyd1.2 准备工作1.3 访问 Scrapyd1.4 Scrapyd 的功能1.5 ScrapydAPI 的使用 二、Scrapyd-Client 的使用2.1 准备工作2.2 Scrapyd-Client 的功能2.3 Scrapyd-Client 部署 三、Scrapyd 对接 Docker3.1 准备工作3.2 对接 Docker 四、…

Flask 设置session 自定义登录验证

"""1. 设置session# 设置session成功 重定向到首页session.permanent True # 设置会话过期时间session[info] usernamereturn redirect(url_for(index))2. 获取sessioninfo session.get(info, default0)return render_template(index.html, infoinfo)3. 设置…

Java笔试面试题AI答之单元测试JUnit(6)

文章目录 31. 如果将JUnit测试方法声明为“私有”会发生什么?1. 测试方法不会被JUnit执行2. 违反JUnit的设计原则3. 潜在的测试覆盖率问题4. 解决方案 32. 如果声明JUnit测试方法返回“String”会发生什么?编译错误运行时行为正确的做法结论 33. 可以使用…

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等。 变电站缺陷隐患检测图像数据集营销介绍 数据集名称 变电站缺陷隐患检测图像数据集(Substation Defect Detect…

微分电路设计

1 简介 微分电路会根据电路时间常数和放大器的带宽来输出某个频率范围内输入信号的微分。向反相输入施加输入信号,输出相对输入信号的极性会反相。理想的微分器电路基本都不稳定,需要增加输入电阻器和反馈电容器,才能达到稳定,但是…

让《米小圈动画中国史》来为孩子打开浩瀚历史的书页!

当我们漫步在浩瀚的历史长河中,每一段故事、每一个人物都如璀璨星辰般闪烁。历史不仅是过去的记忆,更是一面镜子,映射出民族的辉煌与艰辛。然而,对于我们的孩子而言,传统的历史教材常常显得枯燥而乏味。作为家长&#…

【MATLAB源码-第224期】基于matlab的快跳频系统仿真采用4FSK,模拟了单音干扰,宽带干扰以及部分频带干扰,输出误码率曲线以及各节点图像

操作环境: MATLAB 2022a 1、算法描述 跳频通信系统概述 跳频通信系统是一种通过快速切换载波频率来进行信息传输的无线通信技术。它在军事和商业通信中广泛应用,具有较强的抗干扰和抗截获能力。系统设计主要包括信号调制、跳频序列生成、信道模拟以及…

链表的合并,结点逆置,顺序表的高效划分(数据结构作业02)

目录 链表的合并 链表的结点逆置 顺序表的高效划分 链表的合并 已知两个递增有序的单链表A和B,分别表示两个集合。试设计一个算法,用于求出A与B的交集,并存储在C链表中。例如 : La {2,4,6,8};…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden,可通过下面方法下载。 浏览器右键进入检查界面,选择netowork,搜索download.aspx,然后在待下载文件处点击下载,即可出现下载链接,复制为cURL即可下载。…

【Prompt Engineering:ReAct 框架】

ReAct 框架 从 Yao 等人,2022(opens in a new tab) 引入了一个框架,其中 LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。 生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

Rust GUI框架Tauri V1 入门

文章目录 Tauri介绍Vite开始创建 Rust 项目 调用指令window.__TAURI_INVOKE__.invoke is undefined 问题 参考资料JavaScript 模块Vue 框架Vue RouteviteNuxt gitignore文件上传到csdn gitcode网站端本地端 gitcode发布 Tauri介绍 Tauri是一款用Rust构建的开源框架&#xff0c…

Linux操作系统面试题记录

一、进程与线程 1.并发和并行的区别 并发:一个cpu处理器处理多个任务; 并行:多个cpu处理器处理多个任务; 2.进程和线程是什么?区别?何时用线程何时用进程? Linux中其实没有进程线程之分&…

少儿编程小游戏 —— Scratch 火柴人勇者传说

在线玩:Scratch动作冒险游戏 – 火柴人勇者传说免费下载-小虎鲸Scratch资源站 在少儿编程的世界里,创造属于自己的游戏是一件既有趣又富有挑战的事情。而今天要介绍的游戏——《火柴人勇者传说》,便是一个充满冒险精神的作品,专为…

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么?3、通孔和表面贴装技术之间的区别是什么?4、焊…