完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
STM32Cube开发包里面包含STM32 ARM芯片的各种示例和开发板相关的demo工程。
这个可以去官网下载,我下载的是STM32L4系列芯片的Cube开发包:en.stm32cubel4_v1-17-0.zip。 下载之后解压,里面有一个使用手册文档,下面就介绍一下。 UM1860 User manual Getting started with STM32CubeL4 MCU Package for STM32L4 Series and STM32L4+ Series STM32CubeL4的主要功能: STM32Cube开发包里,有HAL层代码,使用HAL能最大的保证基于STM32系列芯片的代码可重用性。 不使用HAL,也可以只使用low-layer APIs,实现最好的性能和代码占用量,并对硬件进行更深度的控制。 里面还有中间件,比如FAT文件系统,RTOS,USB Host and Device,Touch library and Graphics。 并提供了所有片上外设的应用例子。 提供的这些软件组件,既包括中间件层也包括应用层,各种例子可以跑在相应型号的开发板上。 HAL和LL API是开源的BSD license。 STemWin是一个二进制图形软件库,由合作伙伴Segger提供。 CMSIS-RTOS的实现是开源的FreeRTOS。 FAT文件系统基于开源的FatFS解决方案。 STMTouch触摸屏处理库。 STM32CubeL4的架构概览: Level 0里的例子,分Examples, Examples_LL and Examples_MIX三种,分别表示适用HAL的,适用LL的和混使用两种的。 Level 1里的例子被成为Applications,提供了每个中间件组件的具体应用。 在实际项目种,可以直接使用这些模板项目进行快速开发。 BSP,Board support package 板级支持包该层提供了一套与板子的硬件组件(即LCD、音频、microSD™和MEMS驱动器)相对应的API。它由两部分组成。- 组件这是与电路板上的外部设备相关的驱动,不属于STM32。组件驱动为外部组件提供了特定的API。并且可以在任何其他板子上移植。- BSP驱动它允许将组件驱动链接到一个特定的板子上,并提供一套用户友好的APIs。API的命名规则是BSP_FUNCT_Action()。例如:BSP_LED_Init(), BSP_LED_On()BSP基于一个模块化的结构,只需实现低级的例程就可以轻松地移植到任何硬件。 Hardware abstraction layer (HAL) and low-layer (LL) STM32CubeL4的HAL和LL是互补的,涵盖了广泛的应用需求。- HAL驱动提供了高层次的功能导向的和高度可移植的API。它们向最终用户隐藏了MCU和外围设备的复杂性。HAL驱动提供通用的面向功能的支持多实例的API,通过提供现成的例程来简化用户应用的实现。举例,对于通信外设(如I2S或UART),HAL驱动提供了API允许初始化和配置外设,管理基于轮询的、中断的和DMA方式的数据传输,以及处理可能出现的通信错误。HAL驱动程序的API分为两类:1.通用API,为所有STM32系列提供通用的功能2.扩展API,为特定的系列或特定的部件号提供特定和定制的功能。- 低层API提供寄存器级别的低层API,性能经过优化,但可移植性较差。它们需要对MCU和外设规格有深入的了解。LL驱动的设计是为了提供一个快速的、面向专家的轻量级层,它比HAL更接近硬件。与HAL相比,LL API不适用于给那些性能优化不是关键问题的外设,也不适用那些需要大量软件配置或复杂的上层软件框架,如FSMC,USB,或SDMMC。LL驱动的功能:1.一组函数用来根据数据结构中指定的参数初始化外设的主要功能。2.一组函数用来适用复位默认值来填充初始化数据结构。3.用于外设的功能的销毁处理(外设寄存器恢复到其默认值)。4.一套用于直接访问寄存器的内联函数5.完全独立于HAL,能够在独立模式下使用(没有HAL驱动)6.全面覆盖所支持的外设特性。 Middleware components 各个中间件之间的通信,属于水平级别交互,直接调用API。垂直方向交互方式是通过特定的callback函数和底层驱动交互,和适用一些静态的宏定义来实现调用。还可以通过一个抽象层,通过配置文件的形式来实现垂直通信,避免中间件软件库依赖于特定LL。 具体的Cube内基于MCU的包文件结构: 在Cube里提供的工程类型,由EWARM、MDK-ARM和SW4STM32三种。 -------------------------------------------- 开始使用STM32CubeL4 运行开发包内的例子项目程序。找到里面的Examples文件夹,里面的每个文件夹都是一个片上外设的应用例程项目,可以打开工程并运行。 开发用户的应用程序: 1,基于HAL层的应用修改 找一个模板项目。根据芯片型号或相应的开发板,找到里面的Examples、Templates、Applications和Demonstrations,选择相应的一个工程作为模板。 模板项目里有在板子上开发需要的最小组件,包括HAL、CMSIS和BSP。 工程还设定好了各个组件的include头文件路径。 设置了芯片型号和相关的配置文件。 初始化了ARM core Systick,用来实现HAL_Delay功能。 2,按需添加中间件。 可以添加:USB Host and Device library, STMTouch touch sensing, STemWin, FreeRTOS™ and FatFS. 注意需要的源文件和头文件都要添加。可参照:ProjectsSTM32xxx_yyyApplications 3,配置软件组件 HAL 和中间件组件提供了一组构建时配置选项,使用宏 #define 在头文件中声明。 比如文件:stm32l4xx_hal_conf.h 这里面每个宏就是个开关,表示某个外设模块的驱动是否启用。 4,启动HAL库。 在main函数开始,需要执行HAL_Init API来初始化HAL库。 执行的任务包括设置1ms的systick。设置NVIC。 调用HAL_MspInit的函数,定义在stm32l4xx_hal_msp.c里,这里是用户具体实现的硬件初始化。 5,设置系统时钟 HAL_RCC_OscConfig()函数设置外部或内部时钟,包括PLL设置。如果系统没有高频率运行需求,可以不使用PLL。 HAL_RCC_ClockConfig()设置时钟频率。 6,初始化外设 启用外设时钟。 配置外设的GPIO。 设置DMA通道,或者启用DMA中断。 启用外设中断源。 stm32xxx_it.c这个文件存放具体的用户的中断设置。 在main函数里,调用HAL_PPP_Init函数初始化外设。 7,进行具体应用的开发和编程 到这一步,系统准备就绪,用户可以开始编码了。 注意:在外设的中断服务例程ISR中,如果调用HAL_Delay的话,就要保证systick interrupt的优先级要更高。 使用__weak定义的函数,用户可以重新实现定义,以覆盖原有的__weak声明的函数定义。 创建的工程里,main.c文件里都会有一个main loop function,例子里面的模板功能一般都是空的实现。 还有SystemClock_Config( )函数。 在根据示例项目创建自己的项目是,需要注意替换的文件: stm32l4xx_it.h,stm32l4xx_it.c 使用STM32CubeMX工具可以生成初始化C代码。通过界面配置各种资源,包括GPIO、Clock Tree、Power等。 下载和更新的方法: 可以访问www.st.com/stm32l4。选择“Tools & Software” -> Ecosystems ->STM32CubeL4, 直接点击下载。 或者在STM32CubeMX里,点击"INSTALL/REMOVE"按键,选择相应的芯片系列,可以安装相应版本的Cube包。 安装后会存放在STM32CubeMX的代码仓库下。比如地址:C:UsersXXXSTM32CubeRepositorySTM32Cube_FW_L4_V1.17.0 问答: 是否有任何随现成可用的示例项目? 有的。 STM32CubeL4 提供了一组丰富的示例和应用程序。 它们带有用于 IAR Embedded Workbench®、Keil® 和 GCC 工具链的预配置项目。 与标准外设库(SPL - Standard Peripheral Libraries)有任何联系吗? STM32Cube HAL 和 LL 驱动程序替换了标准外设库: • 与标准外设API相比,HAL 驱动程序提供更高的抽象级别。 他们专注于外围通用功能而不是硬件。 更高 抽象级别允许定义一组用户友好的 API,这些 API 可以很容易地从一种产品移植到另一种产品。 • LL 驱动程序在寄存器级别提供低级API。 它们的组织方式比直接寄存器访问更简单和清晰。 LL 驱动程序还包括外围设备初始化,相比标准外设库经过了优化。 和HAL相比,将标准驱动库移植到LL更加容易一些,因为标准外设库和LL API都有对等的API。 HAL 驱动程序是否使用中断或 DMA?如何实现? 是的,使用了。 HAL 层支持三种 API 编程模型:轮询、中断和 DMA(包括使用和不适用中断)。 如何管理产品/外设的特殊独有功能? HAL驱动程序提供扩展API; 也就是说,在公共API之外的特殊功能通过附加形式添加,以支持某些产品独有的功能。 STM32Cubemx如何生成嵌入式软件代码? STM32Cubemx具有STM32微控制器的内置信息,包括其外设和软件,为用户提供图形操作界面,并根据用户的配置生成* .h / *c文件。 我应该什么时候使用Hal而不是LL驱动程序? HAL驱动程序提供high level的和面向功能的API,有更好的移植性。 产品或IP的复杂性对最终用户是隐藏的。 LL驱动程序在寄存器级别提供low level的API,具有更好的优化,但移植性差一些。 它们需要深入了解产品/ IPs的规范。 如何在我的环境中包含LL驱动程序?有没有和HAL一样的用于L的L配置文件? 没有配置文件。 源代码应直接包含必要的STM32L4XX_LL_PPP.H文件。 我可以一起使用Hal和LL驱动程序吗? 如果是的话,有什么约束? 可以使用HAL和LL驱动程序。 用HAL处理IP初始化阶段,然后使用LL驱动程序管理I / O操作。 HAL和LL之间的主要区别是HAL驱动程序需要创建和使用资源句柄进行操作管理,而LL驱动程序直接在外围寄存器上运行。 混合HAL和LL的示例在Examples_MIX里。 是否有HAL所没有的LL API? 是的,有的。 在stm32l4xx_ll_cortex.h中增加了一些Cortex® API,例如访问SCB或SysTick寄存器。 为什么在LL驱动上不启用SysTick中断? 因为在独立模式下使用LL驱动时,没有必要启用SysTick中断,因为它们不用于LL APIs,而HAL函数需要SysTick中断来管理超时。 LL初始化API是如何启用的? LL初始化API的定义和相关资源(结构体、字面常量和原型)是由USE_FULL_LL_DRIVER编译开关决定的。 为了能够使用LL APIs,请在工具链编译器的预处理程序中添加这个开关。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1856浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 21:50 , Processed in 0.998290 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号