什么是CMSIS || 标准库与HAL库

一,ARM(Cortex Microcontroller Software Interface          Standard)

          ARM Cortex™ 微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是 CortexM 处理器系列的与供应商无关的硬件抽象层。使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。

        ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI、ST这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex M3 芯 片 ,他们的内核结构都是一样的,不同的是他们的存储器容量, 片上外设 IO 以及其他模块的区别

二,标准库与HAL库

        1  . 寄存器

                ·寄存器众多,需要经常翻阅芯片手册,费时费力;

               ·更大灵活性,可以随心所欲达到自己的目的;

                ·深入理解单片机的运行原理,知其然更知其所以然。

        2. 标准库

                ·将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用

                ·每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的

                ·配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能;

                ·大大降低单片机开发难度,但是在不同芯片间不方便移植。

        3. HAL库(Hardware Abstraction Layer)

                ST公司目前主力推的开发方式,新的芯片已经不再提供标准库;

                为了实现在不同芯片之间移植代码

                为了兼容所有芯片,导致代码量庞大,执行效率低下。

三,常见文件意义

        startup_stm32f102xb.s

                启动文件,用于初始化硬件、设置堆栈和中断向量表,然后跳转到 C/C++ 的主程序入口点( main 函数)。

        stm32f1xx_it.c

                中断服务例程文件,它包含了处理各种中断的 C 语言函数实现,例如定时器中断、外部中断等

        system_stm32f1xx.c

                定义了系统初始化函数 SystemInit 和系统时钟更新函数SystemCoreClockUpdate

        sm32f1xx_hal.c

                HAL库初始化、系统滴答、HAL库延时等相关函数

        stm32f1xx_hal_cortex.c

                内核通用函数定义和声明,如NVIC、MPU、系统软复位、Systick等,其实主要是对core_cm3.h 文件的相关函数再次封装。

        stm32f1xx.h

                是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义

        stm32f103xb.h

                包含:中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定

        stm32f1xx_hal_conf.h

                HAL库的用户配置文件,用于裁剪HAL库、配置晶振参数等

        stm32hxx_hal_def.h

                包含HAL库通用的枚举类型数据和宏定义

        stm32f1xx_hal_ppp.c

                某任意外设驱动源码,PPP表示任意外设

        stm32f1xx_hal_ppp_ex.c

                主要是存放外设的扩展(特殊)功能的驱动源码,PPP表示任意外设

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的安装配置及使用

一.Docker的由来 Docker 最初是 dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目。 2010年的专门做PAAS平台,但是到了2013年的时候,像亚马逊,微软,Google都开始做PAAS平台。 到了2013年,公司资金链…

空调器的铜管

1)、 全新开发的空调器,在钣金、塑料件结构方案设计的同时,进行配管结构设计,充分考虑整体空间的合理分配,以避免配管设计在其它结构方案确定之后,只局限在有限的空间内进行。 2)、 制冷系统以外的结构件已定型的产品&#xff0c…

仿真模拟--静态浮动路由

目录 静态路由 浮动路由 静态路由 浮动路由

Verilog描述一个带有异步置位和异步清零的D触发器

1 带有异步置位和异步清零的D触发器的真值表&#xff1a; 2 Verilog代码描述 module DFF_SR(CLK, D, Rd, Sd, Q, QN);input CLK, D, Rd, Sd;output Q, QN;reg Q_DFF;always (posedge CLKor negedge Rd or negedge Sd)beginif(!Rd)Q_DFF < 1b0;else if(!Sd)Q_DFF < 1b1;e…

使用 C# 和 OpenXML 读取大型 Excel 文件

介绍 高效读取大型 Excel 文件可能具有挑战性&#xff0c;尤其是在处理需要高性能和可扩展性的应用程序时。Microsoft 的 OpenXML SDK 提供了一套强大的工具来处理 Office 文档&#xff08;包括 Excel 文件&#xff09;&#xff0c;而无需在服务器上安装 Excel。本文将指导您使…

华为 Mate 70 系列曝光:首发鸿蒙系统,共四款机型

目前华为在 HDC 2024 大会上宣布&#xff0c;HaemonyOS NEXT 开启开发者先锋用户 Beta 测试&#xff0c;根据官方时间表来看&#xff0c;HaemonyOS NEXT 将在 8 月启动第一批公开 Beta 测试&#xff0c;第四季度推出第一批正式版以及启动第二批公测。 华为 Mate 70 系列将会与 …

(深度学习记录)第TR6周:Transformer实战-单词预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f3e1;我的环境&#xff1a; 语言环境&#xff1a;Python3.11.4编译器&#xff1a;Jupyter Notebooktorcch版本&#xff1a;2.0.…

Keil 5编译出现misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘

