跳转至

2025

业余无线电入门指南

尽管我们或许都听过影视剧中滴答滴答的电报,读过马可尼使用无线电通信的故事。但可能你从未了解过,在这个时代,还有一群热衷于技术的人们自己动手架设天线、操控电台、使用无线电通信,DIY 各种无线电设备。他们遍布所有大陆(包括南极洲)、各个频率,甚至是在国际空间站上也有业余无线电爱好者的存在。

什么是业余无线电?为什么要玩业余无线电?有什么意义?

1 什么是业余无线电

业余无线电(Amateur Radio)是无线电世界中的一个重要部分。它是一项鼓励人们去从事无线电收、发信实践的业余兴趣爱好活动。符合国际电信联盟(ITU)定义爱好者,称为业余无线电爱好者(Radio Amateur),又被称为 HAM 。由于 HAM 在英语是火腿,所以“火腿”也是爱好者的另一个名字。

业余无线电爱好者遵守着这六个字的标准。它由 W9EEA 在1928年提出,是世界上几百万爱好者自愿遵守的准则

体谅 忠诚 进取 友爱 适度 爱国

1.1 业余电台

从设置方式分类,业余电台包括 业余业务 和 卫星业余业务,其规定如下

业余业务:供业余无线电爱好者进行自我训练、相互通信和技术研究的无线电通信业务。

卫星业余业务:利用地球卫星上的空间电台开展的与业余业务相同目的的无线电通信业务。

由此可见,业余无线电有一下特点:

  • 热爱无线电
  • 技术能力的自我训练
  • 不能盈利

业余无线电是爱好者们(HAM)进行爱好活动的

1.2 业余无线电爱好者

业余无线电爱好者系指经正式批准的、对无线电技术有兴趣的人,其兴趣纯系个人爱好而不涉及谋取利润

获得业余无线电操作证就可称为业余无线电爱好者。业余无线电爱好者

2 业余无线电的活动

2.1 UHF/VHF 段直频、中继通信

对于新的业余无线电爱好者,UV 段是最先接触并使用的频率。在 144-146、430-440 MHz 的频率上,我们可以很容易的使用对讲机(手持电台)和本地的业余无线电爱好者进行通信,而且设备较便宜,对通联水平要求较低,非常适合新手入门。

2.1.1 直频通信

直频通信是最简单直接的 UV 段通联方式,两人在同一频率上就能互相通信。438.5 MHz 是一个约定俗成的直频通信频率,在 438.5 有更高的概率遇见其他爱好者。

5 瓦功率的对讲机,可以很容易的达到 5-10 公里的通信距离。若位置较高,四周无遮挡,甚至可能有长达 30 公里以上的通信距离。

2.1.2 中继通信

在大部分地方都有设置业余无线电中继台。中继台的原理就是将接受的信号再发射,以此达到更好的通信距离和效果。中继一般设置在较高的地方,可以得到很强的通信效果。

中继为 HAM 提供更远更多样的 UV 段通联方式,为地址偏僻、难以直频的爱好者提供通联能力,应该得到爱好者们的保护和合理使用。

2.1.3 台网点名活动

很多地方的中继台上都会组织点名的活动,参加活动的爱好者需要汇报自己的呼号、设备、地址。关于点名活动的又来可以参考文章:“台网”“点名”到底是个啥意思?

UV 中继上的台网点名是本地业余无线电活动的重要部分,可以帮助你认识到更多的 HAM。参加点名需要遵守纪律,不可以干扰打断他人。

2.2 UV 段卫星通信

卫星通信,通过携带业余电台的卫星进行通联,通信模式包括 FM 中继、SSB 中继、SSTV 图像、ARPS 数字转发等多种方式。配有业余载荷的一般为近地轨道卫星(LEO)。最易上手的是 FM 调制模式的转发器。由于卫星高速运动导致的多普勒,通信中还应合理改变频率。

