RM电控讲义【HAL库篇】

这段代码中do while的作用:

宏定义中的语句块do { ... } while (0) 允许你在宏定义中创建一个语句块,从而可以包含多条语句。这在宏定义中特别有用,因为宏只是简单的文本替换,不像函数那样有作用域和返回类型。因此,如果你想在宏中执行多个操作,你需要将这些操作放在一个语句块中。

保证逻辑在一行内完成:使用 do { ... } while (0) 可以确保宏定义中的所有逻辑都在一行内完成。这有助于避免在宏展开时可能出现的语法错误,特别是当宏在复杂的表达式中被调用时。

免编译器警告或错误:如果宏定义中有多条语句,并且没有使用 do { ... } while (0),编译器可能会产生关于未使用的循环变量的警告或错误。使用 do { ... } while (0) 可以避免这些警告或错误,因为循环条件是常量值“零”,所以循环实际上不会执行。

 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);对引脚电平进行翻转

对两个引脚初始化,推完输出,默认为高电平。

C中的三元运算符(X ? A : B):如果x为真(非0),那么宏BEEP(x)将调用HAL_GPIO_WritePin函数来设置(或打开)蜂鸣器;如果x为假(0),那么宏BEEP(x)将调用HAL_GPIO_WritePin函数来重置(或关闭)蜂鸣器。两个函数之间是冒号。

引脚的输入定义默认为高或低电平的作用:

防止输入端悬空:当输入端处于悬空状态时,即没有外部信号连接,其电平状态容易受到外界干扰而改变。上拉和下拉电阻可以将输入端的电平状态固定在一个确定的状态上,防止其受到外部信号的干扰。

确定电平状态:上拉电阻将不确定的信号通过一个电阻提升为高电平,而下拉电阻将不确定的信号通过一个电阻降低为低电平。这样,无论输入端是否接收到外部信号,都可以保证其电平状态是确定的,从而避免数字信号的传输和控制受到干扰。

按键扫描程序加入delay_ms()去抖动,KEY的值由 HAL_GPIO_ReadPin()所得。

按键扫描+switch判断。

一个外部中断的设置(重点看看gpio_init_struct.Mode = GPIO_MODE_IT_FALLING; ):

注意看下图的最后一行,这里的EXTI4_IRQn与PE4是对应的。

中断回调函数:

注意看这三个函数之间的关系,弄明白HAL外部中断回调函数的使用方法。

外部中断可以绕开主循环,避免影响。

usart的使用:

HAL_UART_Receive_IT开启UART接受中断。

串口的底层初始化:

#define USART_EN_RX  1     这种条件限定值得学习。

在串口中断里处理接收到的数据;

    

单片机中的看门狗(Watchdog Timer,WDT)是一个重要的安全保护机制。它由一个独立的时钟和一个计数器组成,用于检测系统是否运行正常。当计数器达到一个预先设定的值时,看门狗会向系统发出警报,以此来检测系统是否运行正常。如果系统运行正常,单片机会在计数器达到警报值之前给看门狗发出“清除”信号,以此来重置计数器,继续监测系统的运行状态。然而,如果系统运行异常,例如出现程序跑飞、受到干扰或陷入死循环等情况,单片机不会给看门狗发出“清除”信号。这种情况下,看门狗计数器会持续增加,当达到警报值后,看门狗会向系统发出警报,使单片机强制复位,从而使程序重新开始执行。这样,看门狗能够确保系统在异常情况下能够安全停止运行,避免造成重大损失。看门狗定时器的溢出时间越短,其灵敏度越高,系统跑飞后复位的时间也就越短,从而提高了系统的安全性。然而,这也意味着需要更频繁地给看门狗“喂食”,即在程序中定期给看门狗设置值,以防止其溢出。
看门狗初始化和喂狗:

需要再主函数中每一秒执行iwdg_feed(); 狗才不会疯强制系统复位。

窗口看门狗与普通看门狗的区别

