- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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作为一个最小、完整且可验证的示例。
我做了什么:
/Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0/
和 /Users/nalzok/Developer/CMSIS分别为/Packs/Keil.STM32F1xx_DFP.2.3.0/
。main.c
的文件,并复制the basic example的内容到它。#define STM32F10X_MD
以指定芯片。:
替换为 ;
,并将第 33 行替换为 timer1_init (42);
。
/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_InputValues
、Calculation_Response
和 Output_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 之外,您还需要以下文件:
/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates
文件夹)/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc
文件夹)/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/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!