05STM32EXIT外部中断中断系统
STM32EXIT外部中断&中断系统
- 中断系统
- 中断触发条件:
- 中断处理流程和用途:
- STM32中断
- NVIC嵌套中断向量控制器基本结构
- NVIC基本结构
- NVIC优先级分组
- EXTI简介
- EXTI基本结构
- AFIO复用IO口
- EXTI内部框图
- 旋转编码器简介
- 硬件电路
- 外设手册里的介绍
- NVIC
- 中断使能寄存器,
- 中断清除使能寄存器
- 中断设置挂起寄存器
- 中断清除挂起寄存器
- 中断活动位寄存器
- 中断优先级寄存器
- 软件触发中断寄存器
- 中断分组的配置
- 参考手册和数据手册
对射红外传感器计次 旋转编码器计次
中断系统
中断触发条件:
对外部中断来说,可以是引脚发生了电平跳变
对定时器来说,可以是定时的时间到了
对串口通信来说,可以是接收到了数据
当这些事件发生时,情况比较紧急,比如外部中断来了,如果不处理,下一个跳变信号就跟着过来了。
比如串口接收中断来了,如果不读取接收到的数据,那下一个数据再过来,就会把原来的数据覆盖掉。
所以希望当中断条件满足时,CPU能够立即停下当前执行的程序,转而去处理中断事件的程序。
中断处理流程和用途:
比如外部中断来了,需要计次,那就变量++;串口中断来了就把接收到的数据转存起来;处理完紧急事情后,CPU回到原来程序运行的位置。
使用中断系统,能极大地提高程序的效率,如果没有中断系统,为了防止外部中断被忽略或者串口数据被覆盖,那主程序就只能不断地查询是否有这些事件发生,不能在干其他的事情。
如果没有定时器中断,那主函数就只有靠Delay函数,才能实现定时的功能。有了中断系统之后,主程序就可以放心执行其他事情,有中断的时候再去处理。大大提升效率。
中断优先级是根据程序设计的需求,自己设置的。紧急的事情优先级要设置地高一点,这样可以更好地安排中断事件,防止紧急的事件被别的中断耽误。
中断嵌套也是为了照顾非常紧急的中断的,能否进行中断嵌套,由中断优先级来决定。
中断来了,主程序都得立即暂停,程序由硬件电路自动跳转到中断程序中。
中断执行前,进行现场保护
中断执行后,会再还原现场。保证主程序即使被中断了,回来后也能继续运行。
用C语言编程,保护现场和还原现场并不需要我们操作(操作系统里面有中断的概念),由编译器做好。
C语言程序中中断的执行流程:
一般中断程序都是在一个子函数里面,这个函数不需要我们调用,当中断来临时,由硬件自动调用这个函数。
STM32中断
中断通道就是中断源的意思,68个是F1系列最多的中断数量,对于一个具体的型号来说,可能没有这么多中断,所以这个数量看看就行,具体以对应型号的数据手册为准。
STM32的中断非常多,几乎所有模块都能申请中断,
NVIC就是STM32中用来管理中断,分配优先级的。
灰色的部分是内核的中断,
1.Reset复位中断 当产生复位事件时,程序就会自动执行复位中断函数,也就是复位后程序开始执行的位置
2.后面的各种灰色的中断都是内核里面的,一般比较高深,看上去也难理解,但是这些中断我们一般用不到,所以了解一下即可
不是灰色的部分的:就是STM32外设的中断了。
比如:
WWDG 窗口看门狗,用来监测程序运行状态的中断,比如程序卡死了,没有及时喂狗,窗口看门狗就会申请中断,程序就会调到窗口看门狗的中断程序里,在中断程序里就可以进行一些错误检查,看看出现什么问题了。
PVD 电源电压监测,如果供电电压不足,PVD电路就会申请中断,在中断里就知道,现在供电不足,是不是电池没电了,要赶紧保存一下重要数据。
TAMPER 外设电路检测到异常或者什么事件,需要提示CPU的时候,就可以申请中断,让程序调到对应的中断函数里运行,用来处理异常或事件
EXTI0-EXTI4,EXTI9_5-EXTI15_10就是本节外部中断对应的中断资源。
中断的地址的作用:因为程序中的中断函数,它的地址由编译器分配的,是不固定的。但是中断的跳转,由于硬件限制,只能跳转到固定的地址执行程序,所以为了能让硬件跳转到一个不固定的中断函数里面,就需要在内存中定义一个地址的列表。这个列表地址固定,中断发生后,就跳到这个固定位置。然后有编译器再加上一条跳转到中断函数的代码,这样中断函数就可以跳转到任意位置了。
中断地址的列表:叫做中断向量表,相当于中断跳转的一个跳板。(不过C语言编程不需要管这个中断向量表,因为编译器帮我们做好了)
NVIC嵌套中断向量控制器基本结构
NVIC基本结构
在STM32中,NVIC用来统一分配中断优先级和管理中断的,NVIC是一个内核外设,是CPU的小助手。
STM32中断非常多,如果把中断都接到CPU上,那么CPU得引出很多线进行适配,设计上就很麻烦,并且很多中断同时申请,或者中断很多产生了拥堵,CPU就很难处理,毕竟CPU主要用来做运算的。所以中断分配的任务就放到别的地方。所以NVIC就出现了。
NVIC有很多输入口,有多少个中断线路,都可以接过来。(这里斜杠上写个n,意思是一个外设可能会同时占用多个中断通道,所以有n条线),NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,通过一个出口告诉CPU该处理哪个中断,对于中断先后顺序分配的任务,CPU不需要知道
NVIC优先级分组
所以STM32中不存在先来后到的排队规则,抢占优先级>相应优先级>中断号排队
分组方式在程序中是我们来自己选择的,选好分组方式后,配置优先级时,要注意抢占优先级和响应优先级的取值范围,不要超出表中规定的取值范围。
EXTI简介
简单来说就是引脚电平变化,申请中断
上升沿:电平从低电平变到高电平的瞬间触发中断
下降沿:电平从高电平变到低电平的瞬间触发中断
双边沿:上升沿和下降沿都可以触发中断
软件触发:引脚啥事没有,程序里执行依据代码,就能触发中断
任意的GPIO口都可以当做外部中断的引脚,相同PIN不能同时触发意味着PA0和PB0这种GPIO_Pin一样的不能同时用,只能选一个。如果有多个中断引脚,要选择不同的Pin的引脚。
通道数16个GPIO_Pin 对应着GPIO_Pin0-15,加上外加的总共20个中断线路,16个GPIO_Pin是外部中断的主要功能,跟着的4个是来蹭网的。
蹭网原因:外部中断有一个功能:从低功耗模式的停止模式下唤醒STM32。
对于PVD电源电压监测,当电源从过低恢复时,就需要PVD借助外部中断推出停止模式。
对于RTC闹钟来说,有时为了省电,RTC定一个闹钟之后,STM32会进入停止模式,等到闹钟响的时候再唤醒,这也需要借助外部中断。
USB唤醒和以太网唤醒也是类似作用。
但本节主要学习引脚的外部中断,这4个蹭网先了解一下即可。
中断响应:申请中断,让CPU执行中断函数
事件响应:其实是STM32对外部中断增加的一种额外的功能,当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但在STM32中,也可以选择触发一个事件,如果选择触发事件,那外部中断的信号就不会通向CPU了,而是通向其他外设,用来触发其他外设的操作,比如触发ADC转换,触发DMA等。
总结:中断响应是正常流程,引脚电平变化触发中断
事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作。
EXTI基本结构
每个GPIO外设有16个引脚,所以进来16根线,前面讲过EXTI只有16个GPIO的通道,如果每个外设的每个引脚都占用一个,那么EXTI的16个就不够用,所以有一个AFIO中断引脚选择的电路模块,AFIO就是一个数据选择器,它可以在前面3个GPIO外设的16个引脚里选择其中一个连接到后面的EXTI通道里,,所以前面说相同的Pin不能同时触发中断,因为对于PA0、PB0、PC0这些,同多AFIO选择之后,只有其中一个能接到EXTI的通道0上。
通过AFIO选择之后的16个通道,就接到了EXTI边沿检测及控制电路上了,同时4个蹭网的外设也并联进来了,加起来组成了EXTI的20个输入信号,经过EXTI电路后。
分为了两种输出:
上面的接到了NVIC,是用来触发中断的。本来20路输入应该有20路输出的,但可能ST公司觉得20个输出太多了,比较占用NVIC通道资源,所以把其中外部中断的9-5触发同一个中断函数,15-10给分到一个通道里触发同一个中断函数,在编程时,在这两个中断函数里,需要再根据标志位来区分到底是哪个中断进来的。
下面的20条接到其他外设使用来触发其他外设操作的,也就是事件响应
AFIO复用IO口
AFIO主要用于引脚复用功能的选择和重定义(数据选择器的作用)
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射(对应引脚定义表,当想把默认复用功能的引脚换到重定义的位置来,就用AFIO来完成,这也是一大主要功能)、中断引脚选择
AFIO选择中断引脚的结构图:
一系列的数据选择器,比如第一个输入PA0-PG0,尾号都为0,通过数据选择器,最终选择一个接到EXTI0上,在AFIO_EXTICR1配置这个寄存器的EXTI[3:0]位,就可以决定选择哪一输入。
EXTI内部框图
EXTI的右边是20根输入线,输入线首先进入边沿检测电路,在上升沿触发选择寄存器和下降沿触发选择寄存器可以选择触发方式,接着触发信号进入或门的输入端,(数据选择器的符号是梯形,有多个输入一个输出,侧面有选择控制端,根据控制端的数据,从输入选择一个接到输出)
硬件触发或者软件中断寄存器的值接到了或门上,也就是任意一个为1,或门就可以输出1,所以说支持的方式是上升沿、下降沿、双边沿和软件触发。
触发信号通过或门后,分为两路,上一路触发中断,下一路触发事件
触发中断首先会置一个请求1挂起寄存器,这相当于一个中断标志位,我们可以读取这个寄存器判断是哪个通道触发的中断,如果请求挂起寄存器置1,他就会继续往前走,和中断屏蔽寄存器共同进入一个与门,然后是NVIC中断控制器(这里的与门充当开关的作用哦,中断屏蔽寄存器给1就是允许输出,给0就是屏蔽中断)
下一路也是一个事件屏蔽寄存器进行开关控制,最后通过一个脉冲发生器到其他外设,脉冲发生器就是给一个电平脉冲,用来触发其他外设的动作。
上面就是外设接口和APB总线,可以通过总线访问这些寄存器,
使用外部中断模块的特性:
对于STM32来说,想要获取的信号时外部驱动的很快的突变信号,比如旋转编码器的输出信号,可能很久都不会拧它,这时不需要STM32做任何事情,但是一拧它就会有很多脉冲波形需要STM32接收,这个信号时突发的,STM32不知道什么时候会来。同时是外部驱动,STM32只能被动读取,同时信号很快,STM32稍微晚一点读取,就会错过很多波形,所以这种情况就可以考虑使用外部中断。有脉冲过来,STM32立即进入中断函数处理,没有脉冲的时候,STM32就专心做其他事情
红外遥控接收头的输出,接收到遥控数据后,会输出一段波形,需要立即处理,防止转瞬即逝,需要外部中断来读取
按键虽然它的动作是外部驱动的突发事件,但是不推荐外部中断来读取按键,因为外部中断不好处理按键抖动和松手检测的问题,对于按键来说它的输出波形也不是短暂的,所以要求不高时可以在主程序循环读取。如果不想用主函数读取,可以考虑用定时器中断读取的方式。这样就可以做到后台读取按键值,不阻塞主程序,也可以很好地处理按键抖动和松手检测的问题。
旋转编码器简介
第一个编码器:
是一种最简单的编码器样式,使用对射式红外传感器来测速,为了测速,需要配合一个光栅编码盘,当编码盘转动时,红外传感器的红外光就会出现遮挡、透过、遮挡、透过的现象,对应模块输出的电平就是高低电平交替的方波,方波个数代表转过的角度,方波频率代表转速。那就可以用外部中断来捕获这个方波的边沿,以此判断位置和速度,不过模块只有一路输出,正转反转没法区分,无法测量旋转方向
第二个编码器:
左边是外观,右边是拆解结构
内部用金属触点来进行通断,所以是一种机械触点式编码器
左右是两部分开关触点,内侧两根细的触点,都是和中间的引脚连接,外侧的触点,左边接在左边引脚,右边接在右边引脚,中间圆的金属片是一个按键,旋转编码器的轴是可以按下去的,按键的两根线在上面引出来了,按键的轴按下,上面的两根线短路,松手上面的两根线断开就是个普通按键。编码盘也是一系列像光栅一样的东西,只不过是金属触点,旋转时,依次接通和断开两边的触点,并且还有一个关键部分是:金属盘的位置经过了设计,能让两侧触点的通断产生一个90°的相位差,最终配合外部电路,编码器的两个输出就会输出这样的波形。相位相差90°的波形,叫正交波形,带正交波形信号输出的编码器是可以测方向的。单相输出和两相正交输出的区别。还有的编码器不是输出正交波形,而是一个输出方波信号代表转速,一个输出高低电平代表旋转方向
第三个编码器:
直接附在电极后面的编码器,霍尔传感器形式的编码器,中间是一个圆形磁铁,边上有两个位置错开的霍尔传感器,当磁铁旋转时,通过霍尔传感器就可以输出正交的方波信号,
第四个编码器:
独立的编码器器件元件了,输入轴转动时,输出就会有波形,也可以测速和测方向,具体用法再看相应的手册。
第二种是(一般用来调节,比如音响调节音量,因为是触点接触的形式,所以不适合电极这种高速旋转的地方)
另外几种都是非接触的形式,可以用于电机测速,电机测速在电机驱动的应用中还是比较常见。
先学外部中断读取编码器计次数据的用法,学习定时器之后,再看一下编码器测速的用途。
硬件电路
中间的框是旋转编码器,上面按键的两根线,模块并没有使用,是悬空的
下面是编码器内部的两个触点,旋转轴旋转时,这两个触点以相位相差90°的方式交替导通,因为这还只是开关信号,要配合外围电路才能输出高低电平,
R3位输出限流电阻,防止模块引脚电流过大的。
右边是使用这个模块的接线图:VCC和GND接电源,A相输出和B相输出接到STM32的两个引脚上(比如Pin0口和Pin1口,但是别相同),C引脚GND暂时用不到
外设手册里的介绍
NVIC
因为是内核外设,所以的得在Cortex-M3编程手册里找,Cortex-M3编程手册是内核和内核外设的详细介绍,研究内核的转运细节,可以研究这个手册,中文版本会更加友好
有NVIC的说明
NVIC的一些寄存器,包括:
中断使能寄存器,
中断清除使能寄存器
中断设置挂起寄存器
中断清除挂起寄存器
中断活动位寄存器
中断优先级寄存器
(用来设置中断的优先级的)
如果直接配置寄存器设置优先级的话,那还是比较复杂的。不过直接用库函数的话,就直接给结构体赋值就可以了,所以此处寄存器大致看一下就OK了。
软件触发中断寄存器
之后还有中断执行细节的描述
中断分组的配置
此手册中NVIC还少了一个东西,就是中断分组的配置。
中断分组的配置在SCB_AIRCR里,同时寄存器的Prigoup的这三位就是用来配置中断分组的
中断分组的描述:
等后期学习差不多了,需要再详细了解内核是怎么运转的,先学会怎么用。
参考手册和数据手册
STM32的参考手册和数据手册同样也很重要
中断的这个部分实际上是AFIO里面的
对AFIO的描述只有这一句话,就是复用功能引脚重映射的意思,下面全是重映射的表,通过配置寄存器就可以在映射关系表里面切换了
相关文章:

