0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32Cube CubeIDE工程里的程序结构

冬至子 来源:聊点嵌入式 作者:聊点嵌入式 2023-11-06 14:54 次阅读

今天,我们就来分析一下上次生成的CubeIDE点灯工程的源码,看看跟我们拿来“逆向”的开发板例程源码有什么异同。

1. 工程视图下源码文件夹

图片

上图中,Binaries和Includes文件夹我们不用去理它们,硬盘工程目录下并没有这两个文件夹,是在编译后产生的。另外3个文件夹是工程目录里实际上有的,其中Debug文件夹是在Debug工程配置下编译生成的,如果选择Release工程配置并编译,则会生成一个Release文件夹。

下面主要讲一下Core和Drivers文件夹以及工程根目录下的几个文件。

其中Core文件夹是用户代码的存放地,包括源文件和头文件。当然,你想重新建个文件夹放自己的代码也是没问题的。Core文件夹全打开后见下图。头文件和源文件是分开存放的,这跟硬盘上工程目录是一致的。

Keil MDK就不一样了,不会根据硬盘上工程目录下的文件位置去自动生成工程目录,需要手动去添加,哪怕你后期往工程目录里添加文件,也照样要在Keil里添加才出现在工程里。Eclipse就智能多了,自动识别硬盘上工程目录里的文件,自动添加。

图片

上图中Inc目录里前两个头文件就不说了,stm32f7xx_hal_conf.h的作用是要不要包含各种外设的头文件,如果你手动添加了一个外设,就算把HAL库里的外设驱动加进来了,也要在这个头文件里打开这个外设功能。

当然,也可以直接在用户代码里包含新添加的外设头文件,但是不推荐这样做。另外要注册自己的中断回调函数,也在这个头文件里开启相应的开关,这个回调函数的事情以后也可以说一说。

stm32f7xx_it.h里放的都是中断服务函数的申明,包括异常和中断。

源文件里stm32f7xx_hal_msp.c里放的是与MCU相关的初始化代码,msp也即MCU Specific Package,一般外设的msp代码都放在外设对应的源文件中,stm32f7xx_hal_msp.c基本上没什么东西。在CubeMX生成代码时也可以选择把外设的msp代码都放在stm32f7xx_hal_msp.c中。

stm32f7xx_it.c里放的都是中断服务函数,建议用户中断都放在这里,然后在相应的中断函数里调用自己写的中断服务函数或是HAL库提供的中断服务函数。

syscalls.c里是系统调用的一些函数,可以改写。例如想用printf函数通过串口发送消息,则可以把串口发送代码添加进_write()函数里。

sysmem.c里有一个用来分配系统堆空间的函数。我们设置工程的时候只需要确定堆的大小即可,默认堆大小是512字节,如果在用户代码中不用malloc分配内存就不用改,完全够用。

系统内存在运行时,内存空间是按下图这样分配的。其中newlib heap那一段就是堆空间。未使用的RAM空间在bbs段与堆之间。

图片

system_stm32f7xx.c里包含系统初始化,时钟初始化函数。其中系统初始化函数是系统启动后,进入main函数之前执行的。

Startup文件夹下只有一个MCU对应的启动文件,以后可以具体分析一下这个启动文件,看一看系统启动后要执行哪些操作,然后才进入main函数。

Drivers文件夹展开后如下图。

图片

基本上没什么好说的,一个是ARM提供的CMSIS标准软件接口,另一个是必要的HAL库函数。

2. 工程根目录下的文件分析

图片

上图中,第一个ioc文件不必多说,CubeMX生成的文件,后续可以改,重新生成代码。第二个launch文件是我们上次配置工程运行选项时生成的,要下载代码或调试代码都得有这个文件。如果用的是Release工程配置,则会生成一个Release.launch。

后边两个文件是链接文件,gcc里需要链接文件告诉编译器,各段要分别链接到什么地址上。其中FLASH.ld是我们常用的,生成的代码要下载到FLASH中运行。RAM.ld会把代码链接进RAM,调试的时候可以用,断电后内容就消失了。

更改链接文件的方法如下:

