问题标签 [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 回答
797 浏览

c - 如何在 platformio 上使用本地库构建项目?

问题:无法理解为什么项目没有使用本地库构建。

在构建项目时,我的终端出现以下错误:

我的项目树如下所示:

项目树

根据 platformio lib 自述文件,我在 src/main.c 中添加了以下内容

我对平台 io 的配置是:

clock.h 包含:

clock.c 包含:

0 投票
0 回答
44 浏览

stm32 - AC6 eclipse - 使用 libopencm3 运行示例闪烁器的问题

我在测试来自 libopencm3 的 STM32F103 的代码示例时遇到问题。我在包含 inc 文件的目录中包含了一个 libopencm3,并将 inc 目录添加到“路径和符号”中。即使我在目录 inc 中有文件“libopencm3/stm32/common/rcc_common_all.h”,我也会收到类似没有文件或目录的错误。我做错了什么?

屏幕1

屏幕2

0 投票
1 回答
108 浏览

c - C 函数声明中的混淆语句

我正在通过 STM32 MCU 上的 USB 驱动程序的代码实现。我对 C 语言的理解有点有限,我遇到了这个我不清楚的函数定义。

我不明白函数声明中的最后一个参数,它似乎实际上是在为参数定义另一个函数,并采用奇怪的两个星号作为参数。有人可以解释这是什么以及如何在实际的函数调用中使用它吗?

0 投票
0 回答
96 浏览

stm32 - 使用通用定时器延迟 - 比预期的要快

我已经使用我的 nucleo-g070 板上的一个基本计时器(不是 systick)编写了一个延迟函数。默认时钟为 16MHz(如果我查询 APB1 频率,我得到 16000000)。但是,LED 闪烁的速度太快(几乎看不到),所以确实出了点问题。

这是代码:

我也尝试过其他计时器,结果相同。然而,发生了一件奇怪的事情——我错误地写了 TIM2(不知道 MCU 没有它),我得到了预期的 1s 延迟。同样,在数据表中没有指定 TIM2。那么这里发生了什么?

0 投票
1 回答
91 浏览

c - 将代码组织成模块化的、自包含的块

我正在寻求智者的帮助。:-) 这不是关于测试本身的技术帮助,而是更多的代码组织问题。我正在使用 libopencm3 HAL 和 ceedling 作为测试套件的 STM32 项目。

我将问题保持简短并仅引用一小部分来证明这一点,显然代码中还有其他此类模块。

深入研究这个问题,主函数调用了一个函数“Init”,该函数存在于它自己的模块“Init”中。Init 从 IO 模块调用几个函数——IOInit 和 IOBlink,它们初始化 GPIO 并以特定模式闪烁 GPIO。

IOInit和IOBlink的形式如下

其中 GPIO 和 PATTERN 分别是 STATUS_LEDS、POWERUP 之类的东西,可以是枚举或 #define,具体取决于我选择构建它们的方式。

所以第一个问题就在这里,在这里定义IOInit 和IOBlink 的参数有什么意义?如果我想要一些在这里冗长但稍后在较低级别的函数调用中得到解决的参数?我将如何定义论点?作为 uint8_t,枚举,#define?

所以他们可以看起来像

现在,IOInit 和 IOBlink 在位于 HAL 顶部的“DriverIO”模块中调用它们的较低级别的函数。DriverIO 具有相应的功能 - InitIO 和 GPIOToggle,它们可能看起来像这样

现在有一些明显的明显的事情我认为可以而且应该改进。

所有三个层,Init、IO 和 DriverIO 都需要一个公共包含,其中包含 STATUS_LED_PORT 和 STATUS_LED 的定义 - 这闻起来很糟糕。这个想法是让每一层更加模块化和自包含,如果我必须在所有三层中包含 BSP.h 或类似的东西,这将失败。

2a. DriverIO 无法模拟和测试 - 因为它位于 HAL 之上。- 解决这个问题的一种方法,从我在这里读到并且可以理解的是添加一个“垫片层”或一个“包装器”,它基本上位于 DriverIO 和 HAL 之间,我可以简单地将标题包含在“包装器”中DriverIO,模拟包装器并测试 DriverIO。

2b。垫片层还有另一个问题。低级 HAL 使用 typedef 枚举作为参数,垫片层和上述层将无法访问这些参数。那么 shim 层中的翻译函数会是什么样子?

例如 - libopenCM3 HAL 中的时钟启用功能如下所示

在垫片层中它会是什么样子?考虑到 DriverIO 不会知道枚举 rcc_periph_clken 的样子?

整体架构在设计时感觉还不错。但在实施过程中它真的崩溃了。原则上,main 只调用状态函数,每个状态函数只调用存在大量控制逻辑的中间层函数,中间层调用位于 HAL 上的驱动层函数。我为这篇冗长的帖子道歉,但我在设计和架构阶段花了很多时间来做这件事,我无法直截了当地思考。我患有一些分析麻痹。这可能是一个非常简单的解决方案,但我无法直接看到它。

