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

c - 如何检测 stm32f4discover 上的按钮按下?

我喜欢检测按钮按下以切换板上的 4 个 LED,例如

据我所知,但按钮点击检测没有按预期工作:

0 投票
1 回答
398 浏览

c++ - Using operators for I2c operations

I have a STM32F2 controller and a FRAM device FM24V10-G connected to it via I2C. Usually, in order to communicate with I2C devices I use a library, based on libopencm3. However, using FRAM requires a slightly different order of I2C actions(like sending start, 7 bit address, etc), meaning I can't use standard library functions like read and write, which helped me with other I2C devices. In this library I2C is implemented as a class, and it has stream operators overloaded in order to send those I2C commands in a desired order.

For example:

Sometimes, some of these commands fail to be executed, resulting in the CPU waiting for some flag(like in case of Wait_End), stopping the whole system from functioning.

So here's my question: Is there a way to return some kind of a timeout flag in the code above? For me, it's crucial to have the system functioning at all times, just skipping one command if the I2C operation fails and reaches timeout is OK.

Thanks to everyone who is reading this!

0 投票
1 回答
913 浏览

c - Makefile不适用于多个c文件但适用于单个c文件

该 makefile 用于为 ARM 微控制器制作 hex 文件。我的 makefile 获取文件夹中保存的所有 c 文件并生成 hex 文件。hex 文件、.obj 文件等放在 bin 文件夹中。

当文件夹内只有一个 c 文件时,我的 makefile 工作正常(即我能够看到 hex 文件、.obj 文件等)。但是如果我在文件夹中放置多个 c 文件,构建会失败。以下是当我有多个 c 文件时得到的错误。

我附上我的makefile以供参考。

您能否让我知道为什么它不适用于多个 c 文件?

0 投票
1 回答
2946 浏览

c - 静态库链接问题(没有引用 main,或者没有引用)

我有一些代码可以重用于不同的嵌入式项目,所以我决定创建一个库。该库建立在另一个更广泛的静态库 (libopencm3) 之上

我只有一个(目前)c 文件编译成一个目标文件,然后存档。

我不确定是否应该将库中的目标文件与 libopencm3 链接,或者是否应该在稍后链接我的应用程序时这样做。我假设是前者,但链接器抱怨 main() 没有定义(它在 libopencm3 中引用):

因此,不要链接事物。

并在我构建程序(lsm303.bin)时尝试链接所有内容。但是当我这样做时,看起来 libopencm3 没有链接到我的静态库。

对此有何见解?我应该在构建库时链接我的库吗?

0 投票
2 回答
2219 浏览

c++ - 未定义的对 C++ 中函数的引用

我进行了搜索,但没有一个答案真正解释了我所看到的。

我有一个正确编译的文件,并添加了一个新的包含:

再次编译就好了。现在,我添加一个函数:

现在我得到:

这是 usart.h 文件:

如果我注释掉该行void usart_set_baudrate(u32 usart, u32 baud);,我会收到额外的警告:

所以它似乎至少在某种程度上正在发挥作用。C++ 有点新,所以不太确定我还能尝试什么。任何指针?

生成文件:

0 投票
0 回答
2403 浏览

arm - STM32 USB OTG:如何正确刷新 Tx FIFO?

F4xx 系列芯片的 STM32 手册说应用程序TXFFLSH在寄存器中写入位OTG_FS_GRSTCTL以刷新 TxFIFO。作为注释,它提到...应用程序必须仅在检查内核既不写入 TxFIFO 也不从 TxFIFO 读取之后写入该位。作为一种方法,它建议确保设置 NAK 有效中断(我认为这意味着寄存器GINAKEFF中的位OTG_FS_GINTSTS)以确保内核没有读取 FIFO,并检查AHBIDL(AHB 空闲)位OTG_FS_GRSTCTL设置为保证没有任何东西被写入 FIFO。STM 本身提供的(糟糕的)USB OTG 库忽略了这两项检查,而免费libopencm3库仅检查 AHB 空闲位。我的问题如下:

  1. 手册不建议在执行上述检查和写入TXFFLSH位之前禁用 USB OTG 内核。这是否不会让内核在执行检查和写入 FIFO 之间开始使用 FIFO 的可能性TXFFLSH

  2. “NAK 有效”位仅保证不会从 TxFIFO 读取非周期性端点的数据。除非内核被禁用,否则这是否仍使内核能够将 FIFO 用于同步端点?

