当前位置: 首页 > news >正文

CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司为 Cortex-M 系列处理器

CMSIS(Cortex Microcontroller Software Interface Standard)是ARM公司为 Cortex-M 系列处理器(如 M0/M3/M4/M7/M23/M33 等)定义的一套硬件抽象层标准,旨在简化嵌入式开发,提高代码的可移植性和复用性。


核心组成

  1. CMSIS-Core

    • 提供访问 Cortex-M 内核寄存器、NVIC(中断控制器)、SysTick(系统定时器)的标准化接口。
    • 示例:
      #include "cmsis_gcc.h"  // 或 armcc/iar 版本
      __disable_irq();        // 全局关中断
      NVIC_EnableIRQ(USART1_IRQn);
      
  2. CMSIS-DSP

    • 优化的数字信号处理库(FFT、滤波、矩阵运算等),支持定点和浮点运算。
    • 示例:
      #include "arm_math.h"
      float32_t input[1024], output[1024];
      arm_rfft_fast_instance_f32 S;
      arm_rfft_fast_init_f32(&S, 1024);
      arm_rfft_fast_f32(&S, input, output, 0);
      
  3. CMSIS-RTOS2

    • 统一的 RTOS API(如 FreeRTOS、ThreadX 适配层),支持线程、信号量、消息队列等。
    • 示例:
      osThreadId_t tid = osThreadNew(myThread, NULL, NULL);
      osSemaphoreId_t sem = osSemaphoreNew(1, 0, NULL);
      
  4. CMSIS-Driver

    • 标准化的外设驱动接口(UART、SPI、I2C 等),由芯片厂商实现。
  5. CMSIS-Pack

    • 软件包格式(.pack 文件),包含设备描述、驱动、示例代码,可通过工具(如 Keil、VS Code)直接安装。

为什么用 CMSIS?

  • 跨平台:同一套代码可在 STM32、NXP、GD32 等芯片间迁移。
  • 厂商支持:ST、NXP、Microchip 等均提供 CMSIS 兼容的 SDK(如 STM32CubeMX 生成的代码基于 CMSIS)。
  • 工具链兼容:支持 GCC、Keil、IAR 等。

实际开发中的使用

  1. 环境配置

    • 通过芯片厂商的 SDK(如 STM32CubeMX)自动集成 CMSIS。
    • 或手动下载 CMSIS-Pack 安装。
  2. 最小系统示例

    #include "stm32f4xx.h"  // 芯片头文件(包含 CMSIS-Core)int main(void) {SystemCoreClockUpdate();  // 更新系统时钟变量SysTick_Config(SystemCoreClock / 1000); // 1ms 中断while (1);
    }void SysTick_Handler(void) {// 每 1ms 触发一次
    }
    

常见问题

  • Q: CMSIS 和 HAL/LL 库的区别?
    A: CMSIS 是 ARM 的标准,HAL/LL 是 ST 等厂商在 CMSIS 基础上封装的更高层驱动。

  • Q: 如何移植 CMSIS-DSP?
    A: 仅需包含 arm_math.h 并链接对应库(如 libarm_cortexM4lf_math.a)。


http://www.xdnf.cn/news/1115875.html

相关文章:

  • docker 设置代理以及配置镜像加速
  • VISUALBERT:一个简单且高效的视觉与语言基线模型
  • JavaScript加强篇——第九章 正则表达式高级应用(终)
  • java+vue+SpringBoo中小型制造企业质量管理系统(程序+数据库+报告+部署教程+答辩指导)
  • archive/tar: unknown file mode ?rwxr-xr-x
  • Java行为型模式---策略模式
  • 低代码引擎核心技术:OneCode常用动作事件速查手册及注解驱动开发详解
  • 2023.05.06 更新前端面试问题总结(12道题)
  • VsCode的LivePreview插件应用
  • 【hivesql 已知维度父子关系加工层级表】
  • Pytorch实现感知器并实现分类动画
  • JAVA并发——什么是Java的原子性、可见性和有序性
  • git实操
  • composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
  • 【基础算法】倍增
  • 【开源项目】拆解机器学习全流程:一份GitHub手册的工程实践指南
  • 从儿童涂鸦到想象力视频:AI如何重塑“亲子创作”市场?
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713
  • Prometheus 第一篇:快速上手
  • Vue配置特性(ref、props、混入、插件与作用域样式)
  • 第三章-提示词-解锁Prompt提示词工程核销逻辑,开启高效AI交互(10/36)
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
  • DVWA靶场通关笔记-XSS DOM(Medium级别)
  • 教程:如何查看浏览器扩展程序的源码
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构开发生态
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十三课——图像浮雕效果的FPGA实现
  • JAVA生成PDF(itextpdf)
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用