问题标签 [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.
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 进行推理。
它可能有什么问题?
有人可以提出一些解决方案吗
谢谢你
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 的预处理器中,我该怎么办?提前谢谢了。
c - 使用事件标志阻塞任务会停止程序
我在我的 STM32F303VCx 上集成了 FreeRTOS cmsis_v2 并遇到了一个问题,然后在阻止任务以等待另一个任务的操作批准时使用事件标志。
如果任务执行以下代码,所有其他任务的运行时间最短(可以理解,因为 OS 不断检查 evt_flg):
但是如果将超时设置为osWaitForver
: osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, osWaitForver )
,整个程序就会进入 HardFault。
这种行为的最佳解决方案是什么?我需要任务等待一个标志并且不阻止其他标志运行,例如终端输入读取。
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 不是为临时开发人员设计的吗?那么它是为谁设计的呢?
signal-processing - FFT ARM Cortex-M7 的 Q31 和 SP 精度
我想了解对于精度很重要的 DSP 应用,使用定点 Q31 是否优于浮点(单精度)。更多细节,我目前正在使用 ARM Cortex-M7 微控制器,我需要使用 CMSIS 库以高精度执行 FFT。我知道 SP 有 24 位尾数,而 Q31 有 31 位,因此,Q31 的精度应该更好,但我到处读到,对于需要乘法等的算法,浮点表示应该是用过,不明白为什么。
提前致谢。
c - 在寄存器上将 ssd1306 与 stm32f103 连接,i2c“数据模式”不起作用
我想让我的第一个在 stm32 上使用 i2c 的应用程序与 ssd1306 一起使用。“命令模式”下的所有通信都在工作,并且显示响应 1 字节命令。我认为当一个包装中的字节数增加时,问题出在“数据模式”中。
通过 i2c 发送数据的基本功能
发送命令的功能这工作正常,它在没有开始/停止的情况下发送总结 3 个字节的数据 -[startBit, Address, ControlByte, CommandByte, stopBit]
和代码:
命令模式下的控制字节为 0x0,根据 ssd1306 数据表,稍后将显示在图像上。
finally发送数据的函数,它不起作用
i2c 数据格式 drom ssd1306 数据表:
我的 i2c 初始化 fx
我不完全理解问题出在哪里,以及为什么这种“数据模式”不起作用
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"
c - Stm32F407 寄存器级时钟配置问题
我正在研究 Stm32F407 探索板。但我没有解决我的时钟配置问题。我想要 168Mhz 的工作频率,并从 CubeMx 时钟配置管理器获得帮助。这是我来自 CubeMx 的 PLLCFGR 寄存器值0x4405408
(我对这个寄存器有问题)。然后我将所有 RCC 寄存器复制粘贴到我的 CMSIS 代码中。这是我的时钟配置代码。
但我无法从 Atollic 的 SFR 菜单中读取相同的值。所有寄存器均正确,但 PLLCFGR 寄存器值为 0x04405419。这个问题会影响我的时钟速度、外围速度等。我想将 PLLM 位设置为 8,但我读到了 19。所以我得到的速度比我想要的要低。因为 PLLM 位决定 PLL 输入时钟分频。我该如何解决这个注册问题?谢谢。
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++ 的优势。请问最干净的方法是什么?
c - 如何在 C 中创建多个函数声明?
我想在https://github.com/ARM-software/CMSIS_5/blob/develop/Device/ARM/ARMCM33/Source/startup_ARMCM33.c添加 400 Interrupt_Handler 。
机械方法是按以下方式添加它们:
有没有其他方法可以添加它们?像下面这样的东西?