【软件STM32cubeIDE下STM32H743xx使用:看门狗iwdg+复位标志位-基础样例】

软件STM32cubeIDE下STM32H743xx使用:看门狗iwdg+复位标志位-基础样例

1、前言

最近调试H7时,以为H7上复位标志位和F4上不太一样,所以做完实验后,决定有必要记录下,实验结论是一样的,另外也在H7上调试看门狗,让吃灰的H7发挥作用,也用用。

用STM32也好几年了,很多像pwm和串口,也调试过很多了,但仍然认为很多东西,依旧要当自己为新手。像这次调试的这个,之前没有调试过,也没有想到过会要用上。

2 、实验环境

  • 软件环境:STM32cubeIDE 1.8.0
  • 硬件芯片:STM32H743IIT6(正点原子开发板H7)
  • 其它硬件:ST-link-V3SET。
  • 硬件如下,可以看到,因为用到了ST-link-V3SET,因为这个设备自带一个uart串口转换器,省去了串口转换器,如果没有自带,需要弄个进行串口通信的。

3、自我总结

关于F4和F1标志位情况,可以看我之前文章。
软件STM32cubeIDE下STM32F1xx和STM32F4xx使用:备份寄存器+复位标志位-基础样例

(1)对于看门狗(Iwdg):

就是一个防止程序跑飞的看门狗,如果程序跑飞了,他会帮助你复位,不至于发生更大的意外,我们一把写好相关代码后,都希望只要不断电,就一直工作下,所以设这个看门狗,出现意外后,让其帮忙复位。

H7相比F4和F1类似,验证完后,都是一样的地方。但发现在配置看门狗的时候,多了一个"IWDG window value",一个窗口值配置,这个看到后查了一下,网上说法大概是这个意思,如下图所示。

在IWDG的配置中,"IWDG window value"是指窗口值(Window Value)。窗口值是IWDG计数器的一个特殊触发点,用于设置一个时间窗口。在这个窗口内,IWDG计数器必须被重载,否则将导致系统复位。

IWDG窗口值与IWDG预分频器(Prescaler)和重载寄存器(Reload Register)一起工作。窗口值设置了一个较小的计数范围,当IWDG计数器的值位于窗口内时,重载寄存器必须被重新加载,否则会发生复位。这种机制可以防止IWDG计数器无限增加而导致系统停止响应。

(2)对于复位标志位(RCC_CSR):

复位标志位,你可以理解是软件自己检测的一种工具,打个比方,当代码出现异常,不再喂狗的时候,看门狗就会使得整个系统复位,起来后,你去读取复位标志,复位标志位,就会告诉软件,上次是因为什么而复位的。

一些复位信号的产生,会引起整个系统的产生,然后有个地方会存下是什么复位了,记录这个复位,让你好读取。软件做的只有读取和将那个地方清空一下,方便下次起来,好判定。如果不清空,那么因为本次已经置位了,下次,你可能不知道是什么复位了。

调试的时候也发现,以为复位标志在H7和F4也是不太一样的,H7上得上下电复位标志位,是可以真实反映出上下电,以为F4不能,经过验证后,发现一致,记忆是容易出错的。

另外就是H7有着更多得复位标志位。

4 、实验过程

4-1 实验说明

本次实验使用正点原子开发板H7,调试看门狗程序,并读取复位标志位,在不同复位情况下,看复位标志位显示值有何种变化。

4-2 图形下,配置选择

(1)配置时钟和下载

如两张图,我们看到,时钟配置,还是和以前一样的,就是使用外部使用。

但是下载口,已经分开了,单独有个"Trace and Debug"栏,下面的"debug"有选择下载的,我们如下图选择即可。

(4) 时钟配置

可以看到我这步时第四步,而不是顺序第2步,为啥要先配置时钟树呢,因为我们需要知道看门狗时钟,才好计算实际时间,知道看门狗的时钟是32Khz的,如下图所示。

但是在自己写文章,再次进行调试和截图,发现它有不见了,这真的很神奇吧,时钟可以正常配置480Mhz。

(2)配置看门狗

看门狗配置也不太一样了,多了一个选择,"IWDG window value",这个细节部分会说明下,可以随便设个值,然后再代码里改吧。

由上步骤所示,我们知道是32khzd的频率。

那么计算后,就是256/32*1250=10s,也就是10s左右不喂狗,就会复位。

这块我以为窗口值,是代表提前复位,但是实际好像不这样的。这里我以为是10000-128,后来看,好像不是。

