
引言 STM32价值主张倡导提供完整和全面的固件库,为开发人员提供构建嵌入式应用程序的初始框架。 该框架的核心是众所周知的标准外设库(SPL),所有中间件组件都使用SPL来访问STM32外设。 多年来,STM32产品不断发展,为开发人员提供各种解决方案以平衡成本,功耗和性能,其中尤为出名的是STM32Cube底层(LL)驱动程序。 对于STM32微控制器应用的设计人员而言,轻松地升级微控制器型号和/或更换为另一种固件解决方案是一件至关重要的事情。由于SPL已经停止研发,随着产品需求和规格不断增长,对所使用的各种外设提出了额外的要求,因此,这种迁移通常必不可少。 本应用笔记介绍了从现有使用STM32 SPL开发的基于STM32的应用程序迁移到使用STM32Cube LL驱动程序的任何其他类型的微控制器的步骤。 本应用笔记汇总了将基于STM32 SPL的应用程序成功迁移到使用STM32Cube LL API所需的所有最重要信息。 它包含三个部分。 • STM32 SPL与STM32Cube LL架构概述:介绍两种解决方案以及二者之间的比较。 • STM32 SPL至STM32Cube LL手动迁移:详细说明了手动迁移基于标准外设库应用程序 的步骤。 • STM32 SPL至STM32Cube LL自动迁移:利用SPL2LL-转换器迁移工具作为解决方案, 自动迁移基于标准外设的应用程序。 1 STM32 SPL与STM32Cube LL架构概述 本节介绍STM32标准外设库(SPL)和STM32Cube LL的架构,对两种解决方案之间的主要差异进行对比和总结。 1.1 STM32 SPL 1.1.1 概述 CMSIS STM32 SPL的CMSIS由两层组成:第一层是内核外设访问层,包含名称定义、地址定义和辅助API,用于访问内核Cortex-Mx寄存器和外设。第二层是STM32外设访问层,定义了设备的所有外设寄存器、位域和存储器映射。 STM32 SPL驱动程序 该库基于模块化编程方法构建,确保构建主应用程序的多个组件之间保持独立。使用此库即可在广泛的产品系列和评估板上实现轻松移植,只需对公共部分的代码进行最小的更改。 STM32 SPL驱动程序为每个外设提供驱动程序和头文件。每个驱动程序都包含一组涵盖所有外设功能的API。 通过检查所有库函数的输入值,还可以实现运行时故障检测。此类动态检查有助于增强软件的稳健性。因此,它适用于开发和调试用户应用程序。 1.1.2 包含模型 图 1 基于STM32 SPL的默认用户应用程序,介绍了文件包含模型。 ![]() 每个STM32嵌入式外设都有一个源代码文件stm32yyxx_ppp.c和一个头文件stm32yyxx_ppp.h。stm32yyxx_ppp.c文件包含使用PPP外设所需的所有固件API。 stm32yyxx_conf.h文件被视为用户文件,根据应用程序中使用的外设进行自定义和定制。在运行任何应用程序之前,使用此文件指定与库驱动程序连接的参数集。 表 1对用户基于STM32 SPL的应用程序所引用的上述文件进行重新分组和介绍: ![]() 1.2 STM32Cube底层驱动程序 1.2.1 概述 作为STM32Cube固件HAL的一部分,底层(LL)驱动程序旨在提供面向专家的快速轻量级层,与HAL相比,更接近硬件。与HAL相反的是,对于不关注优化访问的外设而言,LL API并不适用。 底层(LL)驱动程序旨在提供: • 一组函数,用于根据数据结构中指定的参数,对外设主要特性进行初始化 • 一组函数,用于使用每个字段的复位值填充初始化数据结构 • 函数,用于执行外设去初始化(外设寄存器恢复为默认值) • 一组内联函数,用于直接和原子寄存器访问 • 由于LL驱动程序既可以在独立模式下使用(不使用HAL驱动程序),也可以在混合模式下使用(使用HAL驱动程序),因此完全独立于HAL • 涵盖全部支持的外设特性。 底层驱动程序基于STM32外设的可用功能提供硬件服务。表 2列出了底层范围涵盖的STM32嵌入式外设: ![]() ![]() LL API完全体现了硬件功能,提供单次操作。必须按照微控制器产品线参考手册中描述的编程模型来调用这些操作。 因此,LL服务不执行任何处理,不需要任何额外的存储器资源来保存它们的状态、计数器或数据指针:通过改变相关的外设寄存器内容即可执行所有操作。 通过物理实例(映射在外设基址寄存器上的外设寄存器结构)调用所有底层驱动程序,每个物理外设的底层驱动程序都在一个单独的头文件中,他们在一个模块中给出。 1.2.2 包含模型 作为STM32Cube应用程序,根据采用的驱动程序的包含模型不同,有不同的文件暴露给用户。图 2显示了通过STM32Cube HAL或底层驱动器包含的文件。 ![]() 根据STM32Cube包提供的不同内容,将STM32Cube应用程序分为三类: • HAL应用程序:该应用程序仅基于HAL驱动程序,遵循蓝色箭头显示的包含模型。 • LL应用程序:由于LL驱动程序是独立的, 用户在开发应用程序时可以仅使用LL驱动程序,从源文件引用这些驱动程序即可。请注意,LL驱动程序不能相互包含,但必须仅包含CMSIS设备文件。因此,无需使用配置文件,且用户必须在其应用程序的入口点文件中包含所使用的驱动程序。 • 混合应用程序:用户调用HAL和LL驱动程序,使用二者的API来开发代码。驱动程序彼此独立,其包含方法互不干扰。 ![]() 与HAL驱动程序相反,底层驱动程序并非基于过程模型构建,而是基于寄存器的简单访问操作。因此,底层驱动没有配置文件。 1.2.3 API定义级别和分类 底层驱动程序旨在提供一个抽象API层,涵盖STM32代码片段API和标准外设驱动程序功能。 底层驱动程序提供了一组互补的基本API,可自定义或替换高级进程。 每个底层外设驱动程序应涵盖以下三个API级别: • 级别1:LL_PPP_WriteReg() / LL_PPP_ReadReg()(CMSIS寄存器操作的重定向)。 • 级别2:单次操作API(原子操作),其排序如下: – 外设激活/取消激活管理:启用或禁用外设块、子块或相关特性。 示例:LL_PPP_Disable(PPPx) – 外设功能操作管理:开始或启动外设操作,或将外设设置为功能状态。 示例:LL_PPP_Action() – 辅助操作。 示例:IS_PPP_State(PPPx) – 特定中断和状态标志管理:处理单个项目的状态和寄存器标志操作(获取、清除、启用、禁用)。 示例:LL_PPP_ClearFlag_XX() 请参见“stm32yyxx_ll_PPP.h”,了解上述API。 • 级别3:全局配置和初始化函数,涵盖“stm32yyxx_ll_PPP.c”提供的相关外设寄存器的完全独立操作。 1.3 总结 表 4对STM32 SPL和STM32Cube CMSIS及其驱动程序组件进行了全面比较: ![]() ![]() STM32Cube LL驱动程序提供了一组新的内联函数,可代替代码片段和标准外设驱动程序,允许直接和原子寄存器访问。它独立于HAL驱动程序,因此用户可以独立使用所支持的外设及其特性,且最小化占用的代码空间和存储器资源。因此,可以实现从STM32 SPL到STM32Cube LL的完整迁移。 完整版请查看:附件 |
DM00405316_ZHV1.pdf
下载1.09 MB, 下载次数: 1
兔哥的ST67——【000】ST67模组订购
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
刘氓兔的64位入门挑战【1】——MP257芯片下单和硬件准备
刘氓兔的64位入门挑战【0】——MP257选型