
以<<STM32H7 开发指南(HAL 库版)>>为导引学习! z1 f. h2 [$ k+ O* I8 L SYSTEM 文件夹介绍 本章包括如下 3 个小结: 5.1,delay 文件夹代码介绍;! t- P+ T. ^: f7 W3 N. t 5.2,sys 文件夹代码介绍;# L7 b) s. A+ ~- B 5.3,usart 文件夹代码介绍; 6 E# S" S% ~, C' N% j delay文件 是利用 STM32 的内部 SysTick 来实现延时的,这样既不占用中断,也不占用系统定时器。 HAL 库延时函数 HAL_Delay :只不过它只能实现简单的毫秒级别延时,没有实现 us 级别延时5 l) F( C0 H$ E2 l& k sys 文件夹+ Z& J- u' g9 @- ] 在 sys.h 里面除了函数申明外主要是定义了一 些常用数据类型短关键字。sys.c 里面除了定义时钟系统配置函数 Stm32_Clock_Init 外主要是一 些汇编函数以及 Cache 相关操作函数, USART文件夹 跑马灯实验和按键实验(GPIO的输入和输出) 外设的编程一般流程 1.新建.C文件和.H文件(如led.c),保存在HARDWARE文件下新建子文件(如LED) 2. ![]() " P! V" A9 r% d% ~ F0 D ![]() / b* w5 O \7 A 把新建的HARDWARE文件和.c文件和.h文件添加3 ]3 {7 a9 b- l" c/ l+ [6 \8 t9 ^; C Y 3.h文件定义,.c文件配置,使能外设 4.外设:1)时钟使能7 p0 k2 q/ D- Z& W2 Z$ P" ^ F 2)IO口模式设置 U5 b& l. x- H* ^( E, P 3)其他设置0 K8 W5 {9 p1 `; B& U 串口通讯 ^1 W2 S! L( g+ M4 l 本节点以及下面的外部中断,等节点都可以用STM32CubeMX来配置,简单清晰8 q3 C7 N+ }1 D: q; `9 f, G 4 V; b u5 h0 t; @# `0 u 外部中断 因为我们这里初始化的是 PA0,调用该函数后中断线 0 会自动连接到 PA0。如果某个时间,我们又同样的方式初始化了 PB0,那么 PA0 与中断线的链接将被清除,而直接链接 PB0 到中断线 0。(就是说最好不要用数字相同的IO口做外部中断) 下面我们再总结一下配置 IO 口外部中断的一般步骤: 1)使能 IO 口时钟。 2)调用函数 HAL_GPIO_Init 设置 IO 口模式,触发条件,使能 SYSCFG 时钟以及设置 IO 口与中断线的映射关系。 3)配置中断优先级(NVIC),并使能中断。9 N" I1 D, @- A 4)在中断服务函数中调用外部中断共用入口函数 HAL_GPIO_EXTI_IRQHandler。- S; }9 j Y+ [; k _ 5)编写外部中断回调函数 HAL_GPIO_EXTI_Callback 实现控制逻辑。 / n/ Q3 Q, e s 独立看门狗(IWDG)实验1 a3 Q9 Y" ^5 J 1.含义,功能 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 : H) `( R, w I+ v) p- o 看门狗解决的问题是什么? 在启动正常运行的时候,系统不能复位。 在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生) S5 y9 @$ e0 B& _" j! f 故障它仍有效。6 X1 o" W3 O% p7 r. {- ~ *独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。3 z- C ^3 ^. K4 G 8 M2 ^2 s# T$ C. s# Y$ _( b 窗口看门狗由从APB1时钟分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。; ]: K8 {% @( X u4 G6 d 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。7 U1 C8 [% B3 q; l- @ % Q. A2 M9 _# r3 a# |" l 2. STM32H743 的独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动,即使主时钟发生故 h! \ i4 K0 \) \: G4 B 障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的9 M) e% n# o* o3 } 32Khz,而是在 17~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频1 ^: P, ]0 U4 x+ c 率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。 / [2 ^* w" K# Y& g& k' W 3 .相关寄存器& e# ~* L4 }1 f9 a. b- E7 K! ` (IWDG_KR)0 _/ D8 _' E6 L. z (IWDG_PR)4 L& C& j+ [: W- A& K# D (IWDG_RLR) 1)看门狗溢出时间,该时间的计算方式为: Tout=((4×2^prer) ×rlr) /32 其中 Tout 为看门狗溢出时间(单位为 ms);prer 为看门狗时钟预分频值(IWDG_PR 值), 范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值); 比如我们设定 prer 值为 4(4 代表的是 64 分频,HAL 库中可以使用宏定义标识符( {# P6 G/ M3 o% ]( x IWDG_PRESCALER_64),rlr 值为 500,那么就可以得到 Tout=64×500/32=1000ms,这样,看 门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会& m m: D' U6 ]) D/ R- g% H 导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确+ n& L9 N" M/ ~6 l. Y2 Q& o. n* h4 w 的 32Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。 - r: [9 X8 Q2 y# Q6 T9 f- Y; x 2)接下来我们讲解一下通过 HAL 库配置独立看门狗的步骤: 1)取消寄存器写保护,设置看门狗预分频系数和重装载值+ O! ?* n9 L+ W+ x( f9 z& G3 O7 X7 p& C 2)重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)4 A; r5 h5 U% |6 b0 P 3) 启动看门狗(向 IWDG_KR 写入 0XCCCC) ) [3 M: O/ V9 {+ o7 x( h" v" y 窗口看门狗(WWDG)实验 两个看门狗的区别" Z# v4 v+ ]$ W' t STM32有2个看门狗:独立看门狗和窗口看门狗。( t3 j3 R" I/ O: E3 ] - C, v6 J7 h5 w* d 1.* b a3 W" y' X5 p+ ?7 D, _ 独立看门狗IWDG–独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。 窗口看门狗WWDG----系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。; A+ S3 z: H: q8 ^" z) Q8 s9 ^ c 4 U4 p' _' c# Y) }; J . ~6 D- Z& J+ R" I' b5 P% } 2. 上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保* [+ l4 S8 A+ f% v" p 窗口值大于 0X40,否则窗口就不存在了。8 B R1 Y7 E7 ?. f 窗口看门狗的超时公式如下:* J6 L e* T. o Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /RCC_PCLK3; 其中:6 l2 e# q( X3 ^$ ? Twwdg:WWDG 超时时间(单位为 ms)1 k4 o0 D) g1 l7 y* ` RCC_PCLK3:PCLK3 的时钟频率(单位为 Khz) WDGTB:WWDG 的预分频系数 T[5:0]:窗口看门狗的计数器低 6 位( R" J2 a; k1 l) K" K' R / `9 ], T% k+ ~! q) } O0 X 3. 相关寄存器 WWDG_CR0 A. E9 x4 J" `; V! d8 w3 q2 i WWDG_CFR WWDG_SR $ O) a0 {. a3 s! F 4.步骤如下: 1)使能 WWDG 时钟 2)设置窗口值,分频数和计数器初始值 3)开启 WWDG 4)使能中断通道并配置优先级(如果开启了 WWDG 中断) 5)编写中断服务函数& h8 p, X. T2 p$ G. O( U 6) 重写窗口看门狗唤醒中断处理回调函数 HAL_WWDG_EarlyWakeupCallback " g1 h/ D- j1 s2 L2 b' H) Z2 X5 S% l |
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
STM32H745I-DISCO串口打印
【STM32H745I-DISCO】TouchGFX探索——3、触屏滑屏操作与中文显示
TouchGFX软件下载及使用
【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢
STM32H745I-DISCO硬件信号为空,M4、M7对于硬件信号的优先性判断