(3)配置串口输入-用以printf

这块也遇到一个问题,以前使用F4习惯,uart1默认就是PA9和PA10,没想到这回默认是另一个,这块需要先锁定,然后选择配置uart1,我们对串口没有特别需求(如DMA,或者中断),所以都默认配置了。

(5) 生成代码,加入printf

关于printf,我也是参考自己之前写的文章,之前在看之前文章,几个简单步骤和代码片段,就可以实现prinf了
#关于软件stm32cubeIDE下配置printf重定向无法输出问题-解决方式之一

所以我这边直接截图了,有需要直接看代码。

4-3 代码编写

(1) 看门狗代码

看门狗虽然软件设置好了,但是多了一个"IWDG window value",我这边碰到一个问题,具体问题会在"细节部分"进行说明,这里设置失能。

另外我们也需要加入喂狗代码片段

(2) 复位标志位代码1

至于复位标志位读取,可以继续沿用hal库,也就是F4的写法,如下所示。

(3) 复位标志位代码2

也可以使用另一种方式,是请教大佬的方式,直接使用标志位进行与。

不过发现这样的写法,无法使用hal库清除标志位。

(4) 实验结果H7展示

情况一:看门狗自动复位。

即不喂狗,直接让看门狗复位。

情况二:复位按键复位。

即在看门狗复位前,按下复位按键,可以看到和F4一样的,在F4上,上下电复位标志位"RCC_FLAG_PORRST"是0,这里H7是0,说明没有下电的。

情况三:上下电复位,关总电开关。

为了验证"RCC_FLAG_PORRST"即,上下电复位标志是起作用,将总开关电关掉,重新上电,可以下电的。

4-4 对比F4开发板

为此,重新拿起F4开发板,再做了一组实验,已进行对比实验。

情况一:看门狗自动复位。

即不喂狗,直接让看门狗复位。如下图,所示,这是和H7上没有区别的。

情况二:复位按键复位。

可以看到和H7一样的,在H7上,上下电复位标志位"RCC_FLAG_PORRST"是0,这里H7是0,说明没有下电的。

情况三:上下电复位,关总电开关。

为了F4验证"RCC_FLAG_PORRST"即,上下电复位标志是起作用,将总开关电关掉,重新上电,可以下电的。

5、代码链接

代码链接:https://download.csdn.net/download/qq_22146161/88356935

6、细节部分

(1)printf打印输出

我做实验的的时候,发现在一种特殊的情况,单片机竟然不输出,后来发现是加入"\n",换行符,就可以。

于是我将此情况做了一个实验,使用不同printf的定义方式,看看情况。

后来写文章时,复看原文章时,评论区早有人说这个情况,今天也是补充吧。

情况一:使用定义PUTCHAR_PROTOTYPE方式 。

结果1:不加入换行符,单片机就不会输出。
结果2:加入换行符,单片机就输出。

情况二:使用定义define方式 。

结果1:不加入换行符,单片机就也会输出。
结果2:加入换行符,单片机就也会输出。

(2)看门狗的"IDWG window value"

在实际调试时,发现,在IDWG window value设置值为128时,只要加入喂狗函数,没过两秒,整体就重启了,如下图所示。

后来想到,应该是新加入这个"IDWG window value"代码关系于是在网上找其他人,看看他人怎么写的。

参考文章:https://blog.51cto.com/u_15046463/5685671

在代码里设置相同配置,问题就解决了,即设 失能。

另外我看到资料说这个窗口值是硬件上阈值,所以感觉像是最后兜底的,就是如果一直没喂狗,到超过这个窗口值,直接硬件复位,为此这个值一定比装载值大,才能用来兜底。

(3)时钟配置480Mhz

(4)软件异常,无法新建工程,库文件报错

这块真的很尴尬呢,复测时,发现自己代码直接报错,尝试更换hal库文件都不行,想到IOC文件可能出现问题,于是重新生成一遍代码,就好了,像是软件bug,

并且期间,新建工程,都是空的。

如下图,工程目录test_H7_rst_flag的ioc文件,重新生成一遍代码,就好了

解决后,可以新建新的工程了。

7、总结

这次算是自我更正了,以为H7,F4和F1,不太一样,没想到是一样的,只有实验过后才能测出结论。

相关推荐
scan19 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0110 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh11 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司11 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比12 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie12 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔12 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@13 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887215 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张16 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