问题标签 [cmsis]

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 回答
178 浏览

python - CMSIS- 非图像输入的 NN 量化问题

我正在使用微控制器上的 CMSIS-NN 为基于 EMG 的手势识别实现 NN

我的输入数据,例如是:[0.061035156,0.095214844,0.086669922,0,0.002441406,0.002441406,0,0,0.002441406,0.013427734,0.032958984]

我正在使用 ARM 在 Github(cifar10 示例)上提供的 nn_quantizer.py 文件来量化为 8 位。对于我的数据集,它需要 Q2.5 格式。

但是我对微控制器的预测真的很糟糕。不过,用于训练的 Caffemodel 有很好的预测。

我已经在将输入放在微控制器上之前对其进行了预处理。所以我不需要 cod_gen.py 文件生成的 mean_subtract 函数。所以我只是将我的预处理输入向量转换为 8 位定点并馈送到控制器上的 NN 进行推理。

它可能有什么问题?

有人可以提出一些解决方案吗

谢谢你

0 投票
2 回答
155 浏览

gcc - 为什么 FFT 功能只能通过 MCU GCC Compiler (STM32CubeIDE) 的 Preprocessor 才能激活?

很多网站都介绍过,如果我们想激活STM32板子的FFT/FPU,那么我们必须激活:

__FPU_USED=1; __FPU_PRESENT=1; ARM_MATH_CMx。

我没有在 MCU GCC 编译器的预处理器(100% 工作)中输入这些词,而是尝试在我的 main.h 文件中添加这 3 行:

#define __FPU_USED=1

#define __FPU_PRESENT=1

#define ARM_MATH_CMx

但是,如果是这样,它不起作用。IDE会反馈很多问题,例如:

“错误:未知类型名称‘uint32_t’;你的意思是‘uint32_t’吗?” 在 DSP 文件中。

我了解诸如“DSP 文件现在未连接到我的主文件”之类的问题。

这是我的问题:

如果我坚持在我的文件系统中声明/定义这 3 行,而不是在我的 STM32CubeIDE 的预处理器中,我该怎么办?提前谢谢了。

0 投票
1 回答
511 浏览

c - 使用事件标志阻塞任务会停止程序

我在我的 STM32F303VCx 上集成了 FreeRTOS cmsis_v2 并遇到了一个问题,然后在阻止任务以等待另一个任务的操作批准时使用事件标志。

如果任务执行以下代码,所有其他任务的运行时间最短(可以理解,因为 OS 不断检查 evt_flg):

但是如果将超时设置为osWaitForver: osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, osWaitForver ),整个程序就会进入 HardFault。

这种行为的最佳解决方案是什么?我需要任务等待一个标志并且不阻止其他标志运行,例如终端输入读取。

0 投票
1 回答
291 浏览

c - CMSIS-驱动外设

我在徘徊,为什么没有用CMSIS-Driver编写的设备实现?

我的意思是我的外围设备很少:LCD、温度和压力传感器、电流表等——所有这些都非常流行用于 arduino 和学习设备。这些设备中的每一个都使用某种协议与 uC 进行通信。有些用于 i2C,有些通过 SPI 通信,有些通过 UART。我想知道是否有处理这些设备的驱动程序,并作为后端使用 CMSIS-Driver API。

我认为它是一个不错的api,毕竟标准是由ARM开发的,为什么我找不到任何使用它的驱动程序?

例如,当我在寻找 s18b20(1 线温度传感器)时,我很容易找到用 RUST 语言编写的该设备的驱动程序,但我找不到任何使用 CMSIS 的 C 实现。(在这种情况下,与 rust 相比是相当可靠的,因为 Rust 具有很好的嵌入式 API,并且您可以轻松地在多个目标上使用驱动程序,就像 CMSIS-Driver 是工作的配偶一样)我能够找到一些使用这个外围设备的项目,但它们都在 HAL 上运行,每个 uC 都不同,因此实现不可移植(与 RUST 不同,并且可能与 CMSIS-Driver 不同)

所以我的主要问题是:

为什么基于 CMSIS-Driver 的实现这么少?也许有一些我不知道的隐藏实现存储库?

我错过了什么吗?CMSIS-Driver 不是为临时开发人员设计的吗?那么它是为谁设计的呢?

0 投票
1 回答
344 浏览

signal-processing - FFT ARM Cortex-M7 的 Q31 和 SP 精度

我想了解对于精度很重要的 DSP 应用,使用定点 Q31 是否优于浮点(单精度)。更多细节,我目前正在使用 ARM Cortex-M7 微控制器,我需要使用 CMSIS 库以高精度执行 FFT。我知道 SP 有 24 位尾数,而 Q31 有 31 位,因此,Q31 的精度应该更好,但我到处读到,对于需要乘法等的算法,浮点表示应该是用过,不明白为什么。