2.2.1 SSTV

使用对讲机和一部手机,你就可以接收包括国际空间站(ISS)、rs40s 在内的一些卫星,定期使用 SSTV(图像编码方式) 发送的图片了。你可以使用接受的图片,申请通联确认卡片(QSL卡)。

2.2.2 转发器

如果可以自制或购买 UV 频率的八木天线,还可以进行转发器(类似中继)的通连。由于卫星很高,几乎无法被遮挡,使用转发器可以通联到很远地方的爱好者,甚至是泰国、俄罗斯和日本。

  • 国际空间站、SO-50、AO-123 等卫星都是常见的 FM 转发器卫星,使用对讲机和八木天线就可以使用。其中 AO-123(阿斯图1号)是由哈尔滨工业大学的同学设计制造的立方卫星,他们中大部分都是业余无线电爱好者。
  • 如果你想进一步进行业余卫星活动,你可以尝试使用线性转发器,在 SSB 调制模式下通信。你还可以使用 FT8FT4进行数字通信,使用电报(CW)进行通信,接受卫星遥测数据和气象卫星云图,使用微波频率进行卫星通信。这些通信方式的操作技术难度较大,使用设备价格一般较贵,是真正喜欢卫星通信的爱好者的“进阶玩法”。
  • 如果你喜欢动手,还可以自己进行八木天线、天线云台、微波段抛物面天线的设置等设备的 DIY 。自制八木天线的难度和成本并不高,同时可以获得天线等的理论知识、实践经验。DIY 同样是业余无线电重要的一部分。

2.3 短波通信

在 3-30 MHz 频率上的通信称为短波通信,在这个频率上你可以很简单的实现长距离通信。这个频率需要获得 B 类以上才能使用,需要使用更专业的天线和设备。对于热爱短波通信的爱好者,他们会考取 B 类执照、购买短波电台和天线,在家中或野外架设电台,与更远处的 HAM 进行通信。

通联方式

SSB 语音通信分布在大部分频率上,包括 USB 和 LSB 模式。

FT8是一种弱信号下的数字通信模式,可以轻而易举的通到比 SSB 更远距离的人。你不需要在麦克风前大吼大叫,电脑或手机就可以自动进行数字模式下的通联。

CW,即等幅电报,一般和莫斯电码一起使用。这就是电视剧经常出现的电报,但想要掌握它并不容易,需要长期的学习和训练。

2.4 其他业余无线电活动

还有着其他多种多样的业余无线电活动,如月面反射通信(EME)、流星余迹通信(MS)等。这些

3 如何成为业余无线电爱好者

成为一名业余无线电爱好者

3.1 业余无线电操作证

业余电台操作证从小到大,分 A、B、C 三类,限制使用的频率和功率。如 A 类能使用 U/VHF 段频率且限制 25 瓦功率,但 C 类可以使用所有业余频率,可使用 1000 瓦发射功率。

操作证和个人绑定,需要通过考试获得。A 类考试一般在市级地区进行,场次和频率各地区不同。以西安举例,每年春秋季会举行两次 A 类考试,一般在周末安排有 4 个场次。试题非常简单,采用 300 道的题库抽取 30 道的方式,25 道正确就可以通过,均为选择题(2025-10-01前)。

我国的 A 类操作证持有人数有 20 万人,B 类和 C 类操作证的持有人数更少。B、C类考试场次安排也较少,需要关注地方部门的通知。

3.3 加入长安大学业余无线电协会

线性时不变系统的冲击响应与卷积

线性时不变系统

线性时不变系统(LTI System)有两个性质,线性(Linear)和时不变(Time Invariant)。

对于系统(函数)\(O()\),输入为 \(f_n(t)\),输出为 \(x_n(t)\),满足 \(O(f_n(t)) = x_n(t)\)

线性(linear)

即满足叠加原理。