图片

好了,今天就讲这么多,基本上CubeIDE工程里所有源文件的作用都讲到了,具体怎么实现的还需要自己去看源代码。接下来有时间讲讲启动代码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1321

    浏览量

    113706
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348744
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • STM32F7
    +关注

    关注

    1

    文章

    49

    浏览量

    8787
  • HAL库
    +关注

    关注

    1

    文章

    112

    浏览量

    5878
收藏 人收藏

    评论

    相关推荐

    如何使用STM32CubeIDE创建一个基于STM32Cube库的项目?

    如何使用STM32CubeIDE创建一个基于STM32Cube库的项目?
    发表于 11-26 06:01

    获取所需STM32Cube固件包失败是为什么?怎么处理?

    我把固件放在合适的位置:/home/mq/STM32Cube/Repository/STM32Cube_FW_L5_V1.3.1,提示:Fail to get required STM32Cube firmware packag
    发表于 01-06 07:54

    如何安装STM32Cube套件?

    该套件似乎由 STM32CubeMX、STM32CubeIDESTM32CubeProgrammer、STM32CubeMonitor、STM32
    发表于 01-16 06:09

    基于STM32Cube的时钟树配置

    本文档内容介绍了基于STM32Cube的时钟树配置,以及使用操作步骤图解。
    发表于 11-28 18:02 22次下载
    基于<b class='flag-5'>STM32Cube</b>的时钟树配置

    STM32Cube学习之一:点灯

    STM32Cube学习之一:点灯
    发表于 12-12 15:30 20次下载

    介绍STM32Cube的特点及应用

    2014年STM32 Roadshow:STM32Cube简介
    的头像 发表于 07-05 00:26 4843次阅读

    使用STM32Cube轻松开发STM32

    STM32CubeSTM32开发更轻松
    的头像 发表于 07-03 04:30 5330次阅读

    STM32Cube到底包含哪些工具 ?

    STM32Cube到底包含哪些工具?
    的头像 发表于 03-04 10:16 7893次阅读

    STM32Cube介绍

    STM32Cube介绍
    发表于 12-08 15:51 19次下载
    <b class='flag-5'>STM32Cube</b>介绍

    精雕细琢见真章《STM32Cube高效开发教程》

    CubeMX和STM32CubeIDE作为开发软件,系统性地介绍STM32的HAL库开发技术的书。《STM32Cube高效开发教程》分为《基础篇》和《高级篇》两本,《高级篇》大约在10月份才能正式印刷出来。总结一下,本书具有
    发表于 12-31 19:28 265次下载
    精雕细琢见真章《<b class='flag-5'>STM32Cube</b>高效开发教程》

    X-CUBE-SBSFU STM32Cube 扩展包的集成指南

    X-CUBE-SBSFU STM32Cube 扩展包的集成指南
    发表于 11-21 17:07 0次下载
    X-<b class='flag-5'>CUBE</b>-SBSFU <b class='flag-5'>STM32Cube</b> 扩展包的集成指南

    STM32Cube在线培训

    电子发烧友网站提供《STM32Cube在线培训.pdf》资料免费下载
    发表于 08-01 14:23 1次下载
    <b class='flag-5'>STM32Cube</b>在线培训

    始使用X-CUBE-SBSFU STM32Cube扩展包

    电子发烧友网站提供《始使用X-CUBE-SBSFU STM32Cube扩展包.pdf》资料免费下载
    发表于 08-01 09:22 0次下载
    始使用X-<b class='flag-5'>CUBE</b>-SBSFU <b class='flag-5'>STM32Cube</b>扩展包

    STM32标准外设库迁移至STM32Cube底层库

    本应用笔记介绍了从现有使用STM32 SPL开发的基于STM32的应用程序迁移到使用STM32Cube LL驱动程序的任何其他类型的微控制器
    发表于 08-31 10:25 0次下载

    STM32Cube LL库的巧妙之处

    STM32Cube LL库的巧妙之处
    的头像 发表于 09-27 16:26 958次阅读
    <b class='flag-5'>STM32Cube</b> LL库的巧妙之处