让我们对硬件说声 "你好"。一个神奇的对话!

178 阅读4分钟
克诺德斯博客音频

阅读时间: 4 分钟

在最近的博客中,我们讨论了直接给注册人地址写信的后果,如果你没有读过那篇**博客**,那么我建议你请浏览一下那篇博客,你会发现它很有趣。

我们今天要做什么呢?好吧,让我们做一些更有趣的事情,今天我们不打算在寄存器上做文章,也不打算深入研究硬件。今天我们将讨论我们的硬件**(stm32f3-discovery-board**)。让我们向硬件问好。

我们将在硬件里放一条信息,硬件将在我们的屏幕上打印这条信息。

由于我们正在使用嵌入式系统,它们使我们的任务快速而可靠。另外,与传统的计算机相比,它们的体积要小得多,这使它们变得紧凑和便携,对大规模生产很有用。嵌入式系统的管理是相当容易的,因为在其创建过程中使用的元素是廉价和持久的。嵌入式系统还具有成本效益。


对此该怎么办呢?

是的,我们需要做一些事情来进行这个过程。如果你有一个旧版本的电路板,那么你不需要做任何事情,因为你的电路板已经焊接好了,但是如果你有一个新的电路板,那么你需要焊接你的电路板。

不要担心,你可以通过电路板的用户手册(第21页)来检查。

我发现我的电路板是新的,我必须手动焊接它。


为什么我们要这样做?

我知道这个问题会在你的脑海中出现,而且应该是这样。

  1. 我们将使用 ITMiprint! 宏来打印来自微控制器的数据到控制台上。
  2. 现在,为了将数据打印到控制台,我们需要焊接我们的电路板,以便我们的ITM和iprint!工作正常。

焊接电路板的步骤

  • 用一根雌性对雌性的跳线。
  • 将它们连接到SWO和PP3上。

connectionconnection

这之后,我们就可以开始了。现在我们将能够把数据从微控制器传输到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

  • ITMInstrumentation 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

codecode

这条命令将阻止itmdump ,因为现在正在观察itm.txt 文件。让这个终端打开。

你需要做的下一件事是运行openOCD,但记住要从与itmdump相同的目录中运行它。

我们现在都准备好了。我们需要做的下一件事是将我们的stm32f3板与系统连接,并运行openOCD的命令。

/tmp$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f3x.cfg

codecode

注意:如果你对openOCD不熟悉,那么你可以**访问这个**来设置它。


运行程序

一切都设置好了,现在我们只需要构建/运行代码并将其加载到硬件上。

现在请按照以下步骤操作。

  1. 货物运行
  2. 步骤
  3. 下一步或n
  4. 下一步

codecode


你好,Discovery!

codecode

魔术已经完成了,你可以去检查你的itmdump终端,你一定会看到直接来自微控制器的输出。

今天的博客就到这里,我希望你喜欢它。谢谢你付出的时间。


如果你想阅读更多这样的内容? 请订阅Rust Times电子报,每两周一次,直接在你的收件箱中收到见解和最新更新。订阅《铁锈时代》通讯:https://bit.ly/2Vdlld7

Magical AddressMagical Address

分享Knol。

相关信息