如果有: $$ O{\ a_1\cdot f_1(t) \ +\ a_2 \cdot f_2(t) \ } = a_1 \cdot x_1(y) + a_2 \cdot x_2(t) $$ 它就是线性的。

时不变(time invariant)

无论在什么时间点,输入相同,输出就相同

即满足: $$ O{ f(t) } = x(t) \Rightarrow O{ f(t - \tau) } = x(t - \tau) $$

时不变系统也称为定常系统,指系统的机械

LTI System 的分析

一个弹簧阻尼系统,就是经典的 LTI 系统。

在弹簧上有一个物块,施加力 \(f(t)\),输出位移 \(x(t)\)

\(f(t)\)\(x(t)\) 的拉氏变换为 \(F(s)\)\(X(s)\),有: $$ F(s)H(s) = X(s) $$ 其中 \(H(s)\) 是传递函数的拉氏变换。

对两边求拉普拉斯逆变换: $$ \mathcal{L}^{-1}[\ F(s)H(s)\ ] = \mathcal{L}^{-1}[\ X(s) \ ] \ \Downarrow \ f(t) * h(t) = x(t) $$ 其中 \(*\) 表示卷积

可见卷积和和内积有拉普拉斯变换的关系

那么什么是卷积?

冲激函数

在推导卷积之前,引入冲激函数(Unit Impulse,或狄拉克函数 Dirac Delta)。它在计算时可以起到类似 “单位 1” 的作用。

定义一个函数 \(\delta(t)\),满足: $$ \delta(t) = 0, t \neq 0 \ 且 \int^{\infty}_{-\infty} \delta(t)dt = 1 $$ \(\delta(t)\) 就叫做冲激函数,它的面积为 1、宽度为 0。

