克诺德斯博客音频 |
阅读时间: 4 分钟
在最近的博客中,我们讨论了直接给注册人地址写信的后果,如果你没有读过那篇**博客**,那么我建议你请浏览一下那篇博客,你会发现它很有趣。
我们今天要做什么呢?好吧,让我们做一些更有趣的事情,今天我们不打算在寄存器上做文章,也不打算深入研究硬件。今天我们将讨论我们的硬件**(stm32f3-discovery-board**)。让我们向硬件问好。
我们将在硬件里放一条信息,硬件将在我们的屏幕上打印这条信息。
由于我们正在使用嵌入式系统,它们使我们的任务快速而可靠。另外,与传统的计算机相比,它们的体积要小得多,这使它们变得紧凑和便携,对大规模生产很有用。嵌入式系统的管理是相当容易的,因为在其创建过程中使用的元素是廉价和持久的。嵌入式系统还具有成本效益。
对此该怎么办呢?
是的,我们需要做一些事情来进行这个过程。如果你有一个旧版本的电路板,那么你不需要做任何事情,因为你的电路板已经焊接好了,但是如果你有一个新的电路板,那么你需要焊接你的电路板。
不要担心,你可以通过电路板的用户手册(第21页)来检查。
我发现我的电路板是新的,我必须手动焊接它。
为什么我们要这样做?
我知道这个问题会在你的脑海中出现,而且应该是这样。
- 我们将使用 ITM 和iprint! 宏来打印来自微控制器的数据到控制台上。
- 现在,为了将数据打印到控制台,我们需要焊接我们的电路板,以便我们的ITM和iprint!工作正常。
焊接电路板的步骤
- 用一根雌性对雌性的跳线。
- 将它们连接到SWO和PP3上。
这之后,我们就可以开始了。现在我们将能够把数据从微控制器传输到ITM控制台。现在让我们来做这件事...
代码
我们将使用这段代码,我们将在ITM控制台对硬件(Discovery)说你好。你可以到这个 存储库获取以下代码和这里使用的依赖性。
#![no_main]
#![no_std]
/// This program is going to print to the itmdump terminal.
use cortex_m_rt::entry;
use cortex_m::{iprintln,peripheral::ITM};
use panic_itm as _;
use stm32f3_discovery::stm32f3xx_hal::prelude::*;
#[entry()]
fn main() -> !{
let peripherals = cortex_m::Peripherals::take().unwrap();
let mut itm = peripherals.ITM;
iprintln!(&mut itm.stim[0],"Hello Discovery!!");
loop {
}
}
什么是ITM和iprintln!
ITM
- ITM是Instrumentation Trace Macrocell的缩写,它是SWD(串行线调试)基础上的一个通信协议。
- 它可以用来从微控制器向调试主机发送消息。
- 这种通信只有_一种方式_:调试主机不能向微控制器发送数据。
iprintln!
- 该
**iprintln**宏将格式化信息并输出到微控制器的_ITM_。 - iprintln将帮助你对硬件说你好
所以发生的情况是,管理调试会话的OpenOCD接收通过这个ITM_通道_发送的数据,并将其重定向到一个文件。
ITM 协议用帧工作。OpenOCD将接收这些帧,并将它们直接写到一个文件中,而不对它们进行解析。
现在,这些存在于文件中的帧包含了从微控制器收到的数据,但问题是这些数据不是原始数据。现在为此,我们必须做一些别的事情。
OpenOCD文件会发生什么?
如果微控制器使用宏发送字符串 "Hello, world! iprintln ",OpenOCD的输出文件就不会完全包含这个字符串。
为了得到原始字符串,OpenOCD的输出文件将必须被解析。我们将用 **itmdump**程序来进行解析,因为新的数据到来了。
注意:在此之前,你需要安装itm,你可以用这个链接来做。
打开itmdump终端
为此,请遵循以下步骤:-
只要打开终端,在***nix操作系统的** /tmp 目录内或在Windows的%TEMP%目录下运行此命令**。**
$ # itmdump terminal
$ # *nix
$ cd /tmp && touch itm.txt
$ # Windows
$ cd %TEMP% && type nul >> itm.txt
$ # both
$ itmdump -F -f itm.txt
这条命令将阻止itmdump ,因为现在正在观察itm.txt 文件。让这个终端打开。
你需要做的下一件事是运行openOCD,但记住要从与itmdump相同的目录中运行它。
我们现在都准备好了。我们需要做的下一件事是将我们的stm32f3板与系统连接,并运行openOCD的命令。
/tmp$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f3x.cfg
注意:如果你对openOCD不熟悉,那么你可以**访问这个**来设置它。
运行程序
一切都设置好了,现在我们只需要构建/运行代码并将其加载到硬件上。
现在请按照以下步骤操作。
- 货物运行
- 步骤
- 下一步或n
- 下一步
你好,Discovery!
魔术已经完成了,你可以去检查你的itmdump终端,你一定会看到直接来自微控制器的输出。
今天的博客就到这里,我希望你喜欢它。谢谢你付出的时间。
如果你想阅读更多这样的内容? 请订阅Rust Times电子报,每两周一次,直接在你的收件箱中收到见解和最新更新。订阅《铁锈时代》通讯:https://bit.ly/2Vdlld7。