代码之家  ›  专栏  ›  技术社区  ›  tarabyte

STM32F HAL库太大

  •  2
  • tarabyte  · 技术社区  · 6 年前

    5 回复  |  直到 6 年前
        1
  •  4
  •   ReAl    6 年前

    尝试:

    • -ffunction-sections -fdata-sections 对于编译器, --gc-sections
    • -O2 -flto 链接器和编译器。
        2
  •  3
  •   0___________    6 年前

    只有一种方法-停止使用HAL库,并在寄存器级别执行它。如果哈尔的大小是重要的,你使用小微,这是唯一的办法。

        3
  •  3
  •   Dark Sorrow    6 年前

    如果您准备在可移植性和易用性上妥协,您可以使用ST提供的低级(LL)驱动程序。作为一个额外的好处,您的性能也可能会提高。

    来自ST论坛的帖子:

    低层(LL)驱动程序旨在提供一个快速、轻量级的面向专家的层,它比HAL更接近硬件。与HAL相反,llapi不适用于优化访问不是关键特性的外设,或者那些需要大量软件配置和/或复杂的上层堆栈(如USB)的外设。

    HAL和LL驱动程序是互补的,涵盖了广泛的应用需求:

    1. HAL提供了高级的面向特性的api,具有很高的可移植性。它们向最终用户隐藏了MCU和外围设备的复杂性。

    • 一组用来初始化外围设备主要功能的函数 数据结构中指定的参数

    • 每个字段的重置值

    • 执行外设反初始化的功能(外设 寄存器恢复为其默认值)

    • 一组用于直接和原子寄存器访问的内联函数

    • 完全独立于HAL,因为LL驱动程序可以在 独立模式(不带HAL驱动程序)或混合模式(带HAL

    底层驱动程序根据STM32外围设备的可用功能提供硬件服务。这些服务准确地反映了硬件功能,并提供了必须按照微控制器线路参考手册中描述的编程模型调用的一次性操作。因此,LL服务不实现任何处理,也不需要任何额外的内存资源来保存它们的状态、计数器或数据指针:所有操作都是通过更改相关的外围寄存器内容来执行的。

    Link

        4
  •  3
  •   tarabyte    6 年前

    除了所有这些伟大的回应,我想补充一点 HAL 可在中配置 stm32f3xx_hal_conf.h 禁用未使用的模块。

    /**
      * @brief This is the list of modules to be used in the HAL driver 
      */
    #define HAL_MODULE_ENABLED
    #define HAL_ADC_MODULE_ENABLED
    #define HAL_CAN_MODULE_ENABLED
    /* #define HAL_CAN_LEGACY_MODULE_ENABLED */
    #define HAL_CEC_MODULE_ENABLED
    #define HAL_COMP_MODULE_ENABLED
    #define HAL_CORTEX_MODULE_ENABLED
    #define HAL_CRC_MODULE_ENABLED
    #define HAL_DAC_MODULE_ENABLED
    #define HAL_DMA_MODULE_ENABLED
    #define HAL_FLASH_MODULE_ENABLED
    #define HAL_GPIO_MODULE_ENABLED
    #define HAL_HRTIM_MODULE_ENABLED
    #define HAL_I2C_MODULE_ENABLED
    #define HAL_I2S_MODULE_ENABLED
    #define HAL_IRDA_MODULE_ENABLED
    #define HAL_IWDG_MODULE_ENABLED
    #define HAL_OPAMP_MODULE_ENABLED
    #define HAL_PCD_MODULE_ENABLED
    #define HAL_PWR_MODULE_ENABLED
    #define HAL_RCC_MODULE_ENABLED
    #define HAL_RTC_MODULE_ENABLED
    #define HAL_SDADC_MODULE_ENABLED
    #define HAL_SMARTCARD_MODULE_ENABLED
    #define HAL_SMBUS_MODULE_ENABLED
    #define HAL_SPI_MODULE_ENABLED
    #define HAL_TIM_MODULE_ENABLED
    #define HAL_TSC_MODULE_ENABLED
    #define HAL_UART_MODULE_ENABLED
    #define HAL_USART_MODULE_ENABLED
    #define HAL_WWDG_MODULE_ENABLED
    
        5
  •  2
  •   mxst4    6 年前

    是否尝试将编译器标志设置为 -Os