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

STM32F0系列之使用STM32CubeMX点亮第一个LED

[复制链接]
STMCU小助手 发布时间:2022-8-25 21:24
一、新建工程
: |. K$ u4 K2 A+ E% V+ _使用STM32CubeMX新建一个工程,打开STM32CubeMX,点击创建一个工程& s( |& a. ~) m& A4 p7 ]. s% M- G
& q6 {3 c! ?5 d7 ~" t# {+ L! [
20201226204727819.png
& _) f9 H3 ], j2 C1 ^( l# F0 d/ K; A6 y5 i: Y: w6 F
点击搜索STM32F103ZE,选中需要的封装,点击开始创建
( p8 W2 q1 v; d" I 20201226205019670.png
5 ~- R4 o; a% h7 }& P1 {. z' V* r. a- Y. k9 u1 y
我们可以先将工程保存一下,以免丢失,点击【File】->【Save Project】
! ?) o7 s( ?% q  Y8 r% R6 T+ M
! P: }1 G1 [: P 2020122620531186.png ( H! ^7 ?6 A6 `
. h8 {  P9 i% U0 q, ^- A% h
工程新建好之后会直接进入【Pinout 】选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿色。
) e/ y' |$ F* L! a
% W$ E/ v. t( s6 J+ q5 ~$ l, Y 20201226205553603.png % e2 D" v. v8 e! @$ r

  J; M/ A. O; S$ g2 }7 t二、配置时钟源(RCC设置)
& Q/ i' Z$ l& h' o. {) C: J$ x对STM32 芯片而言,RCC 配置的重要性不言而喻。在 STM32CubeMX 中,RCC 相关设置却非常简单,因为它把时钟系统独立出来配置。在操作界面,依次点击选项卡Pinout->Peripherals->RCC 便可进入RCC 配置栏,我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。操作步骤如下图所示:8 v& @9 O3 {+ H+ w8 ^, |
3 Q6 a/ W2 y5 f8 M2 ?( }4 z+ y# ~
20201226205858939.png
% s) D( j% U! z4 B& x) [. V6 b6 _! e0 s
从上图还可以看出,在我们打开了HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。
7 A8 J; K' G) r接下来点击【Clock Configuration】开始配置系统时钟树。0 e8 P/ ?$ D2 U- [9 z% Y

' t6 q. d% f& ^! e9 S 20201226210157926.png
2 D8 X9 L8 b4 h% i! Q2 I' W
# s$ Z5 S3 U9 `: Z; r" |我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:1 o% x1 z. P2 N5 I( }
①时钟源参数设置:HSE 或者HSI 配置。这里我们选择HSE 为时钟源,所以我们之前必须在RCC 配置中我们开启HSE。( f3 i, n% s# Y' u- D$ ?
②时钟源选择:HSE还是HSI。这里我们配置选择器选择 HSE 即可。
3 m" |( u6 _: e5 K( u* v③主PLL 倍频系数配置。倍频系数我们设置为x9。7 T& t' R9 m; c" ~
④系统时钟时钟源选择:PLL,HSI 还是HSE。这里毫无疑问,我们选择 PLL,选择器选择PLLCLK 即可。
; `# h: s) H; N⑤经过上面配置以后此时 SYSCLK=72Mhz。! ?4 x! T% j) p  j
经过上面的 7 个步骤,就会生成标准的 72MHz 系统时钟。接下来我们只需要依次配置AHB,Systick,APB1 和APB2 的分频系数,我们都配置为 1 即可。配置完成之后,那么 HCLK=72MHZ,Systick=72MHz,PCLK1=36MHz, PCLK2=72MHz 。
! X% K2 k& P6 D" `. s; u6 D) s+ t" o
20201226211139506.png
0 Y$ N8 ~/ q: ?7 V! t' r3 v1 Q* Z% p# Z
三、GPIO引脚功能设置
' }' P. f- O( K, ^  ?这里我们回到STM32CubeMX 的Pinout 选项,可以通过搜索栏输入PB5 即可找到PB5在引脚图中的位置如下图所示,然后点击PB5,在弹出的下拉菜单中,选择 IO 口的功能为GPIO_Output。(PB5接入了LED0)
: k' M% g$ @  ~3 R& O  Y) l
4 j/ L. |# o2 U) d 20201226213826692.png
0 b6 A8 ^) \( _, t& r6 M) C( V. P5 d. d- g/ ^. [
四、生成工程源码
  g( _; h4 |  E: x点击菜单【Project Manager】. T) \1 I& Y" ~
1 a1 U/ f/ B6 f( C* v/ j
20201226214751694.png 3 T& D2 n  z5 \2 P

- N& D) S% Z4 U  d: [. M# _' Y! j2 R【Toolchain/IDE】选择Makefile
* t: P; k& ^8 r/ N6 N! {) i- s1 k( s4 ~& ?2 e' w  h2 ]0 I
2020122621422641.png
6 ?( M1 q0 }+ K3 x* ^  N9 k1 [0 L( A. H+ L; \2 Q! M; W) q
按个人喜好,我这里选LL库: h: ^5 i$ W- R; `

& C" ]% `) @1 H4 u2 j, C 20201226214715876.png 5 p0 o' R$ D8 X7 h) N
8 q4 \7 L  |: i" i4 K0 [2 _
然后点击【GENERATE CODE】即可生成源码
( U( I+ N: |5 N' N0 G
& r( H' Z5 y+ Y4 K 20201226214024150.png " b. E! H+ S: t. L  a" U9 \6 |/ F
+ K% h4 h* U* E, y% E
五、配置VSCode9 l6 o3 i) a5 a
使用VSCode打开工程,【文件】->【打开文件夹】,选择生成工程的文件夹+ k9 n% O* S/ [1 r. R- ~8 r% z
! P3 V  H4 N$ ^: J1 Q% S3 V
20201226215813401.png
$ Q5 v5 D# Y1 F; g
, O9 t5 K8 `; k! M3 b$ B打开main.c如下所示
7 T- C1 c4 R% e; `) ^! p5 W/ P9 R
3 i# p* h1 l+ T' P- ~: W 20201226215958957.png 7 u1 c$ R5 J1 W; S9 S2 G% m
2 x1 O& Q# j9 d1 G; B7 r" @7 g
我们需要添加几个插件
4 t: g2 G5 Z- |( l4 L
/ o! @  h3 D) Y1 O+ ^) E. S 20201226220522538.png ' q' {" ?+ {( U/ l" d
+ y; I0 `$ A; J( P
接下来需要做一些配置,这很重要' P' P* O& Y' {2 v0 o6 ^' U
2 S" q" B+ t9 }4 [
点击【文件】->【首选项】->【设置】6 F* F2 i: v; m1 s6 C* f  t
/ _* o1 q% Y! p4 y$ W
20201226220759820.png
/ B# I) X6 I$ D. H% L- M6 L9 E2 E0 F# z4 m
然后在搜索栏中输入intelli sensemode,将其选择为【gcc-arm】$ X% p2 w) ?; z! Z/ Z( D/ _# W

( p0 K: |/ T7 A2 L' h9 } 20201226221005800.png 5 E, K0 Q4 J1 ~) [4 M

/ q; v' ?/ n1 ~6 a+ ^& B5 d按【Ctrl+Shift+P】打开命令输入栏,输入【C/C++: 编辑配置(UI)】! @  n9 v. c% `

% _: m6 K1 F' E 20201226221431306.png
  E6 X& W2 Y9 _9 b) H. D" V# Z
" P' d* s) y6 ^% H( I  V* u- c然后在【定义】项目下添加如下三个宏定义( P! u5 x" N, U

& D; W) `3 X7 q6 t! z* x( Z% y- t
  1. __CC_ARM
    3 m! @) t$ Q# z+ @9 I+ x
  2. USE_FULL_LL_DRIVER
    4 o9 t/ I/ ^3 O! X
  3. STM32F103xE
复制代码
6 `# H7 S6 C6 m* d3 ~" N- B& ?/ \
20201226222009332.png
' @2 C3 y3 K; q8 H) P$ r3 T4 ?# T0 d; s4 X: Z
其中第一条宏定义是告诉代码提示引擎使用gcc-arm的语法规则和库文件,如果不添加这条宏定义会出现如“uint32_t未定义”等错误。
7 A2 g: D  p  h$ r后面两条宏定义我们可以在Makefile文件中找到,但是VSCode检查语法的时候并不会去读Makefile,因此需要我们手动添加。注意前面的-D是Makefile的格式。
" F2 B6 m; ]7 E; x
3 y. L: s4 ?8 [9 C5 j$ [0 @ 20201226222431588.png 7 Q7 }& P2 Q, C9 |' [6 d

& J+ I9 l$ ?' Y  `& P9 k3 J在上面的【包含路径】栏添加头文件包含路径
% A" h- K4 K8 e; c# {: m& Y
- t1 Q; t% T) Q
  1. Core/Inc
    ; V5 p% H, \0 y3 Q' ]7 I( D- j8 N* |
  2. Drivers/STM32F1xx_HAL_Driver/Inc: \, ]$ I+ S, e  Z7 C, e
  3. Drivers/CMSIS/Device/ST/STM32F1xx/Include
    4 C3 h0 C/ ?2 p! @0 e
  4. Drivers/CMSIS/Include
复制代码

% ?3 b0 m1 H; N! H! v我们可以保留其默认的${workspaceFolder}/**,也可以删去,看个人喜好) a8 E0 d7 A7 |
% w; Z! J- Q% k" p, t2 |" Q& {
20201226222954232.png % S( x; [. X' B

. |( {, i4 s% P  U9 x8 ?同样的,我们也可以在Makefile中找到6 e/ v5 T9 P6 g2 {5 l- m$ r8 b
8 I" y. ~; q6 e+ {& J8 z) x# Z
20201226223039665.png
8 }; m3 [' M- s! }7 j7 [/ y: ?; L5 u
编译器路径选择gcc  z2 _3 B: W# [, X4 x% ^, D- i7 g

8 y! i& u0 u: x. K  Z4 G8 Y3 {$ d 20201226223427332.png 4 h; q, m. j  x' U9 O

0 ?3 c8 H  \# h/ z6 [4 W如果编辑器还不能进行代码提示,在搜索栏搜索【prevent】,将搜索结果中的对勾取消& e& r( e: A, ~5 j6 T5 _% X
  g( [" b+ e3 @6 K
20201226223703777.png
& y( H( k6 ?0 J& Q! c, o* L% o. \( O( d
六、修改代码,编译工程
1 o# z) h- }+ P6 a9 {- ^$ T  O
将main函数的while循环修改为如下所示:" s- \% a" Y. y4 V8 y
4 j7 I7 H+ ?8 r. ^! G6 W8 D
  1.   while (1)0 t3 N$ Z1 t0 q1 Z
  2.   {
    5 P  D, f$ Z& U' [& E( C" t
  3.     /* USER CODE END WHILE */
    $ N) E$ ^1 v- ^- I! {
  4.     LL_mDelay(500);
    , J8 F" ]; z- e. m
  5.     LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_5);- g0 M# T& z: H, S5 P) ?
  6.     LL_mDelay(500);- ~0 U7 J( F3 M8 u( W1 h# e
  7.     LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_5);
    . j2 i3 h) y9 ?' m5 a  v$ H# D
  8.     /* USER CODE BEGIN 3 */- L* o/ L$ l# i, f( Z) R7 [
  9.   }
复制代码
4 d% _+ T3 f( @1 W8 r, J* p
然后在bash下输入make命令,可以看到,生成了len.hex和led.bin文件
* K$ g; |7 x& ]" M& ?$ I4 @& q6 {, @6 ?
20201226224533984.png
: ]( g8 R' @; Q( N  a8 k! M% _9 ?# D  o5 I7 ?+ J
七、下载到开发板
7 m( V% Q9 u! E! H1 o& i打开【STM32CubeProgrammer】,找到生成的文件路径,点击下载即可* z- _  O% u2 Q4 k$ _# b* o& L
" j1 r& X9 p0 `% G- i
20201226225121709.png 9 v3 `( o$ X2 {* _  d' U1 R2 e1 Y& Z
1 w; [! o* q) P: M. \1 n; m
下载完后我们发现STLink连不上了,经过一番研究,最终发现在main函数开头调用了一个函数是JATG和SW失效了
9 R' L, U# Y" w
) m: S  g9 i3 |: q4 u/ f# K# s 20201226231339997.png - K, i9 o5 c" L- a

8 v" S1 k* ~* ~$ ~% j5 x$ p2 O& X* R我们将其注释掉然后通过串口再烧录即可
- V  Y4 V4 h; _& v+ u) u0 B% f
$ f& I# z& C$ Q. k: N6 d/ } 20201226231749425.png
; _0 X7 w6 C, y; c7 o, N- o+ R% F7 H6 S! m
然后可以观察到LED0闪烁: C) Q4 u8 {% C. Z
( p2 j8 j: d, \( O, Z& C1 h
20201226232237881.gif
7 c6 [& u3 J3 k1 v0 z" T) x; l4 |# s3 U7 X- [
八、附录
; S# }' B5 v7 X+ k5 f7 @( D- s————————————————" G, U9 ?% R3 b& p# f6 v+ Z" h8 O1 a  ^
转载:Willliam_william
  z; X8 w0 d7 p9 O* V
5 I) [, d+ S5 R, E: {, l
8 V0 Z" ]5 l7 I0 f$ x% {
赞 收藏 评论0 发布时间:2022-8-25 21:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版