问题标签 [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 投票
0 回答
112 浏览

c - 如何在 Docker 容器中为 gcc 设置规范文件

我正在尝试构建 TREZOR 固件,它使用 docker。Dockerfile 内容:

当 gcc 在 Docker 中编译 libopencm3 时,出现错误:

错误:“for”循环初始声明只允许在 C99 模式下注意:使用选项 -std=c99 或 -std=gnu99 编译代码

我的第一个想法是为 gcc 创建规范文件并在此处添加 -std=c99 。但由于一切都在 Docker 容器中运行,我不知道如何解决这个问题。可能是我错了。有什么建议么?谢谢

0 投票
1 回答
1016 浏览

c - STM32 FreeRTOS 与 LibOpenCM3

我有一个 STM32 BluePill Board(STM32F103C8 with 8Mhz Quarz)并尝试上传一个用 LibOpenCM3 和 FreeRTOS 制作的小闪烁程序。但是由于某种原因,FreeRTOS 挂在 vTaskStartScheduler() 中,sys_tick_handler 也没有做任何事情。

我没有使用调试器,只是在 sys_tick_handler 函数中放置了一个 gpio_reset ,并在调用 vTaskStartScheduler 以测试代码是否被执行但它似乎没有做任何事情,我不知道为什么。代码可在此处获得:https ://gitlab.com/feldim2425/stm32-testing

更新:我使用 OpenOCD 进行调试,发现它跳转到 hard_fault_handler 更新 2:UsageFault-Status-Register 设置了 NOCP 位

0 投票
1 回答
617 浏览

stm32 - 无法将 PC15 用作 stm32f030rc 上的 GPIO 输入

我正在使用 stm32f030rc 进行项目。我需要将 PC15 用作 GPIO 输入,但似乎我做不到。

我知道这对 PC14/PC15 与 LFE 振荡器共享,但我当然没有使用该功能。此外,我能够读取 PC14 GPIO 上的正确引脚电平。在关于我的模型的数据表中,PC15 引脚被标记为 I/O,OSC32_OUT 作为附加功能:它可以用作输入吗?

作为参考,这是我用来测试功能的 C 代码;我正在使用 libopencm3 进行初始化。

0 投票
1 回答
354 浏览

gcc - 升级 `arm-none-eabi-gcc` 后部分 `text` 将不适合

我有一个开源的微型鼠标机器人项目。为了更容易编译,我使用容器(Podman 和 Docker 都应该没问题):

这工作得很好,并生成一个main.elf大小约为 874 kB 的文件。但这只要我修复Dockerfile 中的 to 即可arm-none-eabi-gcc-cs7.4.0

如果我删除特定版本或将其设置为9.2.0,则会收到以下错误:

这些版本之间可能会发生什么变化?

如果我将此行添加到我的 Makefile:

然后它用版本编译得很好,9.2.0并生成一个main.elf大小约为 885 kB 的文件。但我想知道性能是否与以前相同(或等效)。

更新

当然,我期待一些性能差异,就像我期待二进制大小的一些差异一样。但我想知道我是否可以期望性能差异超过 20%(特别是如果它现在可以慢 20%)。

新的二进制文件比以前大了不到 2%,我认为这与以前“相同”。:-D

0 投票
1 回答
144 浏览

stm32 - STM32L0xx:获取​​时钟速度

对于我的一生,我找不到在 libopencm3 中获得 STM32L0 芯片时钟速度的方法。总有办法吧?

  • 在 STM32Cube 中,有SystemCoreClock变量。
  • 在 ChibiOs 中,存在STM32_SYSCLK变量。

在 libopencm3 中是否没有变量或函数可以获取此值?

0 投票
2 回答
1328 浏览

stm32 - 第一个 STM32F3 项目使用什么库或项目生成器?

我即将开始我的第一个 STM32 项目。(我以前使用过 atmega MCU,并且在 C 语言方面拥有数十年的经验,主要是服务器端。)

考虑到我想在 Linux 的命令行上使用 make 进行开发,似乎有三个选择。

  1. STM32CubeMX 生成的 makefile 项目,
  2. STM32CubeMX 生成的 makefile 项目,包括 FreeRTOS,或
  3. 使用 libopencm3 的 makefile 项目。

该应用程序将使用不同的协议在 4 个或更多串行端口上处理和发送消息。偶尔会设置或清除 GPIO。

我的问题是:

  • 为什么 libopencm3 存在?为什么有人会选择它而不是 STM32CubeMX 生成的 makefile 项目。
  • 对于这样的项目,学习 FreeRTOS 是否值得?
0 投票
0 回答
530 浏览

visual-studio-code - vscode intellisense cmake-tools 与外部库

我正在尝试使用 CMake 和 cmake-tools for Visual Studio Code 为我的 STM32 蓝色药丸板配置模板项目。它构建得很好,但 cmake-tools 的 Intellisense 功能似乎不适用于外部库(在本例中为 libopencm3)。

这很可能是我这边的配置错误。按照我的 CMakeLists.txt。工具链在单独的 .cmake 文件中定义。

我对 CMake 和 cmake-tools 不是很有经验。

0 投票
1 回答
230 浏览

c - 结构冻结的memset初始化

我在嵌入式(STM32F103)项目中使用的一些库初始化它的结构,memset()由于某种原因导致程序停止响应/挂起。

为了测试这一点,我使用了:

果然这会导致相同的行为。memset()在数组上使用似乎工作正常。

我已经没有关于问题可能是什么的想法,甚至认为它可能是内存对齐问题并尝试__attribute__((aligned(4),packed))在结构上使用,但这也没有帮助。

我正在使用 GCC for ARM 来编译代码:

关于我在这里缺少什么的任何想法?

编辑:

下面是完整的测试代码。我的测试很简单,我正在闪烁 LED。当memset()存在时,代码永远不会到达主循环以开始闪烁 LED。当我发表评论时memset(),LED 会闪烁。

0 投票
2 回答
819 浏览

stm32 - STM32F103 | libopencm3 | GPIO 使用中断问题切换

所以,我试图根据按钮的中断来切换 LED。

理想情况下,当按下按钮时,LED 应该切换,即如果它关闭则打开,反之亦然。但是当我执行此代码时,它会切换并返回其原始状态。

预期结果: LED 关闭 » 按钮按下 » LED 开启

实际结果: LED 关闭 » 按钮按下 » LED 开启 » LED 关闭

我已经添加了去抖动的延迟,因此弹跳不在图片中。按下按钮时,GPIO 的 ODR 也会在 ISR 中设置,那么在退出 ISR 时如何清除它?

我将衷心感谢您的帮助!谢谢你。

0 投票
3 回答
504 浏览

c - 使用 arm-none-eabi-gcc 编译时不考虑优化标志

我想arm-none-eabi-gcc 9.2.1使用libopencm3项目编译一个程序并在 ARM Cortex-M4 处理器上运行它。我的程序由两个文件组成:main.c

test.c

为了编译我的程序,我使用以下 makefile:

我可以使用这个 makefile 编译和运行我的代码。通过运行,make我得到以下输出:

似乎优化标志似乎没有被考虑在内,因为无论我放什么,生成的二进制文件总是相同的,程序总是 print cycles: 196645, 00000063。通过反汇编二进制文件,我得到了 -Os 和 -O3 优化的以下输出:

对我来说这似乎很奇怪,因为代码在速度方面可以明显增强。例如,uxtb可以计算一个而不是两个(如果在 之后执行eor),所以我相信这里有问题。为什么这里没有考虑优化标志?我的makefile有问题吗?