我正在尝试在STM32 F411RE板上实现DSP的使用,但是如果不调用大量错误,我似乎无法包含必要的文件。
我以前在Keil uVision中使用过CMSIS和CMSIS-DSP,但是由于32k的代码限制,我很快就超过了评估限制。因此,我一直试图将CMSIS-DSP包含在Atollic TrueStudio中,但这似乎很难做到:CMSIS-DSP上可用的文档非常有限,因此在Atollic TrueStudio中的实现甚至更少。
一些相关资源可以在 Atollic TrueStudio User Guide 以及 StackOverflow topic #1 和 StackOverflow topic #2 。我可以找到的大多数其他相关主题仅涉及Keil uVision的使用或《用户指南》,而没有更多帮助。
Atollic TrueStudio确实包含一个内置的软件包管理器,可以从中下载基本的CMSIS,但它不为CMSIS-DSP软件包提供此选项。
我试图手动下载相应的CMSIS软件包(STM32Cube_FW_F4_V1.24.0)并将相应的DSP软件包放入项目文件结构中。这样就可以使用DSP功能,例如
#include arm_math.h
或arm_rfft_fast_instance_f32 S;
也可以使用自动完成功能来调用,因此可以被IDE识别。
但是,由于所包含的函数无法识别其标头依赖性(例如#include arm_math.h
),因此该过程还会调用许多错误。我发现main.c能够识别#include arm_math.h
命令却不知道所包含的功能令人困惑,但是尽管如此,我还是尝试通过将CMSIS DSP添加到所包含的目录(位于“构建属性- -> C / C ++ Build->设置->工具设置-> C编译器->目录`)。但是,这也不能解决当前的问题。
该函数找不到标题
但是主线可以找到完全相同的标题
并且标头包含在构建选项->目录中
刚刚验证了它也包含在“路径和符号”中,一旦将其包含在构建选项中,它应该自动执行AFAIK:
自从我的OP以来,我取得了一些进展,主要是通过弄乱了include,符号和链接程序。现在,我已经设法克服了原始错误(尽管很遗憾,我不知道如何解决),但是对于startup_stm32文件,我现在招致了很多其他错误。
所有这些似乎都是错误的指令错误,它们引用CMSIS中包含的模板文件(CMSIS /设备/ ST / STM32F4xx /源代码/模板/ ARM / ...),从而无法解释这些模板中列出的各种命令
示例错误:bad instruction __heap_base
答案 0 :(得分:1)
此后,我已经弄清楚了我项目的问题:在Github存储库中包含CMSIS文件夹意味着在整个文件夹结构中都存在许多模板。在这些模板仍然存在的情况下尝试构建/编译时,会导致类型无效和重新定义错误的许多问题。
这些模板中的大多数都位于逻辑位置,但是有些模板埋得很深,因此可能很难找到。我将尽快制作一个视频,描述从github存储库向您的TrueStudio项目添加CMSIS(DSP)的过程。
同时,以下步骤应该使CMSIS和CMSIS-DSP在STM32 TrueStudio ProjecT中工作:
确保从CMSIS文件夹中删除了所有模板(文件夹)。这可能需要进行一些搜索和试验:特别有害的内容隐藏在
../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/Device/ST/STM32xxxx/Source/{Templates}
而在../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/DSP/{Examples}
和 ../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/DSP/{Projects}
上还有其他集合,我已经删除了它们,以便我的项目能够成功编译/构建。
包括所有包含在文件夹中的名称的文件夹。抱歉,您不能仅包含主../Drivers
文件夹,因为include似乎并不包括基础结构,并且似乎还包含我的项目的错误。最好手动添加文件夹:可以通过右键单击要包含的文件夹,单击底部“添加/删除包含路径”附近的选项,然后选中两个框以进行释放和调试,然后按“确定”以进行操作。包括这个文件夹。对其他“包含”文件夹重复上述操作。
整理位于RTE_Components.h
的{{1}}文件。 NN(神经网络)CMSIS-pack文件夹中也有此名称(../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE
)的文件,请不要触摸这些文件。将此文件复制到以前包含的任何位置(将我的文件放置在RTE_Components.h
中),然后在您选择的IDE中打开它。在任何其他语句之前添加行../Drivers/CMSIS/Include
,并用您的STM32板名称替换设备名称。例如,我的RTE_Components.h文件看起来像
#define CMSIS_device_header " DEVICE_NAME.h "
确保CMSIS_device_header的设备名称与标题.h对应
位于/*
* Auto generated Run-Time-Environment Component Configuration File
* *** Do not modify ! ***
* Project: 'Project'
* Target: 'STM32F410Tx_Nucleo'
*/
#define CMSIS_device_header "stm32f4xx.h" // define own board header, eg stm32f4xx.h or stm32f7xx.h
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
#endif /* RTE_COMPONENTS_H */
添加所需的符号(右键单击您的项目,转到属性,C / C ++常规,路径和符号;然后转到#Symbols选项卡)以定义FPU和您的Cortex Core类型。对我来说,我需要添加../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h
(不带值或值为'1'),因为我在STM32F411RE上装有Cortex M4芯片,所以我要添加__FPU_PRESENT
。这意味着我的符号列表如下:
ARM_MATH_CM4
__FPU_PRESENT
的值为__packed
__attribute__((__packed__))
,其值为__weak
-__attribute__((weak))
ARM_MATH_CM4
STM32F411xE
,但这取决于您是否要使用HAL 对于我的项目,我在项目属性中包含以下包含路径:
USE_HAL_DRIVER
希望这对您也有所帮助!