为了方便理解,可以写成离散的形式: $$ \delta(t) \quad = \quad \lim_{\Delta T \rightarrow 0} \delta_\Delta(t) \quad = \quad \delta_{\Delta}(t) \quad = \quad \left{\begin{array}{lc} \frac1{\Delta T} & 0 < t < \Delta T \ 0 & else \ \end{array}\right. \ $$ 在坐标系中,它实际上就是宽度为 \(\Delta T\),高度为 \(\frac{1}{\Delta T}\) 的矩形。当 \(\Delta T \rightarrow 0\), 它就是冲击函数。

QQ_1759822983594

物资

在上手之前,当然需要认识一下将要使用的设备。在 RM 中,使用频率最多的当然是大疆的设备。以下是一些常用的设备。

电机

M3508

img

最常见的直流减速电机,提供动力。

  1. 通常作为轮毂电机,驱动底盘运动
  2. 减速箱可拆卸,无减速箱时可用做摩擦轮电机
  3. 搭配 C620 电调使用

M2006

img

小型电机,是M3508的轻量版。

  1. 可作为供弹拨盘电机
  2. M2006 电机和 C610 电调是绑定关系

GM6020

img

这是一款云台电机,常用于 pitch 轴和 yaw 轴上(即云台电机),也可用作舵轮的舵向电机。

  1. 中空(空心轴),可放置直径 <=18mm 的导电滑环
  2. 反馈角度是绝对位置,不因断电改变零点位置
  3. 内置电调,直接连接 CAN 总线
  4. 可以使用电流或电压控制电机。建议使用电压控制

3510

RoboMaster 3510减速电机

img

很古代的电机,已绝版,大概是 M3508 的远古版本

GM3510

RoboMaster GM3510 直流无刷电机

img

同样古老的电机,绝版。

使用绝对值编码器,内置电调,接口是 XT30 和 can,类似 GM6020。

电调

C620

上文 M3508 处

可以搭配 M3508 电机

  1. 与电机之间由一根 7pin 1.25mm 信号排线和一根三线的

C610

上文 M2006 处

只能搭配 M2006 使用

返回一个绝对位置

820R

RoboMaster 820R 电调

搭配 3510电机 使用

遥控器

DT7 & DR16

img

img

很古老的大疆遥控器,已经停产了,要珍惜使用。可在大疆开发板上直接使用。

DT7 是遥控器,DR16 是对应的接收器。DR16 使用 DBUS 协议(UART 反相,即高低电平反转)和主控板通信。

长戳 DR16 正面右侧孔内,直到LED 绿色闪烁,接收器进入配对状态,可以重新绑定附近的 DT7 遥控器(匹配时距离靠近近,周围不要开启其他遥控器,否则很可能绑定到其他遥控器上)。

大疆开发板

常用的板子有 A、C 两个型号。一般一辆车云台和底盘一共两块主控板,通常分别为 C 板和 A 板。

A 板

A 板常用于底盘,芯片型号是 STM32F407。

A 板的接口如下:

  • SWD 调试器线接口 4pin 1.25mm
  • DBUS 遥控器输入
  • CAN 1 * 4
  • CAN 2 * 4
  • UART
  • USB
  • XT30 公 电源输入
  • XT30 母 * 4(需要软件开启,默认没有电)
  • PWM 排针 * n
  • RST reset 按钮

注意 A 板的接口大部分是卧式,和 C 板的立式接口的接线方向相反。

C 板

C 板常用于底盘,芯片型号是 STM32F427。他有一个 BMI 型号的陀螺仪和一个 型号的磁力计,可测出较为准确的姿态数据,所以常作为云台。

C 板的接口如下:

  • SWD 调试器线接口 4pin 1.25mm
  • DBUS 遥控器输入
  • CAN 1 * 4
  • CAN 2 * 4
  • UART
  • USB
  • XT30 公 电源输入
  • XT30 母 * 4(需要软件开启,默认没有电)
  • PWM 排针 * n
  • RST reset 按钮

注意 C 板的接口大部分是立式,和 A 板的卧式接口的接线方向相反。

裁判系统

大小端字节序

在数据储存中:

  • 数据位 对 地址低位,称为小端模式

  • 数据位 对 地址低位,称为大端模式

STM32 单片机使用小端模式。

引入

有下面代码,问输出是多少

union u8_u16
{
    uint8_t a[3];
    uint16_t b;
};

u8_u16 test;

test.b = 0x66CCFF;

printf("%x,%x,%x", test.a[0], test.a[1], test.a[2]);

上面代码,涉及到了计算机储存数据的方式。答案是不一定。

  1. 如果储存顺序是:
高地址 中地址 低地址
0x66 0xCC 0xFF

那么 a[0] == 0x66,a[1] == 0xCC,a[2] == 0xFF

  1. 但如果是:
高地址 中地址 低地址
0xFF 0xCC 0x66

那么 a[0] == 0xFF,a[1] == 0xCC,a[2] == 0x66

在 0x11FF 中,11 是 “高位”,FF 是 “低位”。

第一种,数据位 对 地址位,称为小端模式。第二种,数据位 对 地址位,称为大端模式

大端和小端

小端模式的优势

小端模式在处理器中具有以下优势:

  • 数据存储方式与内存地址的增长方向一致,便于解析和操作。
  • 在多字节数据的数学运算中,低位字节的优先处理使得计算更加简单。

常见的大小端模式设备

  • 小端模式:STM32、x86架构处理器、ARM(默认小端模式)。
  • 大端模式:STM8、KEIL C51等。

需要注意的是,虽然 ARM 处理器可以支持大端模式,但 STM32 作为 ARM Cortex-M 系列的实现,默认工作在小端模式,且无法通过软件更改其字节序。

应用场景

跨平台通信中,网络协议常用大端,需要进行字节序转换。STM32 在网络通信,常需通过移位运算实现大端。

STM32 处理器采用小端模式,这种模式在嵌入式中非常常见,尤其是在 ARM 架构的设备中。

走线

VGD 2025 赛季全向步兵走线图

注意:

  1. 在云台和底盘之间连接,表示这根线通过了滑环
  2. 裁判系统有一根线通过滑环。因裁判系统单独连线,不和其他部分连接,不记在图中
  3. 电源管理引出的 4 个电源,正负极都是各自单独的网络,不能共地(共负极)

电源

---
title: 电源
---
graph TB
subgraph 底盘
 电池 --> 电源管理

 电源管理 --> 底盘_超级电容管理板
 电源管理 --> 云台_分电板
 电源管理 --> mini_pc分电板

 mini_pc分电板 --> A板

 云台_分电板 --> yaw电机

 底盘_超级电容管理板 --> 底盘_分电板
 底盘_超级电容管理板 <----> 电容组

 底盘_分电板 --> 轮A
 底盘_分电板 --> 轮B
 底盘_分电板 --> 轮C
 底盘_分电板 --> 轮D
 end

 subgraph 云台
 电源管理 --> 发射_分电板
 mini_pc分电板 --> 云台mini_pc分电板

 发射_分电板 --> 摩擦轮A
 发射_分电板 --> 摩擦轮B
 发射_分电板 --> 拨盘
 发射_分电板 --> 弹丸充能

 云台_分电板 --> pitch电机


 云台mini_pc分电板 --> 工控机
 云台mini_pc分电板 --> C板
 end

信号

---
title: 信号
---
graph TB
subgraph 底盘
 A板 --can1--- 底盘can分电板

 底盘can分电板 --- yaw

 底盘can分电板 --- 轮A
 底盘can分电板 --- 轮B
 底盘can分电板 --- 轮C
 底盘can分电板 --- 轮D
 end

 subgraph 云台
 C板 --can1--- 云台can分电板
 A板 --can2--- C板

 云台can分电板 --- 摩擦轮A
 云台can分电板 --- 摩擦轮B
 云台can分电板 --- 供弹

 云台can分电板 --- pitch
 end

卡尔曼滤波

卡尔曼是一种递归的观测算法。基础卡尔曼滤波基于

卡尔曼滤波,用于去除噪声,通过动态融合预测信息和测量信息,实现对系统状态的精准估计。

应用范围:信号处理、导航与定位(如GPS轨迹优化)、机器人控制、传感器数据融合等。

基本工作原理: 1. 用之前数据预测下个数据(基于系统模型的预测) 2. 比对测量值和预测值(计算两者的偏差) 3. 根据比对结果,按比例综合预测值和测量值,得出结果(通过动态权重调整,权衡预测与测量的可信度)

公式1:\(\hat{x_k} = \hat{x_{k-1}} + k_k * (z_{k} - \hat{x_{k-1}})\)

公式2:\(k_k = \frac{e_{EST_{k-1}}}{e_{EST_{k-1}} + e_{MEA_k}}\)

前置知识

在卡尔曼滤波前,不得不理解一些控制和统计的概念。真的很简单!

状态和状态转移方程

状态,系统某时刻属性。如运动小车的状态,可以是位移、速度、加速度、牵引力等。这些变量综合一起,就是状态,一般表示为向量,记为 \({\mathbf{x}}\)

状态转移方程,是状态从上一刻到下一刻的关系,体现为函数。转移体现在用上个状态,得出下个状态。如 \({x = x_0 + vt}\) 就是一种简单的状态转移方程。状态转移方程常用矩阵和向量表示,简化计算,标准形式为 \({ \mathbf{x}_k = \mathbf{F}_k \mathbf{x}_{k-1} + \mathbf{B}_k \mathbf{u}_k }\),其中 \({\mathbf{F}_k }\)是状态转移矩阵,\({ \mathbf{B}_k }\)是控制输入矩阵,\({ \mathbf{u}_k }\)是控制输入(如小车的牵引力)。

协方差

协方差,可以衡量两个变量线性关系的方向(和强度)。

定义:有 \(\{ x_n, y_n \}\) 这样的 n 对变量。\(\Delta x_n = (x_n - \bar{x})\)\(\Delta y_n = (y_n - \bar{y})\) 是n组差值,则协方差\(cov(x,y) = \Sigma (\Delta x_n \cdot \Delta y_n)/(n-1)\)

  • 正负性意义:线性关系方向。大于零,正相关;小于零,负相关。

  • (大小意义:线性关系强度。因x,y单位不同,本身难用。使用相关系数\(R = cov(x,y)/(s_x \cdot s_y)\)衡量相关强度更好,s是标准差。)

卡尔曼滤波中,协方差矩阵(\(\mathbf{P}\))描述状态估计的不确定性。

  • 对角线元素:变量自身方差(不确定性大小)
  • 非对角线元素:变量间的协方差。

卡尔曼滤波

卡尔曼滤波主要分两个部分,预测和更新,通过递归迭代实现对动态系统状态的持续优化估计。

预测

预测阶段的核心是基于系统模型,用前一时刻的状态估计预测当前时刻的状态,并更新不确定性(协方差矩阵)。

  1. 状态预测

根据状态转移方程,用k-1时刻的最优状态估计\({ \hat{\mathbf{x}}_{k-1|k-1} }\)预测k时刻的状态\(\hat{\mathbf{x}}_{k|k-1}\),公式为:

\(\hat{\mathbf{x}}_{k|k-1} = \mathbf{F}_k \hat{\mathbf{x}}_{k-1|k-1} + \mathbf{B}_k \mathbf{u}_k\)

如,匀速运动小车,k-1 时刻状态为 \({(x_{k-1}, v_{k-1})}\) ,状态转移矩阵 \(\mathbf{F} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix}\)\(\Delta t\) 为时间间隔