05STM32EXIT外部中断中断系统
STM32EXIT外部中断&中断系统 中断系统中断触发条件:中断处理流程和用途: STM32中断NVIC嵌套中断向量控制器基本结构NVIC基本结构NVIC优先级分组EXTI简介EXTI基本结构AFIO复用IO口EXTI内部框图旋转编码器简介硬件电路外设手册里的介绍NVIC中断使能寄存…...

MetaGPT和LangGraph对比
MetaGPT和LangGraph是两个不同的AI Agent框架,各有其特点和优势:MetaGPT: MetaGPT是一个多Agent协作框架,模拟软件公司的运作方式。它包含多个角色如产品经理、架构师、项目经理和工程师,每个角色都有特定的职责。MetaGPT采用对话模式&#…...

基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)
基于SpringBootHadooppython的物品租赁系统(带1w文档) 基于SpringBootHadooppython的物品租赁系统(带1w文档) 物品租赁系统是电子、信息技术相结合,是一种必然的发展趋势。以互联网为基础,以服务于广大用户为目的,发展整体优势,扩…...

关于 RK3588刷镜像升级镜像”没有发现设备“ 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140287339 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

docker 上传镜像到hub仓库
要将 Docker 镜像上传到 Docker Hub,你需要按照以下步骤操作: 登录 Docker Hub 首先,你需要登录到 Docker Hub。打开终端并运行以下命令:docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…...

