STM32CubeMX相关内容

注意:这是一个笔记,并不是一个叫你如何使用CubeMX的教程,后续可能会不断补充。

CubeMX的使用教程可以查看书本《STM32Cube高效开发教程(基础篇)》

使用STM32Cube进行开发会比较高效的原因

在《STM32Cube高效开发教程-基础篇》的第29页

MCU固件库的文件很多,从固件库手动复制必要的文件来组成一个项目是比较复杂的,使用标准库进行开发时就是这样做的。

但是在STM32Cube开发方式下,我们可以用CubeMX对MCU和中间件进行图形化配置,自动生成外设初始化代码和CubeIDE项目框架。自动生成的CubeIDE项目包含了必要的驱动程序文件,并且以统一而清晰的方式组织这些源文件,用户子需要在初始代码的基础上专注于实现用户功能,这就是使用STM32Cube进行开发会比较高效的原因。

CubeMX的项目文件的后缀是 .ioc

新的

搞清楚图形化操作界面中,时钟源和时钟信号的作用后,进行MCU上的各种时钟信号的配置就很简单了,因为这些都是图形化界面的操作,不用像传统编程那样搞清楚相关寄存器并计算寄存器的值了,这些底层的寄存器设置将由CubeMX自动完成,并生成代码。

用户所做的这些时钟配置都涉及寄存器的底层操作,CubeMX在生成代码时会自动生成时钟初始化配置的程序。

CubeMX软件的主要功能时对MCU进行图像化配置,生成MCU各系统功能和已配置的外设的初始化代码,并针对选择的IDE软件生成项目框架。要对MCU进行进一步的编程,增加代码来实现用户需要的功能,还有,程序的下载以及调试,是需要在IDE软件里进行操作的。

在 .h 文件里声明的函数原型对外界就是可见的

".project" 和 ".cproject" 文件通常与 Eclipse 集成开发环境 (IDE) 相关。

".project" 文件是 Eclipse 项目的核心文件,它定义了项目的结构和属性。该文件通常保存在项目的根目录下,包含项目名称、项目类型和构建设置等信息。它是一个纯文本 XML 格式的文件,用于告诉 Eclipse 如何处理该项目。

".cproject" 文件是用于 C/C++ 开发的 Eclipse 项目的配置文件。它包含了编译器选项、构建目标、构建所需的库和路径设置等项目配置信息。该文件通常也保存在项目的根目录下,是一个 XML 格式的文件。它允许您自定义项目的构建环境和构建选项,以满足特定的需求。

总结起来,".project" 文件是 Eclipse 项目的核心文件,而 ".cproject" 文件是特定于 C/C++ 开发的 Eclipse 项目的配置文件,用于定义项目的编译和构建设置

CubeIDE是基于Eclipse的IDE软件,与一般的编程开发IDE界面类似。

Eclips是一个使用广泛的编程开发IDE环境,通过使用插件可以支持不同的编程语言的开发,如C/C++、Java、Python等。Eclips的项目管理和界面组织有一些基本的概念,包括工作空间、项目、视图、场景。

项目目录下的子目录 .setting 是自动生成的用于管理项目信息的子目录,几个没有名称,只有扩展名的文件,是项目管理的相关文件,如 .cproject , .mxproject 和 .project 。.ioc 文件是CubeMX的项目文件。

system_stm32f4xx.h , 这个文件里面定义了系统初始化函数SystemInit() , 这个函数是在系统复位之后,执行main() 函数之前调用的。

目录\Drivers\CMSIS\Include,这个目录下都是与Cortex-M内核相关的一些文件,是ARM公司提供的定义文件,与具体的MCU型号无关。

目录\Drivers\STM32F4xx_HAL_Driver下是STM32F4xx系列器件的HAL驱动程序。

目录\Drivers下的驱动程序文件都来自于STM32CubeF4固件库。在CubeMX里,生成CubeIDE项目代码时,系统会自动根据MCU型号和用到的外设将需要的驱动程序文件复制到CubeIDE项目里,并组织好目录结构。\Drivers目录下的文件都不要修改,只有极少数情况下需要修改,但是需要注意,修改后,如果用CubeMX再次生成代码,所做的修改会丢失。

各种中断的ISR(中断服务例程,interrupt service routine)的名称时固定的,文件startup_stm32f407zgtx.s中定义了这些ISR名称。使用stm32IDE进行开发时,我们可以在CubeMX中图形化地设置和管理所有的中断,在CubeMX生成代码时,会自动在文件stm32f4xx_it.h和stm32f4xx_it.c中生成已经开启中断的ISR声明和代码框架,用户一般不需要直接修改文件stm32f4xx_it.h和stm32f4xx_it.c中的内容。

stm32f4xx_hal_msp.c文件里的函数HAL_MspInit()的功能是针对具体MCU的一些初始化工作。

这个函数实际上是对文件stm32f4xx_hal.h中用__weak修饰符定义的弱函数HAL_MspInit()的重新实现。

在主程序里调用HAL初始化函数HAL_Init()时,实际就是调用了这个文件里重新实现的函数HAL_MspInit()。

二进制文件的扩展名有elf、bin、hex,CubeIDE项目编译后,生成的二进制文件的扩展名时elf

在C语言中,关键字 "__weak" 用于修饰函数,表示该函数是一个弱函数(weak function)。弱函数是指,如果用户重新定义了这个函数,那么会执行用户定义函数。

弱函数是指在链接过程中可以被其他具有相同名称的函数定义所替代的函数。

当存在多个同名函数定义时,编译器会选择使用优先级最高的函数定义,而忽略其他弱函数定义。这种机制允许在程序中定义一个默认的函数实现,但是如果用户有特定的需求,可以使用强函数定义来覆盖默认实现。

弱函数在一些场景中非常有用,例如在嵌入式系统中,可以为系统提供默认的中断处理函数,但如果用户需要自定义特定的中断处理逻辑,可以通过强定义(strong definition)来覆盖默认实现。

需要注意的是,弱函数的使用可能会依赖于特定的编译器和链接器实现,因此在具体的开发环境中,特定的编译器文档和相关标准应该作为参考,以确保正确理解和使用 "__weak" 关键字。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值