电子产业一站式赋能平台

PCB联盟网

搜索
查看: 83|回复: 0
收起左侧

STM32CubeMX生成的代码,是怎样的HAL架构?

[复制链接]

359

主题

364

帖子

2887

积分

三级会员

Rank: 3Rank: 3

积分
2887
发表于 2025-1-1 21:00:00 | 显示全部楼层 |阅读模式
需要注意,CubeMX只是一个初始化工具,它只是帮你完成了HAL库外设和时钟的初始化,具体程序的编写还需要查阅HAL库的说明,使用相关函数实现你想实现的功能。
' k+ H2 V5 p/ p# O$ QCubeMX生成的代码包含了丰富的注释,为用户规范编程提供了参考,如果后期还需要使用CubeMX更改时钟或是添加新的外设,用户代码必须写在相应注释BEGIN和END之间,否则再次使用CubeMX生成代码时,未在指定位置的代码会被删除!
" o+ i& u9 k: x' b

hsb2gdj0hle64047191207.png

hsb2gdj0hle64047191207.png

/ q- \8 D4 G- H: l, R4 {CubeMX可以帮助用户初始化外设,所做的操作在MX_XX_Init()中,但如果用户在代码中自行更改了MX_XX_Init()的内容,再次打开 CubeMX,图形化界面并不会同步用户在代码中对初始化部分所做的更改!6 ~5 D' b3 {% ?% n' Z/ J2 H
综上所述,如果用户希望在整个项目开发过程中一直使用CubeMX进行初始化和对外设参数进行修改,一是需要严格按照注释的位置编写代码,二是不要在代码层面改动MX_XX_Init()的内容,对外设初始化参数的修改要在CubeMX中进行。   9 |6 [1 m! p3 T8 j- F
如果用户只是希望使用CubeMX生成一个工程模板,后期新加外设或修改时钟不再使用CubeMX工具,而是纯使用代码来实现,则不需考虑代码位置和CubeMX的初始化更改。
& ?9 R( T4 A, \3 d. M# p- [

jojnjxlnpom64047191307.png

jojnjxlnpom64047191307.png

: G" ]  p' Y# M6 e, N/ `) [7 B  L# M! n% [8 y; M6 Z5 @1 ^6 f! }
Application/MDK-ARM文件夹:此文件夹下存放在.s启动文件,用户一般不需要进行更改。
' t7 n8 [6 }% D9 Q! M           
4 W- E8 Q: j: Y) y  XDrivers/CMSIS文件夹:存放CMSIS接口文件,用户一般无需关心。   % E7 o: w. `$ w& s- \$ R
           . |; i  `6 o$ E# k- Z
Application/User/Core文件夹:main.c里面有main函数,用户程序从此处开始执行;8 e! S7 A: u. z) y) W& [; z8 k$ M
xx.c关于外设的初始化函数MX_XX_Init()、外设结构体等就在此处被定义;
$ U; B& Y3 V+ E/ j. p) j4 A4 H9 ustm32xx_it.c 中断服务函数在此处被定义(其实也支持在别处复定义),用户可以修改中断服务函数来实现用户需要的功能;
6 \/ i# f& W; _6 M' d. m2 gstm32xx_hal_msp.c 与初始化相关,如果用CubeMX进行初始化,一般也无需关心此文件。: l: l# m% J$ D+ b+ y) P- o/ f
           ) e/ r) y/ Y) j
Drivers/STM32xx_HAL_Driver文件夹:* \- k6 `$ @9 P: H6 f# b6 i( s
HAL库文件夹,里面存放这各个外设相关函数,我们调用的函数,也大多来自此处。
/ ^3 Y! j. j% g& v' _           
; `: y/ C* P1 y更重要的是,这里面也包含HAL库相关外设的使用说明书,以stm32f1xx_hal_gpio_ex.c为例,在库函数的前面会有大篇幅的介绍,介绍如何使用这个外设,实现什么功能需要调用什么函数,非常贴心。   
) T! G- l3 q8 H: r. C! v

g3oiwhzhcqy64047191407.png

g3oiwhzhcqy64047191407.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表