0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPL2LL转换器实现标准库代码迁移为LL库的方法与内容

电子工程师 来源:嵌入式专栏 作者:strongerHuang 2021-04-24 09:30 次阅读

早期开发STM32,大部分工程师都是基于标准库进行开发,如果要换成LL库,且需要复用以前代码,该怎么办呢?

下面就来给大家分享一下使用【SPL2LL转换器】实现标准库代码迁移为LL库的方法,以及相关内容。

1关于LL库

LL库,即STM32Cube Low-Layer,也叫Cube LL、Cube底层库等。

开发STM32通常有四种“库”,可以阅读之前分享的文章进一步了解。

早在2014年,ST推出了STM32CubeMX这款工具,同步推出了对应的STM32Cube HAL库。

但是,HAL存在一些问题:代码量大、执行效率低等缺点。

因此,在2017年,ST推出了STM32Cube LL库,目的就是为了解决的HAL库的缺点,让开发STM32的工程师有更多的选择。

之前有工程师总结了的代码性能:

6FrIny.jpeg

针对上图(Flash、 SRAM 占用量和执行代码的效率这三项指标对比测试)简单讲几点:

1.ROM代码和RAM占用量最小的属于直接操作寄存器WED,对于ROM资源较小的芯片具有优势;

2.执行效率最高的也属于WED,但是代码编辑、移植性和可读写都较差。(其实汇编语言比这还有优势,一般没有特殊要求,不建议使用该寄存器编程

3.三项指标中,除了WED之外,SPL和Cube LL相近(不相上下),也相比Cube HAL就有优势。所以,SPL和Cube LL是四种之中最佳选择的两种。

4.SPL和Cube LL各有特点:SPL库成熟,可读性(特别针对初学者)很好,查找问题也方便;Cube LL可以使用STM32CubeMX图形化工具直接生产初始化代码和工程,在这方便也具有明显优势。

2为什么要用LL库?

上面讲述了关于LL库,以及其他几种库的内容,你会发现,几种库开发STM32各有各的优势。

1.对于RAM和Flash这种资源比较少的STM32,除了用标准外设库之外,LL库就是一个很好的选择。

2.使用LL库配置的代码,相对自己参考寄存器手册配置的代码,LL库API接口更规范,更具有移植性。

3.有些芯片,没有标准外设库,只有早期推出的STM32才有标准外设库,包含F0、 F1、 F2、 F3、 F4、 L1:

M7BNZr.jpeg

新出来的(像F7、L4、G0等)这些芯片只能使用目前的HAL、LL库,或者你自己参考手册配置寄存器(不是特殊情况,我不建议自己配寄存器)。

3利用SPL2LL工具转换代码

SPL2LL,即标准外设库转LL库的转换器工具。

SPL2LL主要特点:

免费

显示源代码迁移状态

生成C代码,适用于IAR,Keil和GCC编译器

支持Windows、Linux和MacOS操作系统

网址包含相关文档和SPL2LL工具。

1.ActivePerl下载安装 在使用SPL2LL工具之前,需要安装【ActivePerl】这个工具,不然会提示错误:

Error : cannot find perl, please verify that you have perl (》5.24.1) installed and added to path

Then restart the application

YrIJNf.png

如果觉得下载麻烦,可以在我网盘:

https://pan.baidu.com/s/1_R21S93V9hzlJ8ZL1D4dKA

提取码: cp37

(包含SPL2LL和ActivePerl工具)

2.安装

SPL2LL工具不需要安装,直接点开即可使用,但前提需要安装【ActivePerl】工具。

【ActivePerl】安装比较简单,一路Next下去即可。

3YzqUz.png

aUBVna.png

ARBJ3m.png

QfIFZ3.png

3.使用SPL2LL

SPL2LL使用方法很简单,选在源和目标的型号、路径,然后执行即可。

IVza63.png

选择好之后,点击“Migrate”即可执行转换。

AjMfuy.png

这里需要耐心等待,比较费时间,原理就是遍历你源码中标准库,然后转换成LL库。

4.转化代码前后对比

RZz6Zr.png

你会发现,即使被屏蔽的代码也进行了SPL转LL。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    8696

    浏览量

    147105
  • STM32
    +关注

    关注

    2270

    文章

    10896

    浏览量

    355777
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68539
收藏 人收藏

    评论

    相关推荐

    KeyStone ll设备的硬件设计指南

    电子发烧友网站提供《KeyStone ll设备的硬件设计指南.pdf》资料免费下载
    发表于 10-12 14:27 0次下载
    KeyStone <b class='flag-5'>ll</b>设备的硬件设计指南

    STM32cubeMX 6.10.0使用LL生成定时模板报错的原因?

    = LL_TIM_ETR_FILTER_FDIV1_N4 - LL_TIM_ETR_FILTER_FDIV1_N2;TIM_InitStruct.CounterMode
    发表于 05-20 07:50

    stm32f303采用LL,4个ADC连续多通道扫描,应该如何设置DMA?

    stm32f303,采用LL,4个ADC连续多通道扫描,应该如何设置DMA?ADC转换完DMA传输后,中断处理函数是哪个?
    发表于 04-30 07:06

    使用LL时在CUBEMX中设置了重映射,在生成的代码中却没有重映射是为什么?

    我在使用LL时在CUBEMX中设置了重映射,但是在生成的代码中却没有重映射,于是人工添加LL_GPIO_AF_RemapPartial_TIM3(); 然后防真但是走到这里就出现不能
    发表于 04-24 07:26

    STM32F0的SPL能在STM32G0上用吗?

    原来用的STM32F0系列,使用的V3.5.0的标准外设。现在改用STM32G0系列,发现官网提供的固件是STM32CubeG0,里面是HAL和LL
    发表于 04-08 08:29

    使用LL生成STM32H7代码时存在报错是什么原因导致的?

    使用LL生成STM32H7代码时存在的BUG
    发表于 04-03 07:33

    STM32L0 LLIIC发送不出我想要的数据是怎么回事?

    LL_I2C_HandleTransfer() 这个函数,则能发出来波形,但是这个函数会自动调整R/W位,所以不能在第一个字节使用。 使用这个方法未能实现我需要的功能。 方法二:利用手
    发表于 04-03 07:30

    STM32F1的LL,RTC怎么不能设置日期?

    STM32F1的LL,RTC 怎么不能设置日期,只能设置时间。
    发表于 03-29 07:02

    请问HAL和LL分别在什么场合使用?

    请问HAL和LL分别在什么场合使用?LL简单明了,为啥不是主流使用啊?还有为啥L03的例程中有较多的LL
    发表于 03-25 08:08

    stm32H750VB LL串口DMA空闲中断接收不到数据的原因?怎么解决?

    = {0}; LL_RCC_SetUSARTClockSource(LL_RCC_USART16_CLKSOURCE_PCLK2); /* Peripheral clock enable
    发表于 03-21 07:47

    STM32L471RE同样的硬件使用LL和HAL编译的工程运行功耗不一样?为什么?

    项目在使用STM32L471RE开发,涉及到低功耗的处理。在测试过程中发现同样的硬件结构(PCB上仅焊接mcu的最小系统),使用LL和HAL生产的两个工程运行功耗不一样,工程配置时钟
    发表于 03-21 06:17

    为什么STM32F103 LL清除某个标志位都是使用WRITE_REG(REG, VAL)呢?

    大佬们,最近看LL比较贴合寄存编程,但是LL清除某个标志位都是通过WRITE_REG(REG, VAL)这个来写整个寄存
    发表于 03-18 06:10

    用cubemx配置时钟生成LL的system clock函数,导致硬件仿真时main函数无法进入怎么解决?

    用cubemx配置时钟会生成的LL的system clock函数会有 LL_FLASH_SetLatency(LL_FLASH_LATENCY_5),while
    发表于 03-07 06:40

    LL0032AA包装外形图

    电子发烧友网站提供《LL0032AA包装外形图.pdf》资料免费下载
    发表于 01-29 09:28 0次下载
    <b class='flag-5'>LL</b>0032AA包装外形图

    基于LL实现STM32U5 LPTIM功能

    有人打算使用STM32U5系列片内LPTIM做低功耗模式唤醒。基于STM32 LL组织代码,折腾几天后似乎连中断都进不了,想找找是否有现存LL
    的头像 发表于 01-07 14:12 1546次阅读
    基于<b class='flag-5'>LL</b><b class='flag-5'>库</b><b class='flag-5'>实现</b>STM32U5 LPTIM功能