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

如何学习STM32的库函数(以GPIO配置为例)

[复制链接]
generalcircuits 发布时间:2019-6-19 09:20
本帖最后由 generalcircuits 于 2019-6-20 16:50 编辑 1 Q( R+ `% o  L) x

. k2 H% x) v$ z) m       初学STM32和51单片机转向STM32的大伙们注意啦!初次接触学习STM32,是不是要来一个入门仪式,实现STM32版的“Hello World”——点灯仪式,你会发现必然要用到GPIO的配置,不同于51系列直接接IO口赋予高点电平来实现LED等亮灭的过程,SMT32显得有些复杂,需要调用库函数,看起来很麻烦,刚接触有很多疑惑。这就要求我们要学会看STM32的库函数啦。然后分享一下自己收集的资料跟大家分享一下。介绍如何学习、解释STM32的库函数,以GPIO配置为例。下面是介绍内容。       意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。: y# z+ |5 V. s; b
2 O! c# r& R% e/ r
但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32的库函数做一个简单的剖析。
1 K1 j5 U! h' m3 m% t: h7 k* ^  a- ?( M
以最常用的GPIO设备的初始化函数为例,如下程序段一:
* Q2 e& I6 n* k, N" p8 N  V
  1. GPIO_InitTypeDef GPIO_InitStructure;                                                                                                       18 E4 l9 y3 r5 S- n

  2. 5 S1 U. z' Y6 _% q' l0 B! l
  3.                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                                                                              2
    ; L  [- Q+ g4 Q9 V
  4. 1 ^6 N; w. K4 k6 }- E" c0 \& Q
  5.                         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                                             3" w  a8 X9 A. O

  6. : X$ t2 o: G" x" T+ f
  7.                         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                                              4" P# s0 ^1 j: |/ Z$ k' U

  8. , y8 [* X" A3 c& |/ B: c/ ~0 h
  9.                         GPIO_Init(GPIOA , &GPIO_InitStructure);                                                                                                  5
复制代码
      这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解:" s5 L$ u$ M% v6 O3 w* |
   : d* Y, Z+ x# F; I& {/ m: Y, Y
      算了算了,编译器有点难受,我直接上PDF文件给大家,大家看完觉得有用记得顶一下

" _" p7 v3 X! D; V1 w3 |

如何学习STM32的库函数.pdf

下载

310.69 KB, 下载次数: 10

赞 收藏 评论16 发布时间:2019-6-19 09:20

举报

16个回答
子曰好人 回答时间:2019-6-19 11:04:00
本帖最后由 子曰好人 于 2019-6-19 11:08 编辑
5 w( X- s$ m9 F& i% [) u
  1. void LED_Init(void)+ S. W+ O: Q3 X% o' A7 N
  2. {! N+ W2 X% ]6 f+ A* J$ n, B4 R2 h/ e
  3.     GPIO_InitTypeDef GPIO_InitStructure;% o3 p  W3 G# D. c2 d% O
  4.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);8 @8 p( v7 z$ l$ S1 d9 y9 z1 C
  5.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;2 d1 Z, ~5 }: p
  6.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    0 _5 P1 M# o( n% _  E! I2 C* n0 E, }
  7.     GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;5 u2 h, n  a/ @# \
  8.     GPIO_Init(GPIOA , GPIO_InitStructure);9 ]9 y) {, u) z5 s8 m
  9. }0 V0 q, p. L; [$ S0 ]  R- r! _# c
复制代码
建议楼主贴代码用这种方式来做,更明显和突出+ {5 y4 k6 B( X& w5 z: I
+ t1 r: b! d5 @  G
另外一个问题,是标准的初始化过程还需要打开GPIO相应的时钟,不知道你是统一在这段代码调用之前开的时钟还是怎么处理的
, p0 k. |) A9 ^9 V# Y) B( y( Q  [/ @, F7 M( V

+ {3 Z! K8 p5 f. c0 ~
子曰好人 回答时间:2019-6-19 13:33:43
generalcircuits 发表于 2019-6-19 13:08
, b0 O7 L4 u0 B) X$ Y& R4 n; [. Y2 d不好意思,忘记传文件了,初始化已经打开了GPIO相应的时钟,另外问一下,像你这样贴代码是怎么弄得?谢谢 ...

- x4 T2 Y$ ^7 r 高级模式.png
3 g/ L7 d% d4 t) a& T高级模式中的一些插件,方便在回帖和发帖时候更清晰的表达自己的思路,常用的就插入图片,附件,还有就是这个贴代码了
- C, v% J' {$ A5 \. o4 x/ [
generalcircuits 回答时间:2019-6-19 13:08:47
子曰好人 发表于 2019-6-19 11:04
% E. \& Q) z$ e# M3 |# D建议楼主贴代码用这种方式来做,更明显和突出
+ n- ]" v# z& J# D: Y. F
0 Z. _6 N$ v; B* E* @8 d0 N1 C, C3 @另外一个问题,是标准的初始化过程还需要打开GPIO相应的时钟 ...
8 L0 P5 A' {  |6 b) G0 W# z8 Z
不好意思,忘记传文件了,初始化已经打开了GPIO相应的时钟,另外问一下,像你这样贴代码是怎么弄得?谢谢啦
frank171 回答时间:2019-6-19 10:01:48
算了算了,直接发视频吧
generalcircuits 回答时间:2019-6-19 10:32:13
frank171 发表于 2019-6-19 10:01& a; [/ {0 K; T6 Z
算了算了,直接发视频吧

( C' a+ S+ x1 M" w% i; ^% ?视频也有,感觉不是很详细。时间花的也多
大悟哥 回答时间:2019-6-19 11:10:48
建议楼主贴代码用这种方式来做
generalcircuits 回答时间:2019-6-19 13:09:32
大悟哥 发表于 2019-6-19 11:10% r& K/ u: n! f* U- `. v
建议楼主贴代码用这种方式来做

$ C) }0 u& t4 _$ l5 d5 x# e* t好的,这种贴代码的方法还不懂,求教
generalcircuits 回答时间:2019-6-19 14:12:59
子曰好人 发表于 2019-6-19 13:338 V2 W; j0 B1 y, {0 h4 ^
高级模式中的一些插件,方便在回帖和发帖时候更清晰的表达自己的思路,常用的就插入图片,附件,还有就 ...

" f5 M7 @. f+ h- u好的,感谢感谢
zoro3 回答时间:2019-6-20 14:33:46
挺不错的资料,谢谢分享
generalcircuits 回答时间:2019-6-20 15:26:57
不客气,不客气
lanshitou 回答时间:2019-6-20 16:14:12
谢谢分享
generalcircuits 回答时间:2019-6-20 16:49:02
不客气呢
熊二在深圳 回答时间:2019-6-20 17:34:27
感谢分享啊。
瞻_ 回答时间:2019-6-21 08:48:34
很好的资料,非常感谢!
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版