则预测位移 \(x_{k|k-1} = x_{k-1} + v_{k-1} \cdot \Delta t\)

预测速度 \(v_{k|k-1} = v_{k-1}\)

  1. 协方差预测

预测的状态存在不确定性,需更新协方差矩阵。由于系统运行中存在过程噪声(如路面颠簸对小车运动的干扰,记为\(\mathbf{Q}_k\)),协方差矩阵会增大,公式为:

\(\mathbf{P}_{k|k-1} = \mathbf{F}_k \mathbf{P}_{k-1|k-1} \mathbf{F}_k^T + \mathbf{Q}_k\)

其中\(\mathbf{F}_k^T\)\(\mathbf{F}_k\)的转置矩阵,\(\mathbf{P}_{k-1|k-1}\)是k-1时刻的最优协方差矩阵。

更新

更新阶段的核心是结合当前时刻的测量值,修正预测结果,得到更优的状态估计,并更新不确定性。

  1. 计算测量残差 测量残差(innovation)是实际测量值与预测值的偏差,反映预测与现实的差距,公式:

\(\mathbf{y}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k|k-1}\)

  • \(\mathbf{z}_k\) 是 k 时刻的测量值
  • \(\mathbf{H}_k\) 是测量矩阵,将状态向量映射到测量向量(如仅测量位移时,\(\mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix}\)

  • 计算卡尔曼增益

