《STM32CubeF1GettingStarted》文档

将STM32CubeF1包解压后,找到指导文档的位置:

QQ图片20200315004327.png
浏览如下:

STM32CubeF1GettingStarted.pdf

该文档无中文翻译版本,所以阅读方法有三种选择:

  • 下载到桌面,用PDF软件打开该文档,同时使用网易有道词典划词翻译。
  • 上传到可在线看PDF的网盘(必须文字可选取),百度网盘就可以,微云不行,然后用chrome浏览器,火狐浏览器安装沙拉查词插件观看,个人感觉比上个方法好。
  • 使用安卓平板,用看多软件阅读PDF,多看自带翻译插件。

英文技术文档的阅读:

诸葛亮在荆州,与石广元、徐元直、孟公威俱游学,三人务于精熟,而亮独观其大略。每晨夕,从容抱膝长啸。而谓三人曰:“卿三人仕进,可至刺史郡守也。”三人问其所至,亮笑而不言。 ——《魏略》

《STM32CubeF1GettingStarted》文档解读

STM32CubeF1 软件包组成

QQ图片20200315161252.png

翻译如下:
STM32CubeF1固件组成.jpg

STM32CubeF1体系结构概述

STM32Cube固件解决方案是围绕三个独立的级别构建的,可以很容易地相互交互
STM32CubeF1 firemare architechure_en.jpg

翻译如下:
STM32CubeF1 firemare architechure.jpg

第0层

这一层分为三个子层:

  • 板级支持包(BSP)
    该层提供了一组与硬件板中的硬件组件(LCD驱动程序、MicroSD等)相关的API。它由两部分组成:
    • 组件
      这是相对于板上外部设备而非STM32的驱动程序。 组件驱动程序为BSP驱动程序外部组件提供了特定的API,并且可以在任何其他板上移植。
    • BSP驱动
      它允许将组件驱动程序链接到特定的板,并提供一组用户友好的api。API的命名规则是。API命名规则是BSP_FUNCT_Action() 。
      例如:BSP_LED_Init() ,BSP_LED_On() 。BSP基于模块化体系结构,只需实现底层例程即可轻松移植到任何硬件上。
  • 硬件抽象层(HAL)
    STM32CubeF1 HAL和LL是互补的,并涵盖了广泛的应用需求:
    • HAL驱动程序提供面向高级功能的高度可移植api。它们向最终用户隐藏了MCU和外围设备的复杂性。
      HAL驱动程序提供了通用的面向多实例特性的api,通过提供随时可用的过程简化了用户应用程序的实现。例如,对于通信外设(I2S、UART…),它提供api,允许初始化和配置外设,基于轮询、中断或DMA过程管理数据传输,以及处理通信期间可能引起的通信错误。HAL驱动程序API分为两类:
      • 通用api,为所有STM32系列提供通用和通用函数
      • 扩展api,为特定的系列或特定的部件提供特定的和自定义的函数。
    • 低层API在寄存器级提供低层API,具有更好的优化,但可移植性较差。它们需要对MCU和外设规范有深入的了解,LL驱动程序的设计是为了提供一个快速的面向轻量级专家的层,它比HAL更接近硬件。与HAL相反,LL api不提供给优化访问不是关键特性的外围设备,也不提供给那些需要大量软件配置和/或复杂的上层堆栈(如FSMC、USB或SDMMC)的外围设备。
      LL驱动程序功能:
      • 一组函数,用于根据数据结构中指定的参数初始化外围主要功能
      • 一组函数,用于用对应于每个字段的重置值填充初始化数据结构
      • 外设取消初始化功能(外设寄存器恢复为默认值)
      • 一组内联函数,用于直接访问原子寄存器
      • 完全独立于HAL,并且可以在独立模式下使用(没有HAL驱动程序)
      • 完全覆盖支持的外围功能
  • 基本外围设备使用示例
    该层包括基于STM32外设并使用HAL或/和低层驱动程序API以及BSP资源构建的示例。

    第1层

    该级别分为两个子层:

  • 中间件组件中间件是一组库,涵盖USB主机和设备库,STemWin,FreeRTOS,FatFS和LwIP。 该层各组件之间的水平交互是通过调用功能API直接完成的,而与底层驱动程序的垂直交互是通过在库系统调用接口中实现的特定回调和静态宏完成的。 例如,FatFs实施磁盘I / O驱动程序以访问microSD驱动器或USB Mass Storage Class。
    每个中间件组件的主要功能如下:

    • USB主机和设备库
      支持几种USB类(大容量存储,HID,CDC,DFU)。支持多数据包传输功能,该功能允许发送大量数据而无需将其拆分为最大数据包大小传输等。
    • STemWin 图形协议栈
      emWin.jpg

      • 基于SEGGER的emWin解决方案的GUI开发的专业级解决方案。
      • 优化的显示驱动程序。
      • 用于代码生成和位图编辑的软件工具(STemWin Builder …)
    • FreeRTOS
      freertos市场.jpg

      • 开源标准。
      • CMSIS兼容层。
      • 在低功耗模式下进行无滴答操作。
      • 与所有STM32Cube中间件模块集成。
    • FAT 文件系统FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I / O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。
      FAT文件系统官网
      fatfs1.png fatfs2.png

      • FATFS FAT开源。
      • 长文件名支持。
      • 动态多驱动器支持。
      • 支持RTOS和独立操作。
      • 有读写microSD示例。
    • LWIP TCP/IP 协议栈lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式中使用。

20190418145943117.png

  1. - 完全开源
  2. - 既支持操作系统也可以独立运行
  • 基于中间件组件的示例
    每个中间件组件都带有一个或多个示例(也称为应用程序),显示了如何使用它。 还提供了使用几个中间件组件的集成示例。

第2层

该层由单个层组成,该层包括基于中间件服务层,低层抽象层和基于板功能的基本外围应用程序的全局实时图形演示。

固件包概览

STM32CubeF1固件解决方案以一个单一的zip软件包提供,其结构如下所示。
stm32CubeF1.jpg
对于每块板,都未EWARM,MDK-ARM,TrueSTUDIO和SW4STM32这四种工具链的预配置项目提供了一组示例。
下图显示了NUCLEO-F103RB板的项目结构。
STM32CubeF1例子.jpg

这些示例根据其适用的STM32Cube级别进行分类,并按以下说明进行命名:

  • 第0层中的示例称为“示例”,Examples_LL和Examples_MIX。 它们分别使用HAL驱动程序,LL驱动程序以及HAL和LL驱动程序的混合。 没有任何中间件组件。
  • 第一层中的示例称为“应用程序”。 它们提供了每个中间件组件的典型用例。

Template目录中的Template工程项目允许在给定的板上快速构建固件应用程序。
所有示例都具有相同的结构:

  • \Inc文件夹,其中包含所有头文件。
  • \Src文件夹,其中包含源代码。
  • \EWARM,\MDK-ARM,\TrueSTUDIO和\SW4STM32文件夹包含每个工具链的预配置项目。
  • readme.txt描述了示例行为和使其工作所需的环境。

最后给出每个开发板上可用的项目数量
gongchengshu.jpg