查询(q_proj)、键(k_proj)和值(v_proj)投影具体含义
查询(q_proj)、键(k_proj)和值(v_proj)投影,这些投影是自注意力机制的核心组件,特别是在Transformer架构中。 让我们通过一个简化的例子来说明: import numpy as np# 假设输入维度是4,注意力头数是2 input_dim 4 num_heads 2 …...

超详细版阿里云控制台环境配置+数据库配置
目录 一、登录阿里云控制台二、xshell建立远程连接1.安装xshell2.查看公网IP3.新建会话重置密码 三、搭建环境1.安装宝塔面板2.打开宝塔面板 四、安装配置MySQL1.安装2.放行端口号3.新建数据库4.测试连接数据库 一、登录阿里云控制台 登录阿里云控制台,找到实例&am…...

Linux:Linux网络总结(附下载链接)
文章目录 下载链接网络问题综合问题访问一个网页的全过程?WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别?HTTPS解决了HTTP的哪些问题?HTTPS如何解决的?HTTPS是如何…...

Cxx Primer-CP-2
开篇第一句话足见作者的高屋建瓴:类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形,则为通常的算术意义。若它们都为字符串型,则为进行拼接操作。若为用户自定义的class类型,则…...

OpenCV距离变换函数distanceTransform的使用
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数,主要用于计算图像中每个像素到最近的背景(通常是非零像素到零像素&…...

Service Mesh 是一种用于处理服务间通信的基础设施层
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。Service Mesh 的一个流行实现是 Istio,它基于 Envoy 代理和 Kubernetes。 然而࿰…...

QML界面控件加载与显示顺序
一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同,有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …...

C++从入门到起飞之——缺省参数/函数重载/引用全方位剖析!
目录 1.缺省参数 2. 函数重载 3.引⽤ 3.1 引⽤的概念和定义 3.2 引⽤的特性 3.3 引⽤的使⽤ 3.4 const引⽤ 3.5 指针和引⽤的关系 4.完结散花 个人主页:秋风起,再归来~ C从入门到起飞 个人格言:悟已往之不谏…...

tkinter-TinUI-xml实战(12)pip可视化管理器
引言 pip命令行工具在平常使用方面确实足够简单,本项目只是作为TinUI多界面开发的示例。 当然,总有人想用GUI版pip,实际上也有。不过现在,我们就来手搓一个基于python和TinUI(tkinter)的pip可视化管理器。…...

Java中标识符和关键字
1.标识符 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }上述代码中在public class 后面的HelloWorld称为类名,main称为方法名,也可以将其称为标识符,即:在程…...

