• STM32-标准库和HAL库-不同容量系列的代码移植


    使用STM32单片机过程中经常会涉及到不同芯片间的代码转换,手头上熟悉的工程需要稍作处理才能用到新的板子上。常见的是STM32F103xE、STM32F103xC(大容量)和STM32F103x8、STM32F103xB(中容量)的转换。这里做一下总结,区分标准库和HAL库。

    一、标准库

    标准库的启动文件是:

    	startup_stm32f10x_ld.s
        startup_stm32f10x_md.s
        startup_stm32f10x_hd.s
    
    • 1
    • 2
    • 3

    对应的宏定义是:

    	STM32F10X_LD
        STM32F10X_MD
        STM32F10X_HD
    
    • 1
    • 2
    • 3

    分别对应小容量、中容量、大容量产品。这里的容量是指FLASH的大小,判断方法如下:

    小容量:16K<=FLASH≤32K
    中容量:64K≤FLASH≤128K
    大容量:256K≤FLASH<=512k
    超大容量:768K≤FLASH<=1024K

    常用型号的FLASH大小为:
    STM32F103xE:512K,大容量;
    STM32F103xC:256K,大容量;
    STM32F103xB:128K,中容量;
    STM32F103x8:64K,中容量;
    STM32F103x6:32K,小容量;
    STM32F103xG:1024K,超大容量;

    工程移植需要改三个地方,器件、启动文件、宏定义

    1. 更换器件:

    在这里插入图片描述

    2. 更换启动文件

    从大容量换成中容量,例如ZE换成c8,需要把startup_stm32f10x_hd.s换成startup_stm32f10x_md.s
    反之则把把startup_stm32f10x_md.s换成startup_stm32f10x_hd.s

    在这里插入图片描述

    3. 更改宏定义:

    c/c++标签页下的Define的STM32F10X_HD更换成STM32F10X_MD

    在这里插入图片描述

    当然,如果你原本的工程用的是大容量产品,用到了其中的外设是中容量产品没有的,肯定会出错,这时候就要改代码,删掉没有的功能了。例如STM32F103C8没有串口4和串口5,有相关的代码就会出错。

    二、HAL库

    HAL库的启动文件是:

    	startup_stm32f103x6.s
    	startup_stm32f103xb.s
    	startup_stm32f103xe.s
    	startup_stm32f103xg.s
    
    • 1
    • 2
    • 3
    • 4

    对应的宏定义是:

    	STM32F103x6
        STM32F103xB
        STM32F103xE
        STM32F103xG
    
    • 1
    • 2
    • 3
    • 4

    分别对应小容量、中容量、大容量、超大容量产品。

    注意这里不要对号入座,四个宏定义对应四类产品,并不是说和STM32的明明系列一致。例如STM32F103C8STM32F103CB对应的宏定义都是STM32F103xB,千万不要自己弄一个STM32F103x8的宏定义出来。

    移植的步骤如下:

    1. 更换器件:

    这一步与上面标准库一样

    2. 更换启动文件和头文件

    这一步很关键,比标准库的移植稍微麻烦一点点。容易搞错。核心:

    (1)找到与自己的工程版本一致的HAL库。(HAL库版本一直在更新,不一致的HAL库可能不兼容)

    (2)在HAL库中找到正确的启动文件和头文件。

    首先默认你已经找到了版本一致的HAL库,如果是使用原子的例程,原子的A盘里面已经提供了。否则就要打开HAL库文件看一看版本了。

    启动文件在这个目录下:STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm
    在这里插入图片描述

    头文件在这个目录下:STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Include,文件夹下有不同容量的头文件:

    在这里插入图片描述

    3. 更改宏定义:

    与标准库步骤一样,注意使用HAL库的宏定义:STM32F103xBSTM32F103xE

    在这里插入图片描述

  • 相关阅读:
    获取随机id的api接口
    java抽取mysql数据落到本地
    0929全连接卷积神经网络(FCN)
    Linux系统管理技术手册——第25章 X窗口系统
    照明灯具哪个品牌好?照明灯具十大排行榜
    java毕业生设计养老院信息管理计算机源码+系统+mysql+调试部署+lw
    线程等待与唤醒
    华为OD机试 - 环中最长子串(Java & JS & Python & C)
    开发前后端交互规范与请求封装
    算法设计与分析 SCAU17964 水桶打水
  • 原文地址:https://blog.csdn.net/qq_30267617/article/details/134554478