问题标签 [libopencm3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
979 浏览

c++ - C++ Makefile LD 错误

我正在使用 libopencm3 用 C++ 编写 ARM。但是我的 Makefile 包含错误。就像你现在可以看到的一样!

我有以下 Makefile:

但是链接(LD)不起作用。查看错误:

错误在哪里?我不知道 LD 有什么问题,当我将这个 makefile 用于 C(不是 C++)时,它工作得很好!?

也许是因为我使用 gcc 而不是 g++ 进行 LD'ing?

谢谢,马丁

0 投票
1 回答
1183 浏览

c++ - Eclipse 使用 libopencm3 编译 STM32F0 但不适用于 STM32F1

我设法为 STM32F051 (@ stmf0discovory) 获得了一个带有 libopencm3 的工作闪烁模板。然后我想为我的 Maple Mini(STM32F103 = cortex-m3)获得一个工作,所以我复制了第一个并将 cpu 标志从 cortex-m0-plus 更改为 cortex-m3,将库从 opencm3_stm32f0 更改为 opencm3_stm32f1 等等上...

但是你可以猜到它没有编译。从编译日志来看,编译器似乎没有调用链接器,这就是为什么它没有找到gpio_mode_setup函数和GPIO_MODE_OUTPUT. 以下是 Eclipse 控制台输出:

str32f0 - 工作:

stm32f1 - 枫木,不工作:

我很确定这是一个愚蠢的错误,但我自己找不到它,希望你能给我一个提示。

非常感谢。

0 投票
1 回答
1488 浏览

c - QtCreator 中有效代码的“预期声明”

我正在使用 QtCreator 进行 C 项目(是的,它主要用于 C++,但到目前为止它对 C 来说还可以)。

现在我在一个编译良好的有效代码上得到了一个红色下划线:

在此处输入图像描述

它基本上是这个用于虚拟 COM 端口的未更改的 libopencm3 示例项目。

你能在代码中看到一些问题,也许不是致命的,但是是什么让编辑认为这是一个错误?

我尝试struct usb_device_descriptor用等效的 typedef 代替,但这没有帮助。

第二行的错误是“预期的},得到。”。关闭}被注释为“额外;`

以下是该结构的声明方式:

0 投票
2 回答
2474 浏览

c - 使用 DMA 在 STM32F3 上生成正弦波 - 输出乱码

我正在尝试使用 const 表、DMA 和 DAC 生成波形。

这是 Discovery F3 板上的 STM32F303VCT。

我正在使用libopencm3,但我希望你能清楚地看到发生了什么 - 这只是设置控制寄存器的功能。

DAC 由 TIMER6 TRGO 触发。

我想我在表定义或表内存地址中一定有一些错误。

DMA 正在运行,我可以看到发送到 DAC 的内容。

但是,这不是我的表格 - 这是它绘制的,由 ADC 捕获:

在此处输入图像描述

有什么问题?

附言。如果我让它运行更长时间,我会得到一些东西(它是周期性的)

在此处输入图像描述

0 投票
1 回答
1057 浏览

stm32 - STM32 DMA:缓冲区中剩余的字节,编码?

很长一段时间以来,我一直在以某种形式与两个 STM32 板进行 DMA 通信。我目前的问题如下。

我有一个运行以下代码的主机(树莓派),等待开发板初始化通信:

基本上,它会等待一个字节的数据,然后将“中午防御”发送到电路板,然后打印发回的所有内容。

板子首先发送一个字节,然后等待所有传入的数据,替换几个字节并将其发回。请参阅本文末尾的代码。该板可以是 STM32L100C 或 STM32F407(实际上是发现板);在这一点上,我正在经历与两者相同的行为。

我看到的输出(在美好的一天 - 在糟糕的一天挂起Written 16 bytes)如下:

如您所见,数据已发送并按预期替换了四个字节,但前面多出了两个字符(^J,或0x5Eand 0x4A)。这些结果是signal_host函数的直接结果。当我用任意的东西(例如)替换字符时x,这就是在该位置输出的内容。有趣的是,它实际上会在沿途的某个地方\n转换为插入符号。^J这似乎发生在与电路板的通信,因为当我简单地在缓冲区中硬编码一个字符串并将dma_transmit其发送到非交互式主机程序时,它就可以很好地打印出来。

看起来我以某种方式错误配置了 DMA,因为有些缓冲区没有被正确清除。此外,我并不真正相信主机端程序使用 stty 的方式。但是,过去我实际上使用这个确切的代码进行了完美的通信。我将它与存储在我的 git 历史记录中几个月的代码进行了比较,但我找不到差异/缺陷。

请注意,下面的代码使用libopencm3并基于libopencm3-examples 中的示例

STM32L1代码:

STM32F4代码:

0 投票
1 回答
1896 浏览

arm - STM32F4上的Libopencm3中断表

我在 STM32F4 上的项目中使用 libopenCM3。我以前使用过 ST 开发的标准外设库和更新的硬件抽象层。

在这些库中,您有包含向量表定义的程序集文件(启动文件)。

这就是我为 libopenCM3 所缺少的。你能告诉我在哪里可以找到这张桌子吗?还是以其他方式完成?

我真的需要在我的项目中使用中断。

谢谢。

0 投票
0 回答
448 浏览

c - 如何在基于eclipse的IDE中安装第三方库

我已经下载了基于 Eclipse 的 STM32 和 IDE SW4STM32 的“libopencm3”库。

我想将“c:\lib\libopencm3”添加到许多项目(如 <stdio.h>)中使用的库中。

我的 IDE 在编译和编辑代码期间无法识别 #include <libopencm3/stm32/f4/nvic.h>

编译期间的错误文本:“致命错误:libopencm3/stm32/f4/nvic.h:没有这样的文件或目录 nvic.h”

我该怎么办,Eclipse(SW4STM32)开始将 <libopencm3/stm32/f4/nvic.h> 识别为 C:/lib/libopencm3/stm32/f4/nvic.h

我在 Windows 上工作。我需要像新手一样的解释(逐步详细说明),因为我现在开始使用 Eclipse 的配置,我必须快速开始使用第三方库为 STM32F4 处理器开发应用程序。

0 投票
1 回答
998 浏览

stm32 - LibOpenCM3 vector table is all blocking-handler

The answer to this question here
Libopencm3 interrupt table on STM32F4
explains the whole mechanism nicely but what I get is whole vector table filled with blocking handlers.

I know that because I see it in debugger (apart from the whole thing not working): disassembly screenshot showing vector table.

It is as though linker simply ignores my nicely defined interrupt handler function(s), e.g.:

I am using EmBitz IDE and have followed this tutorial here to get libopencm3 to work (and it does work except for this issue).

I have checked the function names n-fold and have tried several online examples including those from the libopencm3-examples project.

Everything compiles without a glitch and loads into the target board (STM32F103C8) and runs fine - except no ISRs get invoked (I do get interrupt(s) but they get stuck in blocking handlers).

Does anyone have an idea why is this happening?

0 投票
2 回答
814 浏览

c++ - C 和 C++ 之间的全局变量

我正在为 ARM STM32F4 开发混合 C/C++ 程序,但在访问 C 部分中定义的全局变量时遇到问题。这是一个重现问题的简单测试代码。

测试.h:

测试.c:

主文件

主.cpp:

但是,当我在调试器中运行它时,我可以看到 strings[0](例如)指向的内存完全归零。

注意:while 循环中的部分不相关,我只是添加它以获得一些反馈并避免编译器剥离未使用的字符串值。

那么我在这里做错了什么?

编辑

我在 Linux 下使用 Eclipse,gnu-arm-none-eabi。

编译器和链接器命令行和输出:

链接器脚本(不是最干净的,我用它做了一些测试)。

libopencm3_stm32f4.ld:

编辑

我正在研究这个问题,但我有点困惑。

启动代码包括以下内容:

所以对我来说似乎没问题。

.map 文件提供以下信息:

现在,当我运行调试器时,我从一开始就看到了 &_data==&_edata==0x2000000c ,而且我还注意到 _data 在 .map 文件中出现了两次。

那么,链接描述文件中是否有错误?

0 投票
1 回答
74 浏览

linux - 使用正则表达式模式时的 AWK 不同版本行为

背景:

最近我尝试在 Ubuntu 14.04 上构建libopencm3-examples并遇到构建错误(而对于 Ubuntu 16.04.1 LTS 则可以正常工作)。我开始挖掘以找出原因。正如我所发现的,libopencm3 使用特定的链接器脚本生成器:

libopencm3-examples/libopencm3/ld/README

此工具的目的是将目标微控制器特定定义传递给链接器脚本模板。因此它在模板脚本下使用预处理器并传递目标特定参数,如下所示:

使用 awk 脚本检索此参数。

为了生成 -D_XXX 密钥,此脚本在设备数据库下运行,./libopencm3/ld/devices.data 如下所示:

问题:

awk 脚本部分,从数据库中提取定义信息如下所示:

数据库中的行,由脚本处理:

让我感到困惑的是,建议的模式 ( /[[:upper:]]*=/) 应该匹配 [ROM]=256K fe,而不是 ROM=256K(是吗?)。无论如何,正如我已经提到/[[:upper:]]*=/的适用于 ubuntu 16.04(GNU Awk 4.1.3)(为什么?),而对于 14.04,我需要更改/[[:upper:]]*=/->/[:upper:]*=/强制它工作(这是一个错误还是什么?)。我错过了什么吗?