卡尔曼增益(\(\mathbf{K}_k\))是更新权重,权衡预测值\({ \mathbf{P}_{k|k-1} }\))和测量值\(\mathbf{R}_k\))的可信度。公式:

\(\mathbf{K}_k = \mathbf{P}_{k|k-1} \mathbf{H}_k^T (\mathbf{H}_k \mathbf{P}_{k|k-1} \mathbf{H}_k^T + \mathbf{R}_k)^{-1}\)

  • 测量噪声(\(\mathbf{R}_k\))小,卡尔曼增益大,更信任测量值

  • 过程噪声(\(\mathbf{Q}_k\))小,卡尔曼增益小,更信任预测值

  • 更新状态估计

用卡尔曼增益和测量残差,修正预测状态,得到k时刻状态估计:

\(\hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k \mathbf{y}_k\)

  1. 更新协方差矩阵

修正后的状态不确定性(协方差矩阵)为:

\(\mathbf{P}_{k|k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1}\)

其中 \(\mathbf{I}\) 是单位矩阵。更新后,协方差矩阵通常会比预测阶段更小,状态估计不确定性降低。

通过“预测-更新”的循环迭代,卡尔曼滤波能输出精准的状态估计。

前馈控制

是什么

通过数学或物理模型(公式)直接计算输出,开环,不用反馈数据,就是前馈。