我知道这些是“挑剔”类型的问题,但我正在进行的项目应该会产生一个非常可靠的硬件,客户多年来无法负担检查设备,所以这些细微之处很重要(是的,我们启用了看门狗等,但我们需要核心在大多数情况下无需重置即可工作)。

0 投票
1 回答
422 浏览

eclipse - PX4软件下载错误

我有 Windows 7 32 位操作系统。我已经下载了 Eclipse、Java、minGW、GIT Bash 但无法下载固件。在安装工具链的步骤中,它说去 px4 toolchain->px4 软件下载和 3 个目录固件,bootloader 和 libopencm3 将自动下载到 C:/px4。这没有帮助,我是初学者。我应该怎么办?

0 投票
2 回答
13779 浏览

stm32 - 如何找到 STM32F103RET 的设备 ID

有人告诉我,每个 STM32F103RET 设备都带有一个唯一的设备 ID。如果是这样,检索 ID 的程序是什么?我正在运行一个系统,其中我与多个 STM 板通信。为了区分每个 STM 板,我可以使用这个唯一的 ID。谢谢

0 投票
1 回答
1302 浏览

arm - 我可以使用 libopencm3 在我的 STM32L0 上编写 i2c 程序吗?

我正在尝试创建一个非常简单的 i2c 测试程序以在我的 STM32L0(发现套件)上运行。我已经修改了 libopencm3-examples/examples/stm32/l0/stm32l0538-disco 中的 miniblink 程序。

但如果我只包含 i2c 头文件:

并运行 make 我得到错误:

在调查此文件后,似乎为每个其他模型定义了规则,但没有为 l0 定义规则,这是为什么呢?libopencm3在STM32L0系列上不支持i2c吗?

我查看了 libopencm3/stm32/l1/i2c.h ,它似乎所做的只是导入通用 i2c 库。有什么办法可以只使用 l1 的 i2c 库吗?

谢谢

0 投票
2 回答
931 浏览

microcontroller - STM32L1 的直接存储器访问 RX

一段时间以来,我一直在尝试将数据块从我的计算机传输到STM32L100C-DISCOover USART。出于性能原因,这将使用 DMA 来完成。然而,到目前为止,我还没有让它工作。由于我似乎无法弄清楚我可能做错了什么,所以我想我会在这里问。

我正在使用libopencm3,但不幸的是,他们原本出色的示例存储库似乎不包含STM32L1xxx. 不过,我检查了我是否涵盖了通用 DMA 头文件中可用的配置选项的所有基础。

自然,我参考了 STM32L1xxx 的参考手册,其中提到了 DMA1 的以下请求表,这让我相信通道 6 是我需要使用的。

DMA 请求表

由于我不确定内存和外围设备(即 USART2)的大小,因此我在 8 位、16 位和 32 位的所有组合中进行了更改,但无济于事。

无需再费周折; 这是我正在尝试做的最小工作(嗯,不工作..)的摘录。我觉得我忽略了 DMA 配置中的某些内容,因为 USART 本身可以正常工作。

在这一点上,任何事情都值得赞赏。

这段代码背后的想法基本上是永远循环,直到缓冲区中的数据被完全替换,然后当它被替换时,输出它。从主机,我正在发送一千字节的高度可识别的数据,但我得到的只是格式错误的垃圾。它正在写一些东西,但不是我打算写的东西。

编辑:这是内存映射的图片。USART2_BASE计算结果为0x4000 4400,所以这似乎也没问题。

内存映射