你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F4中一些值得注意的问题

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:48
在KEIL中建立STM32F4工程中我们经常采用的是一种多C多H文件的形式,这样写的好处是可以把项目拆分成各个模块,便于编写和调试,也就是说每个模块可以单独运行和调试。还有一个好处是整个项目看起来具有具有条理,很容易根据每个文件的名字判断该模块的作用,如果将整个项目都写入main函数里看起来非常臃肿。如图一个工程分成了按键模块,外部中断,延时模块:
: r  t7 e5 |: Q2 R! h5 _6 V! U0 b) G% n' T; J; |4 J& z9 z# _' q! T
20190120204121181.png

0 \, w* \* q; k: r" V( C0 K1 _2 d( X: t6 W! E8 R9 q
.h和.c文件有特定的格式如下图LED灯的.h和.c文件为例:
2 [! u- u$ \1 X  b+ A
1 }# S% n+ k6 ]; u5 L+ L3 f
20190120200643584.png
, g6 P, Q' A* M$ Q3 e
- l2 G9 @# H  l7 p; f1 c* g% Q/ C
20190120200714705.png
! X3 ~7 y9 p& j" F0 s; n1 \
/ I- N! ]& g5 v, L4 Y
.h文件包含函数、数据、类型的声明还有宏定义,需要用到:. n; `  ^: g( {
#ifndef __文件名_H
' _+ b% {! F+ {; P' |#define __文件名_H9 H9 Q, r8 u) y2 ^. [
函数声明
% \, H& Y3 J- e5 H$ I) E# w% N#endif
4 s5 v$ T6 W3 F& ]) {( g这样的结构,这是为了避免头文件被重复包含,如果头文件被重复包含可能会导致程序在编译、链接过程时崩溃。而.c文件中需要包含.h文件并写出在.h文件中定义的函数的作用。0 A( b* Z3 ^, I3 v& R
另外还有一个值得关注的地方在#include后面,include是编译预处理命令,就是将Include后面的文件里面内容复制粘贴到include当前位置.以前我们在学习C语言的时候,用的是尖括号<>,表示在标准库中寻找文件。而在工程中我们用的是单引号 ‘’,表示在当前目录中寻找文件。4 W1 n% }5 w/ l5 d6 ~
还有就是关于全局变量的宏定义,全局变量是作用域从定义处开始到整个文件起作用,而局部变量只在当前文件的函数里起作用。那么对于多C多H文件而言想要将参数传递,比如说在温度传感器.c文件里初始化函数里需要算出温度的值,那么在main函数里需要用到这个参数,就需要用extern声明全局变量,在main函数里面定义这个参数。声明全局变量不等于定义,声明是不分配存储空间的。
1 t4 t$ J. L0 ~最后要注意的是STM32F4的库函数中关于各个功能初始化函数都是通过结构体来完成的,比如说GPIO口的初始化中,GPIO口的结构体里面包含四个成员变量,包含模式,频率等。用结构体的一个原因就是结构体的可扩展性强,可以很方便的添加其他的成员变量,用起来很灵活。
5 i  R# E3 q8 R+ d/ n
5 O5 C8 P& @9 T7 X; [$ s8 a: ~0 Q% b  P8 t' d2 \
收藏 评论0 发布时间:2021-12-6 10:48

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版