普通看门狗通常只设定一个时间阈值,系统需要在这个时间阈值内“喂狗”以重置看门狗。如果系统因故障或死锁无法在规定时间内“喂狗”,看门狗会触发复位操作,强制重启系统。这种看门狗方式相对简单,但缺乏灵活性,因为它只有一个固定的时间阈值。

窗口看门狗则设定了两个时间阈值:窗口上限和窗口下限。在这个窗口时间内,系统需要至少“喂狗”一次以重置看门狗。如果系统在这个窗口时间内没有“喂狗”,或者“喂狗”的时间超出窗口上限或下限,看门狗会触发复位操作。这种方式提供了更大的灵活性,因为它允许系统在一定时间范围内“喂狗”,而不是固定在一个时间点。

wwdg_init(0X7F, 0X5F, WWDG_PRESCALER_8);/* 计数器值为7f,窗口寄存器为5f,分频数为8 */

窗口看门狗可以设置中断处理函数,在窗口看门狗需要喂狗的时候调用。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电阻知识详解

基本介绍 电阻阻碍电流流动:只要有电流流过电阻,就会产生功率损耗 基本单位:欧姆,Ω 换算单位:微欧(uΩ)、毫欧(mΩ)、千欧(kΩ)、兆欧&#x…

YOLO v9 出世!

当今的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果能够尽可能地接近真实值。同时,还需要设计一种适当的架构,以便为预测获取足够的信息。现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间转换时&a…

Linux工具篇Vim

分享Linux的一些基础的工具,今天分享的就是Linux下的vim,vim其实是一个编辑器。我们可以理解为Windows下的一个记事本。 这个是vim的键盘图。 Linux编辑器-vim使用 vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是…

前端基础自学整理|DOM树

DOM,文档对象模型(Document Object Model),简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法, 使 Web开发人员可以访问HTML元素!不是具体方…

K8S故障处理指南:网络问题排查思路

1. 前言 对于私有化环境,客户的网络架构,使用的云平台存在着各种差异,K8S网络可能会出现各种问题,此文着重讲解遇到此种问题的排查方法和思路,不会涉及相关网络底层技术描述. 环境说明 由于我们的k8s网络组件默认使…

gitlab的使用

前一篇文章我们已经知道Git人人都是中心,那他们怎么交互数据呢? • 使用GitHub或者码云等公共代码仓库 • 使用GitLab私有仓库 目录 一、安装配置gitlab 安装 初始化 这里初始化完成以后需要记住一个初始密码 查看状态 二、使用浏览器访问&#xf…

18.贪心算法

排序贪心 区间贪心 删数贪心 统计二进制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一维前缀和优化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…

Qt 场景(QGraphicsScene)自绘可自由变换与移动的图元(QGraphicsObject)

文章目录 效果图矩形四个角矩形 效果图 在scene上绘制一个图元QGraphicsObject的矩形&#xff0c;可以自由拖动且拖动四个角可以自由变换矩形需要如下处理。 矩形四个角 四个角的点需要独立处理继承于QGraphicsObject,当我们点击时拖动时发送信号给矩形&#xff0c;进行矩形变…

猫头虎分享已解决Bug || Web服务故障:WebServiceUnavailable, HTTPServerError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

记录解决uniapp使用uview-plus在vue3+vite+ts项目中打包后样式不能显示问题

一、背景 从 vue2uview1 升级到 vue3vitetsuview-plus ,uview组件样式打包后不显示&#xff0c;升级前uview 组件是可以正常显示&#xff0c;升级后本地运行是可以正常显示&#xff0c;但是打包发布成H5后uview的组件无法正常显示&#xff0c;其他uniapp自己的组件可以正常显示…

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序 PacketSender是一款开源的用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序&#xff0c;作者为dannagle。 其官网地址为&#xff1a;https://packetsender.com/&#xff0c;Github源代码地址&#xff1a;htt…

Kubernetes kubeadm 证书到期,更新证书

1.环境说明 lient Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.6", GitCommit:"fbf646b339dc52336b55d8ec85c181981b86331a", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:30Z", G…