再次,如果我没有多大意义,我深表歉意。我已经盯着这个看了好几天了,我认为它对其他人没有多大意义(如果有的话)。我试图让它可以理解,但这可能只是我缺乏梦话。请让我知道是否有特定部分我可以以更好的方式解释并说清楚。

真诚感谢任何帮助。

0 投票
1 回答
124 浏览

stm32 - 在 STM32F1 Blue Pill 上的多个 USART 连接之间发出中继消息

我在 USART 连接上有一个 STM32F103C8T8 和两个模块(SARA 和 ESP82)的设置。我们目前正在使用 libopencm3 和 FreeRTOS 库。

目标

我希望 STM 向 SARA 模块发送 AT 命令,接收响应并将来自 SARA 模块的消息中继到 ESP 模块。全部通过 USART 连接。

设置说明:

STM 连接到 USART2 上的 SARA R412 LTE-M/NB-IoT 板,ESP8266 连接到 USART3。

SARA R412 的 PWR_ON 和 RST 分别连接到 A5 和 A4。这些用于电源循环以正确打开 SARA 模块。

STM32 有一些硬编码命令,这些命令被发送到 USART2 上的 SARA 模块,作为回报,该模块应该回答,然后这个回答应该由 STM32 中继到 USART3 上的 ESP8266。

出于测试目的,ESP 没有连接 atm,我们只是使用 TTL 监听同一个 USART 端口。

下面是 TTL 到 STM 连接的图像: TTL 到 STM 连接

下面是 STM 到 SARA 连接的图像(SARA 板上的 RX 和 TX 已切换): STM 到 SARA 连接

问题:

将 SARA 的消息应答中继到 ESP8266 时,出现了问题。我们遇到了一些连接,其中消息被正确转发,但是它非常不一致,并且大多数时候它卡在一个字符上。

我们尝试了什么:我们使用 TTL 连接器和 minicom 来监听 USART 连接并查看问题出在哪里。我们观察到 SARA 模块正确地接收了来自 STM32 的命令,并且还正确地回答了相应的消息。接下来发生的事情是 STM32 应该正确接收消息,但是在监听 USART3(ESP usart 连接)时,消息有时正确,有时不正确。

我们还尝试降低波特率,但结果没有差异。

STM32 可以在 USART2 和 USART3 上很好地发送命令,但是应该转发的答案有时没有正确转发(或根本没有转发)。

我们怀疑问题出在我们的usart_get_string方法中,该方法将来自一个 USART 的消息中继到另一个 USART 连接:

该方法非常幼稚,received = usart_recv_blocking(usartSrc);部分可能应该在第一个 if 语句中,但如果我们这样做,则不会返回任何内容。

包括完整的代码:

以下是在 USART3 上收听时 在minicom中观察到的输出示例。在此处输入图像描述

我们已经通过与其他模块(例如其他ESP)互换来验证接线应该是正确的,并且接线应该是正确的。电源来自 TTL(即 3v3)并进入面包板,STM32 和 SARA R412 板从这里获得电源。

编辑:

我按照建议测试了 FreeRTOS 计时器,但不幸的是无法解决我的问题:

我通过以下方式在 main 方法中创建了一个 FreeRTOS 计时器:

get_string()方法中,我首先将计时器重置。更新后的方法如下图:

0 投票
1 回答
41 浏览

stm32 - libopencm3 STM32G0:GPIO输入不起作用

我的代码没有将 GPIO 设置为 Nucleo-G071RB 上的输入。MODER 寄存器完全设置 (0xffffffff),GPIO 用作输出。

我做错了什么?

代码:

0 投票
0 回答
38 浏览

stm32 - Blackpill STM32F411CEU6 - 带有 libopencm3 的 PWM 不工作

我正在尝试让 PWM 与计时器 3 一起工作,我已按照参考手册进行操作,并相信我一切都正确,但我在输出上一无所获。

我的代码在下面,我一定遗漏了一些东西

0 投票
0 回答
54 浏览

c++ - 如何使用 OpenCM3 + FreeRTOS + CMake 构建到 ARM CM4?

我正在尝试在 STM32F4Discovery 板上对 ARM STM32F407 进行编程。首先,我用 OpenCM3 + CMakeLists.txt 构建了一个项目。有效!LED 闪烁。;-) 现在,我正在尝试使用 OpenCM3 + FreeRTOS + CMakeLists.txt 制作相同的项目。不管用!:-( 无法链接 xTaskCreate 和 vTaskDelay。

请任何人都可以看到我要去哪里错了吗?

我从这里得到了我的 FreeRTOSConfig.h 。

下面我显示错误消息和我的 CMakeLists.txt 文件。