2017年3月DocID027272 Rev 3 1/26
1
UM1847
用户手册STM32F1系列
STM32CubeF1固件包入门简介STMCube™是STMicroelectronics的一项初创计划,旨在通过减少开发工作量,时间和成本,使开发人员的生活更轻松。STM32Cube涵盖整个STM32 产品组合。STM32Cube版本1.x包括:•STM32CubeMX,一种图形化软件配置工具,允许使用图形向导生成C 初始化代码。•每个系列提供的综合嵌入式软件平台(例如STM32F1系列的STM32CubeF1 )- STM32Cube HAL,STM32抽象层嵌入式软件确保
STM32产品组合中最大化的可移植性
- 低层API(LL)提供快速轻量级专家层,
比HAL更接近硬件。LL API仅适用于一组
外围设备。
- 一组一致的中间件组件,如RTOS,USB,STMTouch,
FatFS和图形
- 所有嵌入式软件实用程序都提供了一整套示例。
本用户手册介绍了如何开始使用STM32CubeF1固件包。
第1节描述了STM32CubeF1固件的主要特性,这是STMCube™
计划的一部分。第2节和第3节概述了STM32CubeF1架构
和固件包结构。
www.st.com
目录UM1847
2/26 DocID027272 Rev 3
目录
1 STM32CubeF1主要功能。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
2 STM32CubeF1架构概述。。。。。。。。。。。。。。。。。。。。。。。。。。。7
2.1级别0。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
2.1.1董事会支持包(BSP)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8
2.1.2硬件抽象层(HAL)和低层(LL)。。。。。。。。。。。。。8
2.1.3基本外围设备使用示例。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
2.2第1级。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
2.2.1中间件组件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
2.2.2基于中间件组件的示例。。。。。。。。。。。。。。。。。10
2.3第2级。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10
3 STM32CubeF1固件包概述。。。。。。。。。。。。。。。。。。。。。11
3.1支持的STM32F1器件和硬件。。。。。。。。。。。。。。。。。。。。。。.11
3.2固件包概述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12
4 STM32CubeF1入门。。。。。。。。。。。。。。。。。。。。。。。。。。。。16
4.1运行你的第一个例子。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。16
4.2开发自己的应用程序。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。18
4.2.1 HAL申请。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。18
4.2.2 LL应用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。20
4.3使用STM32CubeMX生成初始化C代码。。。。。。。。。。。。。21
4.4获取STM32CubeF1版本更新。。。。。。。。。。。。。。。。。。。。。。。。。21
4.4.1安装和运行STM32CubeUpdater程序。。。。。。。。。。。21
5 FAQ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。22
5.1 STM32CubeF1固件的许可方案是什么?。。。。。。。。22
5.2 STM32CubeF1固件包支持哪些板卡?。22
5.3标准外设库是否有任何链接?。。。。。。。。。。。。。。。。22
5.4 HAL驱动程序是否从中断或DMA中受益?
怎么能控制它?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。22
5.5是否有随时可用的工具集项目提供的示例?。。。。22
5.6如何管理产品/外围设备特定功能?。。。。。。。。。。23
DocID027272 Rev 3 3/26
UM1847内容
3
5.7 STM32CubeMX如何基于嵌入式软件生成代码?23
5.8如何定期更新最新的STM32CubeF1
固件版本?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。23
5.9是否有标准外设库(SPL)的链接?。。。。。。。。。。。23
5.10何时应该使用HAL与LL驱动程序?。。。。。。。。。。。。。。。。。。。。。。。23
5.11如何在我的环境中包含LL驱动程序?
是否有任何LL配置文件与HAL?。。。。。。。。。。。。。。。。。。。。。24
5.12我可以一起使用HAL和LL驱动程序吗?如果是,那么约束是什么?24
5.13是否有HAL不提供的LL API。。。。。。。。。。。。。。24
5.14为什么LL驱动程序上没有启用SysTick中断?。。。。。。。。。。。。。。24
5.15如何启用LL初始化API?。。。。。。。。。。。。。。。。。。。。。。。。。。24
6修订历史。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。25
表格列表UM1847
4/26 DocID027272 Rev 3
表格列表
1. STM32F1系列的宏。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11
表2. STM32F1系列的电路板。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12
表3.每个板的可用示例数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15
表4.文档修订历史记录。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。25
DocID027272 Rev 3 5/26
UM1847图表清单
5 图表
清单
图1. STM32CubeF1固件组件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
图2. STM32CubeF1固件架构。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
图3. STM32CubeF1固件包结构。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。13
图4. STM32CubeF1示例概述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。14
STM32CubeF1主要特性UM1847
6/26 DocID027272 Rev 3
1 STM32CubeF1主要特性
STM32CubeF1在单个封装中收集
在STM32F1微控制器上开发应用程序所需的所有通用嵌入式软件组件。与
STMCube™计划一致,这套组件非常便携,不仅在
STM32F1系列中,而且在其他STM32系列中。
STM32CubeF1与STM32CubeMX代码生成器完全兼容,允许
生成初始化代码。该软件包包括低层(LL)和硬件
抽象层(HAL)API,涵盖了微控制器硬件,以及
在STMicroelectronics板上运行的大量示例。HAL和LL API是
提供开源BSD许可证,方便用户使用。
STM32CubeF1包还包含一组带有
相应示例的中间件组件。它们提供免费的用户友好许可条款:
•支持多个类的完整USB主机和设备堆栈。
- 主机类:HID,MSC,CDC,音频,MTP
- 设备类:HID,MSC,CDC,音频,DFU。
•STemWin,专业图形堆栈解决方案,以二进制格式提供,基于
STMicroelectronics合作伙伴解决方案SEGGER emWin
•CMSIS-RTOS实施,采用FreeRTOS开源解决方案
•基于开源FatFS解决方案的FAT文件系统
•基于开源LwIP的TCP / IP堆栈解。
STM32CubeF1包中还提供了几个实现所有这些中间件组件的应用程序和演示。
图1. STM32CubeF1固件组件
069 + DUGZDUH $ EVWUDFWLRQ / d \ HU + $ / $ SSOLFDWLRQOHYHOGHPRQVWUDWLRQV 0LGGOHZDUHOHYHO 8WLOLWLHV + $ / DQG // $ 3,V 7KHVHWRIPLGGOHZDUHFRPSRQHQWVGHSHQGVRQWKHSURGXFW6HULHV 8VHU DSSOLFDWLRQ (YDOXDWLRQ ERDUGV 'LVFRYHU \ ERDUGV 6701XFOHR ERDUGV ' HGLFDWHG ERDUGV 7&3,3)$ 7ILOH 86%* UDSKLFV V \ VWHP 5726 %RDUG6XSSRUW3DFNDJH%63 8WLOLWLHV &06,6 |
DocID027272 Rev 3 7/26
UM1847 STM32CubeF1架构概述
25
2 STM32CubeF1架构概述
STM32Cube固件解决方案围绕三个独立的级别构建,可以轻松地
相互交互,如图2
所示:图2. STM32CubeF1固件架构
2.1级别0
此级别为分为三个子层:
•板级支持包(BSP)
•硬件抽象层(HAL)
•基本外设使用示例。
06Y9
(YDOXDWLRQERDUGDQG'LVFRYHU \ .LWGHPRQVWUDWLRQ |
/ LEUDU \ DQGSURWRFROEDVHGFRPSRQHQWV IRUH [DPSOH] DW)6)UHH572686%'HYLFH |
%63GULYHUV |
$ SSOLFDWLRQV
([第4卷
&RUHGULYHUVRSWLRQDO
+ DUGZDUHDEVWUDFWLRQOD \ HU + $ /
,>
>Ğ|ĞůϬ
>Ğ|Ğůϭ
>Ğ|ĞůϮ
/ RZ / d \ HU //
STM32CubeF1体系结构概述UM1847
8/26 DocID027272启3
2.1.1板支持包(BSP)
。该层提供相对于硬件板中的硬件组件
(LCD驱动程序,MicroSD,...)的一组API 。它由两部分组成:
•组件
这是相对于板上外部设备而不是STM32的驱动程序。
组件驱动程序为BSP驱动程序外部组件提供特定的API,并且
可以在任何其他板上移植。
•BSP驱动程序
它允许将组件驱动程序链接到特定的板,并提供一组用户友好的API。API命名规则是BSP_FUNCT_Action()。
示例:BSP_LED_Init(),BSP_LED_On()
BSP基于模块化架构,
只需实现低级例程即可轻松移植到任何硬件上。
2.1.2硬件抽象层(HAL)和低层(LL)
STM32CubeF1 HAL和LL是互补的,涵盖了广泛的应用
要求:
•HAL驱动程序提供高级功能导向的高可移植API。它们将
MCU和外设复杂性隐藏在最终用户之中。
HAL驱动程序提供了简化的通用多实例面向功能的API
通过提供即用型过程实现用户应用程序。例如,对于
通信外围设备(I2S,UART ......),它提供API,允许初始化和
配置外设,管理基于轮询,中断或DMA
过程的数据传输,以及处理通信期间可能引发的通信错误。
HAL驱动程序API分为两类:
- 为所有STM32
系列提供通用和通用功能的通用API
- 扩展API,为特定
系列或特定部件号提供特定和自定义功能。
•低层API在寄存器级别提供低级API,但具有更好的优化
便携性较差。他们需要深入了解MCU和外设规范。
LL驱动器旨在提供快速轻量级的专家层,
与HAL相比更接近硬件。违背了HAL,没有设置的API LL为
外围设备,其中优化的访问不是关键特征,或对于那些需要重
DocID027272启3 9/26
UM1847 STM32CubeF1体系结构概述
25
的软件配置和/或复杂的上层堆栈(如FSMC,USB或
SDMMC)。
LL驱动程序功能:
- 一组函数,用于根据
数据结构中指定的参数初始化外围主要功能
- 用于填充初始化数据结构的一组函数
,每个字段对应一个复位值
- 外设去初始化功能(外设寄存器恢复到
默认值)
- 一组用于直接和原子寄存器访问的内联函数
- 完全独立来自HAL并且能够在独立模式下使用
(无HAL驱动程序)
- 完全覆盖支持的外围功能。
2.1.3基本外设使用示例
该层包括通过STM32外设构建的示例,并使用HAL
或/和低层驱动程序API以及BSP资源。
2.2级别1
此级别分为两个子级别:
•中间件组件
•基于中间件组件的示例。
2.2.1中间件组件
中间件是一组包含USB主机和设备库,STemWin,
FreeRTOS,FatFS和LwIP的库。此层组件之间的水平交互是
通过调用功能API直接完成的,而与低级
驱动程序的垂直交互是通过库
系统调用接口中实现的特定回调和静态宏完成的。例如,FatFs实现磁盘I / O驱动程序以访问
microSD驱动器或USB大容量存储类。
STM32CubeF1架构概述UM1847
10/26 DocID027272 Rev 3
每个中间件组件的主要功能如下:
•USB主机和设备库
- 支持多种USB类(Mass-Storage,HID,CDC,DFU)。
- 支持多数据包传输功能,允许发送大量数据,
而无需将其分成最大数据包大小传输。
- 使用配置文件更改核心和库配置而不
更改库代码(只读)。
- 32位对齐数据结构,用于在高速模式下处理基于DMA的传输。
- 从用户级到配置
文件支持多USB OTG核心实例。这允许使用多个USB主机/设备
外围设备执行操作。
- RTOS和独立操作。
- 使用配置文件通过抽象层链接低级驱动程序,
以避免库和低级驱动程序之间的任何依赖关系。
•STemWin图形堆栈
- 基于SEGGER emWin
解决方案的GUI开发专业级解决方案。
- 优化的显示驱动程序。
- 用于代码生成和位图编辑的软件工具(STemWin Builder ...)。
•FreeRTOS
- 开源标准。
- CMSIS兼容层。
- 低功耗模式下的无人值守操作。
- 与所有STM32Cube中间件模块集成。
•FAT文件系统
- FATFS FAT开源库。
- 长文件名支持。
- 动态多驱动器支持。
- RTOS和独立操作。
- microSD的示例。
•LwIP TCP / IP堆栈
- 开源标准。
- RTOS和独立操作。
2.2.2基于中间件组件的示例
每个中间件组件都带有一个或多个示例(也称为Applications),
展示了如何使用它。还
提供了使用多个中间件组件的集成示例。
2.3级别2
该级别由单个层组成,包括
基于中间件服务层的全局实时和图形演示,低级抽象层和
基于板的功能的基本外围使用应用程序。
DocID027272 Rev 3 11/26
UM1847 STM32CubeF1固件包概述
25
3 STM32CubeF1固件包概述
3.1支持的STM32F1器件和硬件
STM32Cube提供围绕通用
架构构建的高度可移植的硬件抽象层(HAL)。它允许构建层(例如中间件层)在
不深入了解所使用的MCU的情况下实现其功能。这提高了库代码的可重用性,并保证了在其他设备上的轻松移植性。
此外,由于其分层架构,STM32CubeF1完全支持所有
STM32F1系列。用户只需在stm32f1xx.h中定义正确的宏。
表1给出了根据所使用的STM32F1器件定义的宏。这个宏
还必须在编译器预处理器中定义。
表1. STM32F1系列的宏
宏在 stm32f1xx.h中定义 |
STM32F1器件 |
STM32F100xB | STM32F100C4,STM32F100R4,STM32F100C6,STM32F100R6, STM32F100C8,STM32F100R8,STM32F100V8,STM32F100CB, STM32F100RB,STM32F100VB |
STM32F100xE | STM32F100RC,STM32F100VC,STM32F100ZC,STM32F100RD, STM32F100VD,STM32F100ZD,STM32F100RE,STM32F100VE, STM32F100ZE |
STM32F101x6 | STM32F101C4,STM32F101R4,STM32F101T4,STM32F101C6, STM32F101R6,STM32F101T6 |
STM32F101xB | STM32F101C8,STM32F101R8,STM32F101T8,STM32F101V8, STM32F101CB,STM32F101RB,STM32F101TB,STM32F101VB |
STM32F101xE | STM32F101RC,STM32F101VC,STM32F101ZC, STM32F101RD,STM32F101VD,STM32F101ZD,STM32F101RE, STM32F101VE,STM32F101ZE |
STM32F101xG | STM32F101RF,STM32F101VF,STM32F101ZF,STM32F101RG, STM32F101VG,STM32F101ZG |
STM32F102x6 | STM32F102C4,STM32F102R4,STM32F102C6,STM32F102R6 |
STM32F102xB | STM32F102C8,STM32F102R8,STM32F102CB,STM32F102RB |
STM32F103x6 | STM32F103C4,STM32F103R4,STM32F103T4,STM32F103C6, STM32F103R6,STM32F103T6 |
STM32F103xB | STM32F103C8,STM32F103R8,STM32F103T8,STM32F103V8, STM32F103CB,STM32F103RB,STM32F103TB,STM32F103VB |
STM32F103xE | STM32F103RC,STM32F103VC,STM32F103ZC,STM32F103RD, STM32F103VD,STM32F103ZD,STM32F103RESTM32F103VE, STM32F103ZE |
STM32F103xG | STM32F103RF,STM32F103VF,STM32F103ZF,STM32F103RG, STM32F103VG,STM32F103ZG |
STM32F105xC | STM32F105R8,STM32F105V8,STM32F105RB,STM32F105VB, STM32F105RC,STM32F105VC |
STM32F107xC | STM32F107RB,STM32F107VB,STM32F107RC,STM32F107VC |
STM32CubeF1固件包概述UM1847
12/26 DocID027272 Rev 3
STM32CubeF1具有各种级别的丰富示例和应用程序,使您可以轻松
理解和使用任何HAL驱动程序和/或中间件组件。这些示例
在表2中列出的STMicroelectronics板上运行。
对于所有其他STM32 Nucleo板,NUCLEO-F103RB具有一组减少的
硬件组件(一个用户键按钮和一个用户LED)。为了丰富
STM32CubeF1固件包的中间件支持,我们使用了LCD显示屏Adafruit Arduino™
屏蔽。除了
LCD 之外,该屏蔽还嵌入了microSD连接器和操纵杆。
在BSP组件中,可以使用Arduino屏蔽的专用驱动程序。它们的使用
通过提供的BSP示例或演示固件进行说明,
而不会忘记FatFS中间件应用程序。
STM32CubeF1固件可以在任何兼容硬件上运行。用户只需
更新BSP驱动程序即可在自己的主板上移植提供的示例,如果以后具有
相同的硬件功能(LED,LCD显示屏,按钮......)。
3.2固件包概述
STM32CubeF1固件解决方案采用单一拉链封装,其
结构如图3所示。
表2. STM32F1系列板
板 | 支持STM32F1器件 |
STM3210E-EVAL | STM32F103xG |
STM3210C-EVAL | STM32F107xC |
STM32VLDISCOVERY | STM32F100xB |
细胞核 - F103RB | STM32F103xB |
DocID027272 Rev 3 13/26
UM1847 STM32CubeF1固件包概述
25
图3. STM32CubeF1固件包结构
1.用户不能修改棕色库文件,而可以修改蓝色文件。
06Y9 %63GULYHUVIRUWKHVXSSRUWHGERDUGV (YDOXDWLRQERDUG 'LVFRYHU \ NLW 1XFOHRNLW 'ULYHUVRIH [WHUQDOFRPSRQHQWV 670)[[+ $ / DQG // GULYHUVIRU DOOPRGXOHV 86% 'HYLFH / LEUDU \ VXSSRUWLQJ +,' 06 &&' &DQG')8FODVVHV 2SHQVRXUFHVPLGGOHZDUHVWDFNV 0LVFHOODQHRXVXWLOLWLHV 67HP:LQSURIHVVLRQDOVWDFN FRPLQJIURP6( **(5DQG DYDLODEOHLQELQDU \ IRUPDW |
6HWRI([第4卷$ SSOLFDWLRQVDQG
“HPRQVWUDWLRQVRUJDQL] HGE \
ERDUGDQGSURYLGHGZLWK
SUHFRQILJXUHGSURMHFWVXVHU
PRGLILDEOHILOHV
&RQWDLQV670)[[
&06,6ILOHVWKDWGHILQHWKH
SHULSKHUDOUHJLVWHU
GHFODUDWLRQVELWGHILQLWLRQV
DQGDGGUHVVPDSSLQJ
STM32CubeF1概述UM1847固件包
14/26 DocID027272启3
对于每个板,一组实施例中提供具有预配置的项目适用于EWARM,
MDK-ARM,TrueSTUDIO和SW4STM32工具链。
图4显示了NUCLEO-F103RB板的项目结构。
图4. STM32CubeF1示例概述
示例根据它们适用的STM32Cube级别进行分类,并按
以下说明命名:
•级别0中的示例称为Examples,Examples_LL和Examples_MIX。它们
分别使用HAL驱动程序,LL驱动程序以及混合的HAL和LL驱动程序。没有任何
中间件组件。
•级别1中的示例称为“应用程序”。它们提供了每个
中间件组件的典型用例。
DocID027272 Rev 3 15/26
UM1847 STM32CubeF1固件包概述
25
Template目录中提供的Template项目允许
在给定的板上快速构建固件应用程序。
所有示例都具有相同的结构:
•\ Inc包含所有头文件的文件夹。
•源代码的\ Src文件夹。
•\ EWARM,\ MDK-ARM,\ TrueSTUDIO和\ SW4STM32文件夹包含每个工具链的预配置项目。
•readme.txt描述示例行为和使其
工作所需的环境
表3给出了每个板可用的项目数。
表3.每个板的可用示例数
板 | 例子 | 示例 _LL |
示例 _MIX |
应用 | 示范 |
STM3210E-EVAL | 35 | 4 | N / A | 8 | N / A |
STM3210C-EVAL | 20 | N / A | N / A | 19 | N / A |
STM32VLDISCOVERY | 19 | N / A | N / A | N / A | N / A |
细胞核 - F103RB | 29 | 61 | 11 | 3 | 1 |
STM32CubeF1入门UM1847
16/26 DocID027272 Rev 3
4 STM32CubeF1 入门
4.1运行第一个示例
本节介绍在STM32CubeF1中运行第一个示例的简单方法。它用于
说明在STM32F103RB Nucleo板上运行的简单LED切换的生成:
1。下载STM32CubeF1固件包。将其解压缩到您
选择的目录中。确保不要修改图3中所示的包结构。请注意,
还建议将包复制到靠近根卷的位置(例如
C \ Eval或G:\ Tests),因为某些IDE在路径上遇到问题长度
太长了。
2.浏览到\ Projects \ STM32F103RB-Nucleo \ Examples。
3.打开\ GPIO,然后打开\ GPIO_IOToggle文件夹。
4.使用首选工具链打开项目。
下面给出了如何使用支持的工具链打开,构建和运行示例的快速概述。
5.重建所有文件并将图像加载到目标内存中。
6.运行示例:LED2在无限循环中切换(有关更多详细信息,请参阅
示例自述文件)。
DocID027272 Rev 3 17/26
UM1847 STM32CubeF1入门
25
要使用支持的工具链打开,构建和运行示例:,请按照以下步骤操作:
•EWARM
a)在示例文件夹下,打开\ EWARM子文件夹。
b)启动Project.eww工作区(a)。
c)重建所有文件:Project-> Rebuild all。
d)加载项目图像:Project-> Debug。
e)运行程序:Debug-> Go(F5)。
•MDK-ARM
a)在示例文件夹下,打开\ MDK-ARM子文件夹。
b)启动Project.uvproj工作区(a)。
c)重建所有文件:Project->重建所有目标文件。
d)加载项目映像:Debug-> Start / Stop Debug Session。
e)运行程序:Debug-> Run(F5)。
•TrueSTUDO
a)打开TrueSTUDIO工具链。
b)单击文件 - >切换工作区 - >其他,然后浏览到TrueSTUDIO工作空间
目录。
c)单击文件 - >导入,选择常规 - >'现有项目到工作区',
然后单击“下一步”。
d)浏览到TrueSTUDIO工作空间目录并选择项目。
e)重建所有项目文件:在“Project explorer”窗口中选择项目,然后
单击Project-> build project菜单。
f)运行程序:Run-> Debug(F11)。
•SW4STM32
a)打开SW4STM32工具链。
b)单击文件 - >切换工作区 - >其他,然后浏览到SW4STM32
工作空间目录。
c)单击文件 - >导入,选择常规 - >'现有项目到工作区',
然后单击“下一步”。
d)浏览到SW4STM32工作空间目录并选择项目。
e)重建所有项目文件:在“Project explorer”窗口中选择项目,然后
单击Project-> build project菜单。
f)运行程序:Run-> Debug(F11)。
一个。
STM32CubeF1入门UM1847
18/26 DocID027272 Rev 3
4.2开发自己的应用程序
4.2.1 HAL应用程序
本节介绍使用
STM32CubeF1 创建自己的应用程序所需的步骤:
1。创建项目
要创建新项目,您可以启动来自为
\ Projects \
\ Projects \
(其中
Template项目提供了空主循环功能,但它很好
开始点熟悉STM32CubeF1的项目设置。该模板具有
以下特征:
- 它包含HAL,CMSIS和BSP驱动程序的源代码,它们是在
给定板上开发代码所需的最小组件。
- 它包含所有固件组件的包含路径。
- 它定义了支持的STM32F1设备,因此允许相应地配置CMSIS
和HAL驱动程序。
- 它提供预先配置的读取使用用户文件,如下所示:
使用ARM Core SysTick以默认时基初始化HAL。
为HAL_Delay()目的实现了SysTick ISR。
系统时钟配置了器件的最低频率(HSI),以实现
最佳功耗。
注意:将现有项目复制到其他位置时,请确保更新包含
路径。
2.将必要的中间件添加到项目中(可选)
可用的中间件堆栈是:USB主机和设备库,LwIP,STemWin,
FreeRTOS和FatFS。要了解需要在项目文件
列表中添加哪些源文件,请参阅为每个中间件提供的文档。您还可以查看
\ Projects \ STM32xxx_yyy \ Applications \
下的应用程序(其中
源文件以及哪些包含路径必须添加。
3.配置固件组件
HAL和中间件组件
使用在头文件中声明的宏#define 提供一组构建时配置选项。
每个组件中都提供了一个模板配置文件,它必须被复制到项目文件夹中(通常
配置文件名为xxx_conf_template.h,
在将其复制到项目文件夹时需要删除'_template'一词)。配置文件提供了足够的信息,以了解每个配置选项的影响.Page 22
19/26
UM1847入门STM32CubeF1
25
信息。有关
每个组件的文档中提供了更详细的信息。
4.启动HAL库
跳转到主程序后,应用程序代码必须调用HAL_Init()API来
初始化HAL库,它执行以下任务:
a)配置Flash预取和SysTick中断优先级(通过
stm32f1xx_hal_conf.h中定义的宏)。
b)配置SysTick,
在stm32f1xx_hal_conf.h中定义的SysTick TICK_INT_PRIO中断优先级每隔1 ms产生一次中断,该中断
由HSI计时(在此阶段,时钟尚未配置,因此
系统正在运行内部恒生指数为8 MHz)。
c)将NVIC组优先级设置为4.
d)调用stm32f1xx_hal_msp.c用户文件中定义的HAL_MspInit()回调函数,
以执行全局低级硬件初始化。
5.配置系统时钟
系统时钟配置通过调用下面描述的两个API完成:
a)HAL_RCC_OscConfig():此API配置内部和/或外部
振荡器,以及PLL源和因子。用户可以选择
配置一个振荡器或所有振荡器。如果
不需要以高频率运行系统,则可以跳过PLL配置。
b)HAL_RCC_ClockConfig():此API配置系统时钟源,闪存
延迟以及AHB和APB预分频器。
6.初始化外设
a)首先写入外设HAL_PPP_MspInit函数。请按如下步骤进行操作:
- 启用外设时钟。
- 配置外设GPIO。
- 配置DMA通道并启用DMA中断(如果需要)。
- 启用外设中断(如果需要)。
b)
如果需要,编辑stm32xxx_it.c以调用所需的中断处理程序(外设和DMA)。
c)如果计划使用外设中断或
DMA,则写入过程完成回调函数。
d)在main.c文件中,初始化外设句柄结构,然后调用函数
HAL_PPP_Init()来初始化外设。
7.开发应用程序
在此阶段,您的系统已准备就绪,您可以开始开发应用程序代码。
- HAL提供直观且易于使用的API来配置外围设备。它
支持轮询,中断和DMA编程模型,以适应任何
申请要求。有关如何使用每个外设的更多详细信息,请参阅
STM32CubeF1包中提供的丰富示例集。
- 如果您的应用程序有一些实时约束,您可以找到大量
示例,说明如何使用FreeRTOS并将其与
STM32CubeF1中提供的所有中间件堆栈集成。这可以是
开发应用程序的良好起点。
注意:在默认的HAL实现中,SysTick定时器用作时基:它
以固定的时间间隔生成中断。如果从外设ISR进程调用HAL_Delay(),则
开始使用STM32CubeF1 UM1847
20/26 DocID027272 Rev 3
确保SysTick中断的优先级(数值较低)高于
外设中断。否则,将阻止呼叫者ISR进程。影响
时基配置的函数被声明为__weak,以便
在用户文件中的其他实现(例如使用通用计时器或其他时间
源)的情况下使覆盖成为可能。有关更多详细信息,请参阅HAL_TimeBase示例。
4.2.2 LL应用程序
本节介绍使用
STM32CubeF1 创建自己的LL应用程序所需的步骤。
1.创建项目
要创建新项目,您可以从
为\ Projects \
项目\ Projects \
是电路板名称,例如NUCLEO-F103RB)。
Template项目提供了一个空的主循环函数,但是
熟悉STM32CubeF1的项目设置是一个很好的起点。
模板的主要特征如下:
- 它包含LL和CMSIS驱动程序的源代码,这是在
给定板上开发代码的最小组件。
- 它包含所有必需固件组件的包含路径。
- 它选择支持的STM32F1设备,并允许相应地配置CMSIS和
LL驱动程序。
- 它提供了现成的用户文件,这些文件预先配置如下:
main.h:LED&USER_BUTTON定义抽象层
main.c:最大频率的系统时钟配置。
2.将现有项目
移植到另一个板要将现有项目移植到另一个目标板,请从
为每个板提供的Templates_LL项目开始,并在
\ Projects \
a)选择LL示例
查找板在部署LL示例的过程中,请参考
STM32CubeProjectsList.html 中的LL 示例列表,参见表3:
每个板可用的示例数,或应用说明“
STM32F1系列的STM32Cube固件示例”(AN4724)。
b)端口LL示例
- 复制/粘贴Templates_LL文件夹以保留初始源或直接更新
现有的Templates_LL项目。
- 然后LL示例移植主要包括用
Examples_LL目标项目替换Templates_LL文件。
- 保留所有电路板特定部件。为清楚起见,电路板特定部件已
标记有特定标签:
/ * ===========电路板特定配置代码开始=========== * /
/ * == ========== BOARD SPECIFIC CONFIGURATION CODE END ============= * /
因此主要的移植步骤如下:
- 替换stm32f1xx_it.h文件
- 替换stm32f1xx_it.c文件
DocID027272 Rev 3
21/26 UM1847 STM32CubeF1入门
25
- 替换main.h文件并更新它:
在“BOARD SPECIFIC CONFIGURATION”标签下保留LL模板的LED和用户按钮定义。
- 替换main.c文件,并更新它:
保持SystemClock_Config()LL模板的时钟配置:
在“BOARD SPECIFIC CONFIGURATION”标签下的功能。
根据LED定义,将所有LEDx替换为main.h中提供的另一个
LED。
由于这些调整,该示例应该在目标
板上起作用。
4.3使用STM32CubeMX生成初始化C代码
4.2节中描述的步骤1到6的替代方法包括使用STM32CubeMX
工具生成代码以初始化系统,外围设备和中间件(步骤1到6)
通过一步一步的过程:
1。选择符合所需
外设组的STMicroelectronics STM32微控制器。
2.通过引脚冲突求解器,时钟树设置助手,功耗计算器以及执行MCU
外设配置(例如GPIO或USART)和中间件堆栈(例如USB)的实用程序,配置每个所需的嵌入式软件。
3.根据所选配置生成初始化C代码。此代码可
在几个开发环境中随时使用。用户代码保留在
下一代代码中。
有关更多信息,请参阅STM32CubeMX用户手册(UM1718)。
4.4获取STM32CubeF1版本更新
STM32CubeF1固件包附带一个更新程序实用程序STM32CubeUpdater,
也可作为STM32CubeMX代码生成工具中的菜单使用。
updater解决方案可以检测www.st.com上提供的新固件版本和补丁,
并建议将它们下载到用户的计算机上。
4.4.1安装和运行STM32CubeUpdater程序
按照以下顺序安装和运行STM32CubeUpdater:
1。要启动安装,请双击SetupSTM32CubeUpdater.exe文件。
2.接受许可条款并遵循不同的安装步骤。
3.成功安装后,STM32CubeUpdater将作为
Program Files下的STMicroelectronics程序提供,并自动启动。该
STM32CubeUpdater图标出现在系统托盘中。右键单击更新程序图标,然后
选择“更新程序设置”以配置更新程序连接以及是否执行
手动或自动检查。有关Updater配置的更多详细信息,请参阅
STM32CubeMX用户手册 - UM1718的第3节。
FAQ UM1847
22/26 DocID027272 Rev 3
5 FAQ
5.1 STM32CubeF1固件的许可方案是什么?
HAL在非限制性BSD(Berkeley Software Distribution)许可下分发。
STMicroelectronics(USB主机和设备库,
STemWin)制造的中间件堆栈带有许可模型,只要它在
STMicroelectronics设备上运行,就可以轻松重复使用。
基于众所周知的开源解决方案(FreeRTOS和FatFs)的中间件具有
用户友好的许可条款。有关更多详细信息,请参阅每个
中间件的许可协议。
5.2 STM32CubeF1固件
包支持哪些板卡?
STM32CubeF1固件包为
以下STM32F1板提供BSP驱动程序和即用型示例:STM3210E-EVAL,STM3210C-EVAL,
STM32VLDISCOVERY和NUCLEO-F103RB。
5.3标准外设库是否有任何链接?
STM32Cube HAL层是标准外设库的替代品。
与标准外围API相比,HAL API提供更高的抽象级别。
HAL侧重于外围常见功能而非硬件。其更高的
抽象级别允许定义一组用户友好的API,可以轻松地从
一个产品移植到另一个产品。
目前使用标准外设库的客户可以访问迁移指南。
虽然支持现有的标准外设库,但不建议
将它们用于新设计。
5.4 HAL驱动程序是否受益于中断或DMA?
怎么能控制它?
是的,他们这样做。HAL层支持三种API编程模型:轮询,中断和
DMA(有或没有中断生成)。
5.5是否有随时可用的工具集
项目提供的示例?
是。STM32CubeF1提供了丰富的示例和应用程序(大约90个)。它们
带有IAR,Keil和GCC工具链的预配置项目。
DocID027272 Rev 3 23/26
UM1847 FAQ
25
5.6如何管理产品/外围设备特定功能?
HAL驱动程序提供扩展API,即特定功能作为通用API的附加功能,
以支持某些产品/线路上可用的功能。
5.7 STM32CubeMX如何基于嵌入式
软件生成代码?
STM32CubeMX具有STM32微控制器的内置知识,包括其
外围设备和软件,允许为用户提供图形表示,并
根据用户配置生成* .h / * .c文件。
5.8如何定期更新最新的STM32CubeF1
固件版本?
STM32CubeF1固件包附带一个更新程序实用程序STM32CubeUpdater,
可配置为自动或按需检查新固件包
更新(新版本或/和补丁)。
STM32CubeUpdater也集成在STM32CubeMX工具中。使用此
工具进行STM32F1配置和初始化C代码生成时,用户可以
从STM32CubeMX自我更新以及STM32CubeF1固件包更新中受益。
有关更多详细信息,请参阅第4.4节。
5.9是否有标准外设库(SPL)的链接?
STM32CubeF1 HAL和LL驱动器是标准外设的替代品
库:
•与标准外设
API 相比,HAL驱动程序提供更高的抽象级别。他们专注于外围常见功能而非硬件。它们更高的
抽象级别允许定义一组用户友好的API,可以轻松地
从一个产品移植到另一个产品。
•LL驱动程序在寄存器级别提供低级API。它们的组织
方式比直接寄存器访问更简单,更清晰。LL驱动程序还包括外围设备
初始化API,与SPL提供的
功能相比,它们更加优化,同时功能类似。与HAL驱动程序相比,这些LL初始化API
允许更轻松地从SPL迁移到STM32Cube LL驱动程序,因为每个SPL
API具有等效的LL API。
5.10我应该何时使用HAL与LL驱动程序?
HAL驱动程序提供高级和面向功能的API,具有高级别的可移植性。
最终用户隐藏产品/ IP复杂性。
LL驱动程序在寄存器级别提供低级API,具有更好的优化但
可移植性更低。他们需要深入了解产品/ IP规范。
FAQ UM1847
24/26 DocID027272 Rev 3
5.11如何在我的环境中包含LL驱动程序?
是否有任何LL配置文件与HAL?
没有配置文件。源代码应直接包含必要的
stm32f1xx_ll_ppp.h文件。
5.12我可以一起使用HAL和LL驱动程序吗?如果是,那是什么
限制?
可以使用HAL和LL驱动程序。可以使用
HAL 处理IP初始化阶段,然后使用LL驱动程序管理I / O操作。
HAL和LL之间的主要区别在于HAL驱动程序需要创建和使用
句柄进行操作管理,而LL驱动程序直接在外设
寄存器上运行。在例子_MIX示例中说明了混合HAL和LL。
5.13是否有HAL不提供的LL API
是,有。
在stm3f1xx_ll_cortex.h中添加了一些Cortex®API,例如用于访问SCB或
SysTick寄存器。
5.14为什么LL驱动程序上没有启用SysTick中断?
在独立模式下使用LL驱动程序时,您不需要启用SysTick中断,
因为它们不在LL API中使用,而HAL功能需要SysTick中断来
管理超时。
5.15如何启用LL初始化API?
LL初始化API和相关资源(结构,文字和
原型)的定义由USE_FULL_LL_DRIVER编译开关决定。
为了能够使用LL API,请在工具链编译器预处理器中添加此开关。
DocID027272 Rev 3 25/26
UM1847修订历史
25
6修订历史
表4.文档修订历史
日期 | 调整 | 变化 |
16日 - 12月2014 | 1 | 初始发行。 |
11君2015 | 2 | 在第3.2节:固件 包概述和第4.1节:运行第一个 示例中添加了SW4STM32工具链。 |
24月 - 2017年 | 3 | 添加了对LL驱动程序的支持 添加了第4.2.1节:HAL应用程序和第4.2.2节: LL应用程序。 更新了图1:STM32CubeF1固件 组件,图2:STM32CubeF1固件 架构,图3:STM32CubeF1固件封装 结构,图4:STM32CubeF1示例概述 和表3:每 块板可用的示例数量。 更新了第5节:常见问题。 |
UM1847
26/26 DocID027272 Rev 3
重要提示 - 请仔细阅读
STMicroelectronics NV及其子公司(“ST”)保留随时
对ST产品和/或本文档进行更改,更正,增强,修改和改进的权利不知不觉中。购买者
在下订单前应获取ST产品的最新相关信息。ST产品根据ST在订单
确认时的销售条款和条件进行销售。
购买者全权负责ST产品的选择,选择和使用,ST对应用协助或
购买者产品的设计不承担任何责任。
ST在此授予任何知识产权许可,无论明示或暗示。
对ST产品的转售,其条款与此处规定的信息不同,将使ST对该产品的任何保证无效。
ST和ST徽标是ST的商标。所有其他产品或服务名称均为其各自所有者的财产。
本文档中的信息取代并替换以前在本文档的任何先前版本中提供的信息。
©2017 STMicroelectronics - 保留所有权利