当前位置: 首页 > 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.dtcms.com/a/277534.html

相关文章:

  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • 2024CVPR:Question Aware Vision Transformer for Multimodal Reasoning介绍
  • 考研复习-数据结构-第六章-图
  • RedisJSON 技术揭秘(五)`JSON.ARRPOP` 原子弹出 修改数组的终极手段
  • git实操
  • HTML 标题标签
  • 香港理工大学实验室定时预约
  • 【windows办公小助手】快速搜索文件及文件所处目录everything
  • 内存对齐与缓存优化:从硬件原理到代码实战
  • 前端进阶之路-从传统前端到VUE-JS(第五期-路由应用)
  • 通信网络编程5.0——JAVA
  • 新手向:使用Python从PDF中高效提取结构化文本
  • LeetCode经典题解:21、合并两个有序链表
  • 【基础算法】倍增
  • Qt:编译qsqlmysql.dll
  • React强大且灵活hooks库——ahooks入门实践之常用场景hook
  • NoSQL 介绍
  • day052-ansible handler、roles与优化
  • Spring AI 项目实战(十七):Spring + AI + 通义千问星辰航空智能机票预订系统(附完整源码)
  • SDN软件定义网络架构深度解析:分层模型与核心机制
  • Datawhale AI 夏令营【更新中】
  • java虚拟线程
  • 面试150 从中序与后序遍历构造二叉树
  • Maven项目没有Maven工具,IDEA没有识别到该项目是Maven项目怎么办?
  • html案例:编写一个用于发布CSDN文章时,生成有关缩略图
  • 【拓扑排序+dfs】P2661 [NOIP 2015 提高组] 信息传递
  • 线下门店快速线上化销售四步方案
  • 在i.MX8MP上如何使能BlueZ A2DP Source
  • 如何设计高并发架构?深入了解高并发架构设计的最佳实践
  • Nature子刊 |HERGAST:揭示超大规模空间转录组数据中的精细空间结构并放大基因表达信号