gpt4 book ai didi

arm - 在没有 IDE 的情况下如何使用 CMSIS?

转载 作者:行者123 更新时间:2023-12-02 08:18:34 27 4
gpt4 key购买 nike

我正在使用 STM32F103C8T6 并希望使用 CMSIS,which is essentially just register definitions and no code ,让我的生活更轻松,同时仍保持在较低水平。问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用。所有文档似乎都与特定于供应商的 IDE(例如 STM32CubeIDE)绑定(bind)。

我想要做的第一件事就是下载 CMSIS 库,我在 GitHub 上找到了它。 。但是,解压 ARM.CMSIS.5.6.0.pack 后,我没有发现名为 stm32f10x.h 的文件。我又花了一些时间发现a CMSIS pack对于我正在使用的特定 MCU,但它不包含 core_cm3.h,但它存在于 ARM.CMSIS.5.6.0.pack 中。 document说我需要将两者都包含到我的项目中,那么我是否需要将从不同地方下载的文件复制到我的项目中,或者什么?

作为一个额外的问题:CMSIS 和 Keli 之间是什么关系?设备特定的 CMSIS 包是从 www.keil.com 下载的,但我暂时不想使用 Keil MDK,因为它似乎是一个商业产品,而 GNU Arm 工具链是为我服务得很好。

<小时/>

编辑:我应该从一开始就更具体,但现在让我们关注如何构建 Basic CMSIS Example作为一个最小、完整且可验证的示例。

我做了什么:

  1. 下载 CMSIS-Core 和 CMSIS-DFP 并将其解压到 /Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0//Users/nalzok/Developer/CMSIS分别为/Packs/Keil.STM32F1xx_DFP.2.3.0/
  2. 创建一个名为main.c的文件,并复制the basic example的内容到它。
  3. 在第一行添加#define STM32F10X_MD以指定芯片。
  4. 修复拼写错误:将第 31 行的 : 替换为 ;,并将第 33 行替换为 timer1_init (42);
  5. 构建并出现错误

/tmp $ arm-none-eabi-gcc -I/Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0/CMSIS/Include/ -I/Users/nalzok/Developer/CMSIS/Packs/Keil.STM32F1xx_DFP.2.3.0/Device/Include/ main.c
main.c: In function 'main':
main.c:42:5: warning: implicit declaration of function 'Get_InputValues' [-Wimplicit-function-declaration]
42 | Get_InputValues (); // Read Values
| ^~~~~~~~~~~~~~~
main.c:44:5: warning: implicit declaration of function 'Calculation_Response' [-Wimplicit-function-declaration]
44 | Calculation_Response (); // Calculate Results
| ^~~~~~~~~~~~~~~~~~~~
main.c:45:5: warning: implicit declaration of function 'Output_Response' [-Wimplicit-function-declaration]
45 | Output_Response (); // Output Results
| ^~~~~~~~~~~~~~~
/var/folders/m4/7my6q_kj6pxgzb1b7pxyhp0h0000gn/T//cc1ZVBaH.s: Assembler messages:
/var/folders/m4/7my6q_kj6pxgzb1b7pxyhp0h0000gn/T//cc1ZVBaH.s:197: Error: selected processor does not support `wfe' in ARM mode
/var/folders/m4/7my6q_kj6pxgzb1b7pxyhp0h0000gn/T//cc1ZVBaH.s:310: Error: selected processor does not support `cpsid i' in ARM mode
/var/folders/m4/7my6q_kj6pxgzb1b7pxyhp0h0000gn/T//cc1ZVBaH.s:318: Error: selected processor does not support `cpsie i' in ARM mode

根据下面 @KamilCuk 的评论,我添加了更多选项并注释掉了函数 Get_InputValuesCalculation_ResponseOutput_Response,但现在我我遇到了一些不同的错误。

/tmp $ arm-none-eabi-gcc -I/Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0/CMSIS/Include/ -I/Users/nalzok/Developer/CMSIS/Packs/Keil.STM32F1xx_DFP.2.3.0/Device/Include/ -D STM32F1 -D STM32F103x6 -mthumb -mcpu=cortex-m3 main.c
/Users/nalzok/opt/xPacks/arm-none-eabi-gcc/9.2.1-1.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: /Users/nalzok/opt/xPacks/arm-none-eabi-gcc/9.2.1-1.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc.a(lib_a-exit.o): in function `exit':
exit.c:(.text.exit+0x16): undefined reference to `_exit'
/Users/nalzok/opt/xPacks/arm-none-eabi-gcc/9.2.1-1.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: /var/folders/m4/7my6q_kj6pxgzb1b7pxyhp0h0000gn/T//ccqfC5LA.o: in function `Device_Initialization':
main.c:(.text+0x164): undefined reference to `SystemCoreClock'
collect2: error: ld returned 1 exit status

最佳答案

对于最新的设备 header ,我建议从 ST 网站下载 STM32CubeF1 软件包。除其他内容(中间件、HAL 等)外,此包在 /Drivers/CMSIS/Device 文件夹中包含所需的设备 header 。您需要为 stm32f1xx.h header 定义 STM32F103xB 符号才能正常工作。

当然,STM32CubeF1包也包含CMSIS库,但它们通常有点过时。我更喜欢从您提到的 github 存储库将它们下载为 .pack 文件。您至少需要 /CMSIS/Core 中的 header 。如果您愿意,您可以添加 CMSIS 的其他部分。其中一些(如 DSP)可能还需要您添加 /Lib 文件夹中提供的静态库。

请注意,如果您从 github 克隆 CMSIS 存储库而不是下载 .pack 文件,您最终会得到静态库的占位符版本,因为该项目使用 git LFS。您不能直接使用这些静态库文件(.a 文件),因为它们只是某种指针。我不熟悉git LFS,但我猜你需要一些 git 命令(也许是 checkout)来告诉你的电脑下载实际的 .a 文件。

另请注意,有时 CMSIS 文件夹结构会因版本而异。您在 STM32CubeF1 中获得的文件夹结构可能与您从官方 CMSIS 存储库下载的文件夹结构不同。

我忘了提:除了 CMSIS 和 ST 设备 header 之外,您还需要以下文件:

  • system_stm32f1xx.c(STM32CubeF1/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates文件夹)
  • startup_stm32f103xb.s(STM32CubeF1/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc文件夹)
  • STM32CubeF1/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/linker 文件夹中的链接器脚本。奇怪的是,STM32F103x8 没有,因此您可能需要选择 STM32F103xB 并对其进行修改。我使用 IDE 生成的。

更新:

Here您可以找到在 STM32CubeIDE 中创建的最小项目。我创建了一个空的 C 项目。 IDE 提供了链接器脚本和启动文件 (.s),但我删除了它们并使用了 STM32CubeF1 包中包含的文件。我还从/Drivers/Device/ST/STM32F1xx/Include目录中删除了不相关的头文件。但我没有触及/Drivers/CMSIS/Core/Include 中的文件,尽管那里有很多不相关的文件,因为很难确定哪些需要哪些不需要。

我知道您正在寻找不使用 IDE 的解决方案,但我认为这个示例项目至少可以为您提供一些有关所需文件和项目结构的线索。

注意:示例项目名称为blinky.cube,但项目中没有Cube。我使用此命名约定只是为了指定我使用的 IDE,在本例中为 STM32CubeIDE。

关于arm - 在没有 IDE 的情况下如何使用 CMSIS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60158918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com