提前致谢。

0 投票
1 回答
296 浏览

c - 在寄存器上将 ssd1306 与 stm32f103 连接,i2c“数据模式”不起作用

我想让我的第一个在 stm32 上使用 i2c 的应用程序与 ssd1306 一起使用。“命令模式”下的所有通信都在工作,并且显示响应 1 字节命令。我认为当一个包装中的字节数增加时,问题出在“数据模式”中。

通过 i2c 发送数据的基本功能

发送命令的功能这工作正常,它在没有开始/停止的情况下发送总结 3 个字节的数据 -[startBit, Address, ControlByte, CommandByte, stopBit]

和代码:

命令模式下的控制字节为 0x0,根据 ssd1306 数据表,稍后将显示在图像上。

finally发送数据的函数,它不起作用

i2c 数据格式 drom ssd1306 数据表:

图像

完整的 ssd1306 数据表

我的 i2c 初始化 fx

我不完全理解问题出在哪里,以及为什么这种“数据模式”不起作用

0 投票
2 回答
1773 浏览

c - STM32F407 Disc E31 调试中的错误信息

我会问一个关于我的 STM32F407 探索板的问题。我想了解外部中断,我正在制作一个小电路。我将 PH0 连接到我的按钮,将 PH1 连接到 LED。但是这些引脚连接到单片机的晶体引脚。但当时我并不知道。我按下连接到 5V 的按钮。而且我的 IDE 不会连接到我的开发板进行调试。我可以通过 ST Link Utility 连接到我的电路板,并且可以毫无错误地进行完整的芯片擦除。然后我回到 Atollic 中的代码,按下调试按钮,我收到以下错误消息:

然后我关闭了调试屏幕再试一次,但我不能,因为 Atollic 找不到任何 ST Link 设备。这是错误消息:

注意:我的电脑在设备管理器中识别我的主板。

我怎么解决这个问题。ST Link Utility 成功连接到我的开发板,我的 PC 连接到我的开发板。我尝试了 St link 固件升级,但出现了更多错误。像这样。

Failure at line: 13 in "Target Software Startup Scripts"

0 投票
2 回答
904 浏览

c - Stm32F407 寄存器级时钟配置问题

我正在研究 Stm32F407 探索板。但我没有解决我的时钟配置问题。我想要 168Mhz 的工作频率,并从 CubeMx 时钟配置管理器获得帮助。这是我来自 CubeMx 的 PLLCFGR 寄存器值0x4405408(我对这个寄存器有问题)。然后我将所有 RCC 寄存器复制粘贴到我的 CMSIS 代码中。这是我的时钟配置代码。

但我无法从 Atollic 的 SFR 菜单中读取相同的值。所有寄存器均正确,但 PLLCFGR 寄存器值为 0x04405419。这个问题会影响我的时钟速度、外围速度等。我想将 PLLM 位设置为 8,但我读到了 19。所以我得到的速度比我想要的要低。因为 PLLM 位决定 PLL 输入时钟分频。我该如何解决这个注册问题?谢谢。

0 投票
0 回答
25 浏览

c++ - 在 C++ 中引用 CMSIS 寄存器而不使用 #define

我们将 Atmel 的 ASF (3.48) 与 Studio 7(在 ATSAM4E 系列 MCU 上)和 arm-gnu-toolchain 9-2020-q2-update 一起使用。该团队最近决定使用 C++ 编写更多更高的接口层,同时仍然使用 C 中的 CMSIS 和 ASF 驱动程序。考虑到这一点,我试图在我的接口文件中替换以下内容:

#define MY_DEBUG_UART UART0

constexpr Uart *MY_DEBUG_UART = UART0;

现在,UART0在相关的 CMSIS/SAM4E 文件中定义为

#define UART0 ((Uart *)0x400E0600U) /**< \brief (UART0 ) Base Address */

因此,在构建时,此 UART0 #define 会返回错误。

错误 reinterpret_cast 从整数到指针

我明白为什么了。但是我看到的例子似乎涉及设置一个寄存器类。我不想复制东西,想使用提供的驱动程序,具有#defines 的可读性而没有伴随的问题,并利用 C++ 的优势。请问最干净的方法是什么?

0 投票
2 回答
58 浏览

c - 如何在 C 中创建多个函数声明?

我想在https://github.com/ARM-software/CMSIS_5/blob/develop/Device/ARM/ARMCM33/Source/startup_ARMCM33.c添加 400 Interrupt_Handler 。

机械方法是按以下方式添加它们:

有没有其他方法可以添加它们?像下面这样的东西?