标签: cmsis

有没有理由在C语言中声明一些"volatile const"但在C++中只是"volatile"?

我在我的项目中使用了一个头文件,其中包含以下定义:

#ifdef __cplusplus
  extern "C" {
#endif 

#ifdef __cplusplus
  #define   __I     volatile             /*!< Defines 'read only' permissions*/
#else
  #define   __I     volatile const       /*!< Defines 'read only' permissions*/
#endif
Run Code Online (Sandbox Code Playgroud)

__I被用作在另一头文件如下:

    typedef struct {   
    // more members before         
      __I  uint32_t  CR;   /*!< GPIO Commit*/
    // more members after

    } GPIOA_Type;

#define GPIOF_BASE                      0x40025000UL
#define GPIOF                           ((GPIOA_Type *) GPIOF_BASE)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么__I在C中使用const而不是在C++中?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么定义__I不同.

对于任何感兴趣的人来说,这些__I定义来自IAR Embedded Workbench ARM for Cortex-M4,结构来自德州仪器LM4F120H5QR CMSIS文件.

c c++ iar cmsis cortex-m

8
推荐指数
1
解决办法
578
查看次数

只读内存映射寄存器在C中用`volatile const`定义,但在C++中只用`volatile`定义

在使用Atmel SAM3X8E处理嵌入式系统项目时,我注意到某些CMSIS头文件中的以下代码.

#ifndef __cplusplus
typedef volatile const uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#else
typedef volatile       uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#endif
Run Code Online (Sandbox Code Playgroud)

为什么C++的typedef不包含const?我在某处看到C++没有在运行时内存中存储整数const变量,如果为true则意味着const由于微控制器寄存器的内存映射方式需要删除它,但我似乎无法找到其他任何说法C++就是这样做的(尽管我的搜索非常简短).我没有太多的C++经验,我也认为可能是C++不允许使用conststruct成员,因为那些typedef主要用于struct typedef中的寄存器集合,但似乎也不是这样.

c c++ embedded cmsis

6
推荐指数
2
解决办法
2076
查看次数

CMSIS 和外围设备驱动程序

CMSIS 文件和外围驱动程序文件中编写了哪些类型的代码。我如何区分它们?任何例子都会更有帮助。谢谢你。

c peripherals microcontroller cmsis

5
推荐指数
1
解决办法
2600
查看次数

STM32裸机USB实现

更新\n对于任何感兴趣的人,这里有关于如何构建裸机 USB 堆栈、如何处理此类项目以及每个步骤需要了解的内容的分步说明和解释:STM32USB@GitHub

\n

TLDR: \n我有一个STM32G441并且想要实现一个 USB 驱动程序,而不使用任何 HAL 库,只使用 CMSIS - 为了学习经验,为了空间,因为我想做的事情无论如何都需要更改 hal。

\n

但我无法让这个东西接收任何东西。我在尝试获取设备地址时遇到了困难,该地址从未交给代码。hal 中间件工作得很好,所以这不是硬件问题。

\n

我在做什么

\n

我正在启用 USB 时钟(正如我所假设的那样,因为它可以使用我的逻辑分析仪发送 ACK 信号),按照数据表中的定义为 USB 外设通电,启用所有必要的中断并通过初始化BTable 和端点 0。现在我希望收到一个从未出现过的 CTR 中断。

\n

参考手册

\n

\n

\xce\xbcC 在 25MHz HSE 时钟上运行。USB 外设在 ~48MHz 的 PLL Q 时钟上运行,RCC 设置通过 CubeMX 时钟配置器进行验证。AHB 以半速运行,因为如果我尝试全速运行它,我会遇到总线错误硬故障,但这是另一个问题。系统时钟设置为 143.75MHz。

\n
RCC->CR |= RCC_CR_HSEON | RCC_CR_HSION;\n\n// Configure PLL (R=143.75, Q=47.92)\nRCC->CR &= ~RCC_CR_PLLON;\nwhile (RCC->CR & RCC_CR_PLLRDY) {\n}\nRCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE | RCC_PLLCFGR_PLLM_0 | (23 << RCC_PLLCFGR_PLLN_Pos) …
Run Code Online (Sandbox Code Playgroud)

c embedded usb stm32 cmsis

5
推荐指数
1
解决办法
3073
查看次数

FreeRTOS和CMSIS-RTX之间的区别

FreeRTOS和CMSIS-RTOS有什么区别?谁能解释两个RTOS是相似还是不同?

rtos freertos cmsis

4
推荐指数
3
解决办法
7545
查看次数

STM32CubeIDE 中的 CMSIS DSP

我想使用 CMSIS 中提供的 DSP 功能。我正在使用 STM32CubeIDE,我的目标板是 ST32F411RE Discovery。将 CMSIS DSP 与 Keil uVision 结合使用非常简单,您只需选择所需的包并使用它即可,但使用 STM32CubeIDE 就不那么简单了。CMSIS 包含在最新的固件包 STM32Cube_FW_F4_V1.24.2 中,但 CubeMX 或 IDE 中似乎没有任何选项来添加 DSP 库(存在于固件包中)。默认添加 CORE 库。我已将 DSP Include 和 Source 文件夹添加到我的工作区,我已将包含路径添加到 IDE,但是当我添加

#include "arm_math.h到main.c

我收到一条错误消息

fatal error: arm_math.h: No such file or directory它针对每个DSP源文件。

过去几天我一直在努力克服这个问题。有人在 STM32CubeIDE 中使用过 CMSIS DSP 功能吗?如果使用过,他们是如何设置 CMSIS DSP 来与 IDE 配合使用的?我的设置还有什么可以尝试的吗?我很惊讶集成的 CubeMX 代码生成器没有提供包含 DSP 的选项。

非常感谢

在此输入图像描述

arm stm32 cmsis stm32cubemx

4
推荐指数
1
解决办法
9635
查看次数

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

我正在使用 STM32F103C8T6,并希望使用 CMSIS,它本质上只是寄存器定义,没有代码,让我的生活更轻松,同时仍保持在较低水平。问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用。所有文档似乎都与特定于供应商的 IDE(例如 STM32CubeIDE)绑定。

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

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


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

我做了什么:

  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的内容复制到其中。
  3. 添加#define STM32F10X_MD到第一行以指定芯片。
  4. 修复拼写错误:将:第 31 行替换为;,将第 33 行替换为 …

embedded microcontroller arm stm32 cmsis

4
推荐指数
1
解决办法
4993
查看次数

在RTOS环境中基于ARM Cortex M4的STM32F4控制器构建OpenSSL库

我正在研究在STM32F407微控制器(基于ARM Cortex M4)上开发支持openSSL-FIPS的嵌入式蓝牙应用的可行性.该应用程序不能在Linux,Windows或andriod等通用操作系统上运行,但它可以在CMSIS-RTX RTOS上运行.我在Windows中使用Keil作为开发环境,内置armc编译器(armcc)进行编译.

在我的分析过程中,我找到了OpenSSL wiki,它解释了如何构建和安装openSSL库:编译和安装.在页面中虽然有一个用于ARM平台编译的部分,但没有关于如何进行编译的描述.

我还讨论了关于在ARM中交叉编译openSSL的stackoverflow中的一些讨论.但所有这些讨论都基于ARM + Linux,而且没有一个是在RTOS上.

我在使用ARM编译时也经历了以下链接

但这里指定的编译器是GCC.

  1. 是否有可用于上述平台的库?

  2. 是否可以使用RTOS将openSSL移植到ARM Cortex M4平台?更具体的是可以使用CMSIS RTX将其移植到STM32F407吗?

  3. 如果有可能,我应该从哪里开始,它有多复杂?

  4. 如果我在GCC编译器中编译openSSL库并在armc编译的应用程序中使用它会工作吗?(我有一种感觉,它不会)

  5. 我可以在嵌入式软件中使用哪些其他SSL库?(我听说WolfSSL可能是一个选择)

openssl arm keil cmsis stm32f4

3
推荐指数
1
解决办法
2669
查看次数

如何在 RTOS 的 Cortex-M3 微控制器中以高频(&gt; 100kHz)运行周期性线程?

我正在使用 STM32F107VC 微控制器实现高频(> 100kHz)数据采集系统。它使用spi外设与高频ADC芯片进行通信。我必须使用实时操作系统。我怎样才能做到这一点?

我尝试过 FreeRTOS,但它的最大滴答频率为 1000Hz,所以我无法使用 FreeRTOS 每隔 1us 运行一个线程。我也试过Keil RTX5,它的tick频率可以达到1MHz,但我在某处研究过,不建议将tick频率设置高,因为它会增加整体上下文切换时间。所以我该怎么做?谢谢。

rtos cortex-m3 stm32 data-acquisition cmsis

3
推荐指数
1
解决办法
1105
查看次数

CMSIS &amp; STM32,如何开始?

我想在 STM32 上使用 CMSIS 启动项目。网上一搜,没找到具体的教程。有些使用 SPL 开始项目(ST 已停止使用)。我想要一个在 stm32cube 上学习 CMSIS 的资源。

如果有人帮助我,我会很高兴。

问候

microcontroller stm32 cmsis

0
推荐指数
1
解决办法
2235
查看次数