前馈当然是不准确的,因为实际系统中还有很多误差和干扰。所以前馈一般和闭环控制(如 PID)一起使用。

怎么用

前馈

如在电机中,理想状态下轮子电流与电机角加速度成正比,可通过目标角速度估测输出电流:

  • \(I_{前馈} = K \cdot \alpha_{目标值}\)

\(K\) 为一个比例常数,公式 \(\alpha = K \cdot I\) 通过电流近似的得到角加速度。反用公式,可得此扭矩需要的电流近似值。

同理,你可以用电流和速度的关系得到前馈;也可以对任意一个模型分析关系、得到前馈。

在这个例子,前馈得到的电流,和实际需要的电流很相近了。但电机的关系不是完全线性,现实中也存在误差与干扰,所以需要闭环控制器来修正误差。

加 PID

为修正前馈模型误差,可结合 PID 闭环,最终输出电流:

\(I_{输出} = I_{PID} + I_{前馈}\)

其中 \(I_{PID} = PID( \alpha_{目标值}, \alpha_{反馈值} )\)

此时 PID 的工作,变成了计算补偿前馈的电流,从而修正前馈误差(\(I_{真实需要} - I_{前馈}\))。

在这种情况下,前馈降低了 PID 的调节负担,并加快响应速度。

STM32中断

引言

某些事件需要快速反应,若用轮询会浪费时间。将事件判断交给机器,发生时保存当前“现场”,执行处理函数,完成后回到原来程序,这就是中断。

中断

systick也是在AHB总线上的外设,所以使用中断时会导致delay函数(使用了systick)的失效。可以通过改变systick的优先级修复。

外设实现中断的流程:GPIO -> EXTI -> NVIC -> IRQ handler -> cplt callback -> ISR

NVIC指向IRQ函数,IRQ中调用callback,ISR在主程序中。

EXTI触发中断。NVIC索引IRQ函数地址。IRQ分辨使用相同通道的外设。callback清除IT触发标志位,

中断在HAL库中的实现

在HAL库中,中断有以下几个重要接口:

  • IRQ handler
  • callback

IRQ handler 是HAL库提供的中断处理函数。如在uart1中,NVIC指向UART1_IRQ,UART1_IRQ中调用HAL_UART_IRQHandler(&huart1),传递uart句柄。所以IRQHandler一个函数将处理多个uart中断。

callback 为中断提供了对特定事件的回调函数,如传输完成回调RxCpltCallback。回调在IRQ handler中调用,并被传递uart句柄。所以说 callback 也是一个函数处理多个中断。

callback 实现了解耦的作用,一般情况下用户应该使用 callback 的重定义来实现中断任务,避免在IRQ handler中处理任务。

IRQ 有以下几种,其中加粗的是常用的:

词汇表

缩写 意义
interrupt 中断
EXTI external interrupt/event controller 外部中断/事件控制器
EX external TI trigger interrupt
NVIC nested vectored interrupt controller 嵌套向量中断控制器
IRQi nterrupt request 中断请求
ISR interrupt service routine 中断服务程序、中断处理函数
handler 句柄(函数)
callback 回调(函数)
cplt complete 完成
flag 标志
status 状态
IT interrupt trigger (如 stm32f10x_it.c)中断