• stm32.cube(一)——系统架构及目录结构


    一、前言

    Arm的应用场景往往比51单片机复杂得多,如果一个高级应用的开发需要连底层的结构性代码都要重构,那么在成本和研发周期上就会面临巨大的风险。为了简化编码过程,芯片厂商经常会提供一些板卡级支持的BSP包,系统级支持的SDK包,或者芯片级支持的HAL层。对于stm32系列的芯片,意法半导体公司提供一个了cube包,它包含的内容很广泛(HAL,CMSIS,中间层,RTOS),灵活应用这个代码包将使开发过程更加高效。

    stm.cube下载地址: 
    http://www.stmcu.com.cn/design_resources.html

    二、系统架构

    系统架构图 
    这里写图片描述

    基本上整个cube的代码架构可以分成三层。底层、中间层和上层。

    2.1 Level 0

    底层Level0包含HAL、BSP和一些HAL的调用例子。

    HAL硬件抽象层

    这一层包含一些控制片内资源的库函数,比如adc、i2s。它使得寄存器含义和一些协议细节对用户透明了,HAL是行为级的代码。

    比如stm32f1xx_hal_gpio.c下提供的这几个函数:

    /* Exported functions --------------------------------------------------------*/ 
    /* Initialization and de-initialization functions *******************************/
    /** @addtogroup GPIO_Exported_Functions
      * @{
      */
    
    /** @addtogroup GPIO_Exported_Functions_Group1
      * @{
      */
    void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
    void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
    /**
      * @}
      */
    
    /* IO operation functions *******************************************************/
    /** @addtogroup GPIO_Exported_Functions_Group2
      * @{
      */
    GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    void          HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
    void          HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    void          HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
    void          HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    直接调用这些函数就可以对GPIO进行各种操作而无需关心具体寄存器的值表示的GPIO属性。

    BSP板卡支持包

    这一层主要包含一些常用外设的功能性函数。

    比如你使用了cs43l22来驱动一个扬声器,而cs43l22又受控于主芯片。在cs43l22.c中就有对它进行各种操作的函数:

    /* High Layer codec functions */
    uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq);
    uint32_t cs43l22_ReadID(uint16_t DeviceAddr);
    uint32_t cs43l22_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size);
    uint32_t cs43l22_Pause(uint16_t DeviceAddr);
    uint32_t cs43l22_Resume(uint16_t DeviceAddr);
    uint32_t cs43l22_Stop(uint16_t DeviceAddr, uint32_t Cmd);
    uint32_t cs43l22_SetVolume(uint16_t DeviceAddr, uint8_t Volume);
    uint32_t cs43l22_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq);
    uint32_t cs43l22_SetMute(uint16_t DeviceAddr, uint32_t Cmd);
    uint32_t cs43l22_SetOutputMode(uint16_t DeviceAddr, uint8_t Output);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 Level 1

    中间层包含一些较复杂的通用协议以及调用它们的应用程序。

    开源的Tcp/Ip协议栈LwIP、USB协议、FAT文件系统、FreeRtos,这些大家都很熟悉。

    另外Level 1还包含STemWin,它是用来驱动一块触控液晶屏的。

    Level 1和Level 0的例子都可以在相应开发板的文件目录里找到,如果懒得看函数原型而想直接调用函数,可以参考下例子。

    2.3 Level 2

    这一层是下两层软件运行的实时展现。

    三、文件目录

    目录结构图 
    这里写图片描述

    前两个目录包含说明文档和一些图片。

    Drives目录包含BSP、HAL、CMSIS。

    MiddleWares目录包含上面说到的各个协议,还是RTOS。

    Projects目录是标准开发板的项目例子。MDK和IAR的项目包都有,文档里gcc的也有,但是找了半天也看不到一个Makefile。

    Utilities目录包含大的是烧写工具、字符点阵图等有可能用到的用具。

  • 相关阅读:
    使用samba实现linux和windows文件共享
    使用li列举属性表中的某一属性
    popuptemplate的使用
    html中自动分配界面
    div中移除和添加元素
    使用v-html绑定数据,实现图片的动态转换
    使用js下载数据
    使用FeatureTable对FeatureLayer中的数据进行显示
    使用ant的checkboxGroup将列表信息添加为多选框,并根据多选框的转换进行操作
    arcgis api绘制多个点
  • 原文地址:https://www.cnblogs.com/-colin/p/8990136.html
Copyright © 2020-2023  润新知