no member named ‘IP’ in ‘NVIC_Type’ 我们在使用Keil 5编译器的AC6进行代码编译的使用&#xff0c;出现如下的错误&#xff1b; 当前的环境 编译器版本 Keil uVision5&#xff0c;V5.31.0.0&#xff1b; CMSIS-Core 版本V6…1.0&#xff1b; 采用GD32F407VK主芯片&…

【Flutter 面试题】 main future mirotask 的执行顺序是怎样的?

【Flutter 面试题】 main future mirotask 的执行顺序是怎样的? 文章目录 写在前面口述回答补充说明实际案例代码代码运行结果运行结果说明代码执行顺序的总结写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023…

Java中的微服务架构:设计、部署与管理

Java中的微服务架构&#xff1a;设计、部署与管理 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我想和大家分享一下Java中的微服务架构&…

【PythonWeb开发】Flask四大内置对象

在Flask中&#xff0c;current_app、g、request、session是非常关键的内置对象&#xff0c;它们分别承担着不同的作用&#xff0c;并广泛应用于Web开发中的多个环节。 &#xff08;1&#xff09;current_app 它是一个代表当前Flask应用实例的代理对象&#xff0c;允许开发者在…

SQL之日期时间相关知识点及函数

1.日期函数 DATE(): 从日期时间值中提取日期部分。 SELECT DATE(2024-06-16 12:34:56); -- 返回 2024-06-16 CURDATE(): 返回当前日期。 SELECT CURDATE(); -- 返回当前日期&#xff0c;例如 2024-06-16 NOW(): 返回当前日期和时间。 SELECT NOW(); -- 返回当前日期和…

C# 中的 Null:处理缺失值和可空类型

探索数据库和编程语言中的 NULL 概念&#xff0c;它表示值缺失或数据缺失。了解其在 SQL 中的重要性、其作为占位符的作用等。 在 C# 中&#xff0c;null 是一个关键字&#xff0c;表示不引用任何对象的引用。它用于指示不存在值或未初始化的引用。 当变量被赋值为 null 时&a…

微信小程序传统开发登录和云开发登录的区别

1. 传统开发登录流程 1. 用户端调用wx.login从微信服务器获取code; 2. 用户端用wx.request将获取的code传递给后端服务器&#xff1b; 3. 后端服务器将拿到的code传给微信服务器&#xff0c;换取openid和session_key; 4. 后端服务器将获取到的信息返回给用户端&#xff1b…

Nuxt3 的生命周期和钩子函数(一)

title: Nuxt3 的生命周期和钩子函数&#xff08;一&#xff09; date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要&#xff1a;本文是关于Nuxt3的系列文章之一&#xff0c;主要探讨Nuxt3的生命周期和钩子函数&#xff0c;引导读者深入了解其在前端开发中…

C++ | Leetcode C++题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; class Solution { public:int rob(vector<int>& nums) {if (nums.empty()) {return 0;}int size nums.size();if (size 1) {return nums[0];}int first nums[0], second max(nums[0], nums[1]);for (int i 2; i < size; …

革新城市景观:轻空间设计团队呈现“淄博会展中心”

“淄博会展中心”&#xff0c;作为国内最大的气膜会展建筑群&#xff0c;自启用以来已经成为淄博市的亮丽新名片和经济引擎。该会展中心在第二十届中国&#xff08;淄博&#xff09;国际陶瓷博览会上首次亮相&#xff0c;其独特的设计和先进的建筑理念吸引了广泛关注。今天&…

MaxWell实时监控Mysql并把数据写入到Kafka主题中

配置mysql 启用MySQL Binlog MySQL服务器的Binlog默认是未开启的&#xff0c;如需进行同步&#xff0c;需要先进行开启 修改MySQL配置文件/etc/my.cnf sudo vim/etc/my.cof 增加如下配置 注&#xff1a;MySQL Binlog模式 Statement-based&#xff1a;基于语句&#xff0c;…

深入解析:批处理文件中echo命令的多功能用法

深入解析&#xff1a;批处理文件中echo命令的多功能用法 批处理文件&#xff0c;通常以.bat或.cmd为扩展名&#xff0c;在Windows操作系统中扮演着自动化脚本的角色。在这些脚本中&#xff0c;echo命令是使用最频繁的命令之一。本文将详细解释echo命令的多种用法&#xff0c;并…

记录bug导致测试部署出错,但是本地环境启动正常。雪花算法使用中报错。并带有源码分析。

bug出现背景 集群产生的日志要求traceId不重复&#xff0c;使用雪花算法生成traceId 报错形式如下 为什么本地无法复现测试环境的bug 因为bug的出现本身就是概率性的事件 代码如下 public static Long workId Long.parseLong(String.valueOf(NetUtil.getLocalhostStr().ha…