电子版pdf格式标书怎么加盖公章?
电子版PDF格式标书加盖公章的方法有多种,以下是一些常用的步骤和技巧: 一、手动插入图片法 打开PDF文档:首先,确保你已经安装了支持PDF编辑的软件,如Adobe Acrobat Reader DC、Foxit PDF Editor等。选择插入图片&…...

【开放集目标检测】Grounding DINO
一、引言 论文: Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 作者: IDEA 代码: Grounding DINO 注意: 该算法是在Swin Transformer、Deformable DETR、DINO基础上…...

东莞酷得 PMS134应广8位OTP单片机
1、特性 通用 OTP 系列 不建议使用于 AC 阻容降压供电或有高 EFT 要求的应用。应广不对使用于此类应用而不达安规要求负责 工作温度范围:-20C~70C 1.2.系统特性 一个硬件 16位计数器 两个8位硬件 PWM生成器 三个11 位硬件 PWM生成器(PWMG0,PWMG1…...

[终端安全]-7 后量子密码算法
本文参考资料来源:NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…...

uniapp 支付宝小程序 芝麻免押 免押金
orderStr参数如下: my.tradePay({orderStr:res, // 完整的支付参数拼接成的字符串,从 alipay.fund.auth.order.app.freeze 接口获取success: (res) > {console.log(免押成功);console.log(JSON.stringify(res),不是JOSN);console.log(JSON.stringify…...

Python爬虫教程第一篇
一、爬虫基础概念 1. 什么是爬虫 爬虫(Spider,又称网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说,爬虫通过程序模拟浏览器请求站点的行为,把站点返…...

AI时代:探索个人潜能的新视角
文章目录 Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉 1.5.2 局限二:Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 3 人工智能发…...

【Python学习笔记】Optuna + Transformer B站视频实践
【Python学习笔记】Optuna Transformer 实践 背景前摇(省流可不看): 之前以泰坦尼克号数据集为案例,学习了Optuna的基本操作,为了进一步巩固知识和便于包装简历,决定找个唬人一点的项目练练手。 ————…...

【自动驾驶/机器人面试C++八股精选】专栏介绍
目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…...

Unity中一键生成具有身体感知的虚拟人物动作
在虚拟现实(VR)和增强现实(AR)的浪潮中,如何让虚拟人物的动作更加自然、真实,已经成为一个重要课题。AI4Animation项目,一个由 Sebastian Starke 主导的开源框架,为Unity开发者提供了强大的工具集,以实现这一目标。本文…...

谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集
文章目录 一,拆分配置集二,配置文件中配置多配置集1,引用多配置集2,验证 三,多配置集总结1,使用场景2,优先级 这一节介绍如何加载多个配置集。 大多数情况下,我们把配置全部放在一个…...

UART编程
Q:为什么使用串口前要先在电脑上安装CH340驱动? 中断的作用? 环形buffer的作用? static和valitate的作用 三种编程方式简介 也可以通过DMA方式减小CPU资源的消耗 直接把数据在SRAM内存和UART模块进行传输 ,流程: …...

C++:右值引用
右值与左值 在讲解右值引用之前,我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式,我们可以获取它的地址并且对其赋值,左值可以出现在赋值操作符的左边,但是右值不能。 int i 0; int* p &i; do…...

(算法)硬币问题
问题:有1元,5元,10元,50元,100元,500元的硬币各有C1,C5,C10.C50,C100,C500个。 现在要用这些硬币来支付A元,最小需要多少枚硬币? 该题使用递归算法,利用局部最优解来推导…...

如何隐藏 Ubuntu 顶部状态栏
如何隐藏 Ubuntu 顶部状态栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏Chapter2 Ubuntu增大屏幕可用面积之——自动隐藏顶部状态栏Chapter3 Ubuntu18.04隐藏顶栏与侧栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏 https://www.sysgeek.cn/hide-top-bar-ubuntu/ 准备工作:安…...