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

STM32使用LL库建立工程

[复制链接]
STMCU小助手 发布时间:2022-8-27 15:04
LL库(Low Layer)是ST最近新增的库,更接近硬件层,直接操作寄存器。其支持所有外设。今天我们通过STM32CubeMX建立一个LL库工程,使用小熊派BearPi开发板,芯片型号为STM32L431RCT6。
+ H% u$ P4 ?8 K/ T2 l+ X6 c$ U' _7 \4 {+ K% `
一、工程建立步骤
/ P  Q1 }- b' w- L! g1、工程初步建立和保存* k4 V* F' u7 N1 N
2、配置时钟源(RCC设置): Z+ I8 z( t" i% b( B0 _/ ^/ V
3、GPIO引脚功能设置
% l8 t6 i1 a5 F: h  m4、外设初始化配置6 o( L( U0 @# A8 Y2 C
5、生成工程源码0 m6 U, O' ?% j: L
6、编写用户程序
7 z$ K) j8 j/ Y9 g5 s- w% o* o
: c( h2 z9 r& g+ {二、工程建立& z* o2 i- s# A7 A1 V0 ^  d0 d
1、工程初步建立和保存' T" U1 [/ r! J
首先确保STM32CubeMX程序库目录下存在L4支持包:
. `) ~* b. E' i# c" P; C: \ 20200102130906306.png & W; C, [5 s$ u8 _; I7 d! l1 a9 o* E
3 D1 d( w3 b% M3 J$ K5 \" V
然后就可以开始新建工程。工程建立的方法有两种方法,第一种方法是打开 STM32CubeMX 之后在主界面点击 New Project 按钮,第二种方法是在菜单栏依次点击File->New Project。操作方法如下图所示:" x! y7 f& n6 n! F4 L9 d5 _
" M& g% T+ W6 y) H
20200102131313453.png
, R. s* I: u9 u
, g9 g4 N' K5 ~, m5 _点击新建工程按钮之后,会弹出MCU 选择窗口。我们可以通过选项卡Series,Lines 和Package等筛选出我们要的芯片,或者直接选择我们使用的芯片型号STM32L431RC,封装选择为LQFP64,最后双击确定选择。操作方法如下图所示:
! a& p# p! ?# n
4 x: [5 X) {. ]3 s3 ~: r1 N- C( l 20200102132053901.png
6 E" Z7 A- s+ c$ u3 n* v+ T
& F6 d# Z- K" T% g% L& J4 \4 F3 T为了避免在软件使用过程中出现意外导致工程没有保存,所以我们选择好芯片型号之后,先对工程进行保存。依次点击菜单栏 File->Save Project,然后保存工程到某个文件夹下面即可。( V4 m, S) Z# j; K; d2 N4 r' ]

& ?$ {) I4 g8 C9 W( G3 W0 h9 r0 g  |0 N 20200102132500625.png   E, o3 K" V- Q) J; ?& Y$ Z

/ \  N( S% [1 _: A# e: i. v保存完成之后,大家进入 UART目录后发现目录中多了一个 UART.ioc 文件,下次我们点击这个文件就可以直接打开这个工程。' `+ C0 t. r' L9 E. B- _
; |( ^+ j7 W$ p% P4 n5 J
20200102132658660.png # a* G/ I& x. o$ ^

9 \4 f: O2 s8 \$ y: J. i3 L工程新建好之后会直接进入Pinout 选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿色。2 X6 H  j7 R# s! M/ w  ]
& b( D+ M2 m! u" b
20200102132754642.png
# m* ]3 h- q' O9 i( y# g0 A
9 a; q# E" [" r( S- n2、配置时钟源(RCC设置)
$ t! ~8 F$ T4 _7 S# e! X; ^对STM32 芯片而言,RCC 配置的重要性不言而喻。在 STM32CubeMX 中,RCC 相关设置却非常简单,因为它把时钟系统独立出来配置。在操作界面,依次点击选项卡Pinout->Peripherals->RCC 便可进入RCC 配置栏,我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。操作步骤如下图所示:& G& e' h. s) d& I  z
) b) w# M- r) @. R+ k7 M/ _4 V" x
20200102133158578.png
% u  }# V) o# i1 E1 Z# z& \
& j8 M, U; S% {7 l6 H8 G从上图还可以看出,在我们打开了HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。配置完RCC之后,接下来配置系统时钟树。5 j4 ^4 l4 f3 ?
我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
8 j9 o, l( C" a/ U* Z①时钟源参数设置:HSE 或者HSI 配置。这里我们选择HSE 为时钟源,所以我们之前必须在RCC 配置中我们开启HSE。! S) K" O/ g, O
②时钟源选择:HSE、HSI 还是MSI。这里我们配置选择器选择 HSE 即可。9 T* v" N' C; \9 l, E
③PLL 分频系数M 配置。分频系数M 我们设置为1。- h3 @6 _7 Y% x
④主PLL 倍频系数 N 配置。倍频系数N 我们设置为20。
3 m* Y% X$ k, s) Y; w4 ~⑤主PLL 分频系数 R 配置。分频系数R 我们配置为2。, V2 \% b7 `3 Q1 y7 G% T
⑥系统时钟时钟源选择:PLL,HSI,HSE 还是 MSI。这里毫无疑问,我们选择 PLL,选择器选择PLLCLK 即可。6 ^2 ]* T* \8 F4 v' }: r
⑦经过上面配置以后此时 SYSCLK=80Mhz。
0 r8 D9 P) _, l- Q' L2 `0 l6 b3 D: I经过上面的 7 个步骤,就会生成标准的 80MHz 系统时钟。接下来我们只需要依次配置AHB,Systick,APB1 和APB2 的分频系数,我们都配置为 1 即可。配置完成之后,那么 HCLK=80MHZ,Systick=80MHz,PCLK1=80MHz, PCLK2=80MHz 。$ T3 f2 y8 k, u* Z
4 \* C& k5 p6 Z: Q
20200102133847900.png
7 l/ M* Q5 g3 g, u7 a. g
& T# V! Y3 g; G. B& @8 ^' g3、GPIO引脚功能设置# ~7 M  w* U4 \% |7 |- g+ E
这里我们回到STM32CubeMX 的Pinout 选项,可以通过搜索栏输入PC13 即可找到PC13在引脚图中的位置如下图所示,然后点击PE7,在弹出的下拉菜单中,选择 IO 口的功能为GPIO_Output。(PC13接入了LED)
* d6 H# |/ Y. T% ]$ ^- X3 w/ G' x9 u4 _( T
20200102134804995.png
' r; f5 ?* C: u8 ^7 L1 C
7 p# [; q5 y8 o" }; i& ^# P同样的方法,我们配置PB2和PB3 选择功能为GPIO_Input 即可。(PB2,PB3接入KEY1,KEY2按键): @- L9 K) `( S9 d9 [
, I( T) k. P* |5 c7 \; }
另外我们要使用串口功能。打开 Pinout选项卡界面,左侧依次进入 Configuration->Peripherals->USART1 配置栏。0 g; g. U2 v8 `+ K; M7 c. o
USART1 配置栏有 2 个选项。第一个选项Mode 用来设置串口1 的模式。第二个选项Hardware Flow Control(RS232)用来开启/关闭串口1 的硬件流控制,该选项只有在Mode 选项值为Asynchronous(异步通信)模式的前提下才有效。! v/ O0 J" @& w7 D1 O: _6 c! l+ w
这里我们要开启串口 1 的异步模式,并且不使用硬件流控制,所以这里我们直接选择Mode 值为Asynchronous(异步通信) 即可。! I+ X" a, j6 F6 V) J1 q
配置好串口1 为异步通信模式后,那么在硬件上会默认开启PA9 和PA10 作为串口1 引脚。这时候我们进入引脚配置图可以发现,PA9 和 PA10 变为绿色,同时显示为 USART1_TX 和USART1_RX 功能引脚,如下图 所示:
: i9 M0 L: t* [! X; M% I# x  J
4 h! R8 Q  s/ R0 O, W 20200102140040803.png " F! s" |- D6 V% ]+ W

+ _4 Y! V: W$ z8 a8 _+ P+ }8 p4、外设初始化配置
0 I* o# U/ {4 ^3 ]接下来,我们对外设开始进行初始化配置。+ Z+ O" `6 B1 {5 w6 ]- f
依次点击Configuration->GPIO 即可进入 IO 口详细配置界面。
% @6 u' ^" U; l* r0 }
1 M6 W0 J2 E3 V/ j' O  G 20200102140636585.png
! D& h1 n5 A0 [; w# C. B) }3 f
3 K1 C4 ?% ]5 G; \ 20200102140954864.png
& U8 ?2 A/ H, z! ?/ B+ o
: D( q6 ]8 L; o7 `) u/ T% z8 A在 IO 口详细参数配置界面,点击我们要配置的 IO 口,会在窗口下方显示该 IO 口配置的详细参数表,下面我们依次来解释这些配置项的含义:9 N6 u. f& G0 t* h; j- K2 h
①GPIO output level:默认输出电平,可以为 Low 和High,即低电平或高电平。
' X+ H% k; ^& D" S6 o7 v* c②GPIO mode:用来设置输出模式为Output Push Pull(推挽)还是Output Open Drain(开漏)。" w7 }2 S- D/ O/ s' h0 U
③选项GPIO Pull-up/Pull-down 用来设置IO 口是上拉/下拉/没有上下拉。
4 j9 y- |4 s" R/ T④选项 Maxinum ouput speed 用来设置输出速度为超高速(Very High)/高速(High)/中速(Medium)/低速(Low)。
) y# Y' F" E; W* q0 q! b: g⑤选项 User Label 是用来设置初始化的 IO 口 Pin 值为我们自定义的宏,一般情况我们可以不用设置。- V+ k+ m/ P1 p) m- m( o
4 V0 E- l2 T: L4 K
同样的方法,我们配置另外两个输入 GPIO,不过其配置参数只剩下模式 GPIO Mode 和上下拉GPIO Pull-up/Pull-down,并且模式值中只有输入模式 Input Mode 可选。这里,我们配置为上拉输入即可。  T0 d% A5 u1 k, H- t

/ s9 n+ b" s% B 20200102141616698.png
$ o2 l  V, l' o1 Q* N, o1 z' ?+ L4 ]! e, q) Q. w8 [
然后我们对USART的Pin进行配置,点击UASRT1选项卡,选择相应的引脚,我们可以看到相关的配置。对于外设的功能引脚,在我们使能相应的外设(比如 USART1)之后,STM32CubeMX 会自动设置GPIO 相关配置,一般情况下用户不再需要去修改。所以这里,对于PA9 和PA10 的配置我们就保留软件配置即可。3 Q# l$ d5 G5 I# w& U

$ y: k" g9 l* o 20200102142005324.png 3 ]$ n; @" c8 D" }6 m2 L. Z

) f  ]& ]  T$ n( J+ H4 S' P点击【OK】完成对引脚的配置。
" ]& w5 U' S: c0 f- ~! u
/ p8 m( {* V. _; U, E0 P( w! c2 f接下来我们需要配置 USART1 外设相关的参数,包括波特率,停止位等。我们直接进入Configuration 选项卡,如果我们之前使能了USART1,那么在Connectivity 栏会出现USART1 配置按钮。如下图所示, 接下来我们点击 USART1 配置按钮,进入USART1 详细参数配置界面。
* y/ z; a2 D' [; n0 F在弹出的USART1 Configuration 界面会出现5 个配置选项卡。Parameter Settings 选项卡用来配置USART1 的初始化参数,包括波特率停止位等等。这里我们将USART1 配置为:波特率 115200,8 位字长模式,无奇偶校验位,1 个停止位,发送/接收均开启。
: _" E0 a1 X" E& H6 K/ x: H8 D$ l- \8 F5 P& G( ~$ W
20200102142905162.png $ s! t' n! X/ u0 [! J  k' s% c

' e8 a# T. y2 P6 NUser Constants 是用来配置用户常量。0 E% A0 E' S# H# p& ^, A) W' @% ]
NVIC 选项卡用来使能USART1 中断。这里我们勾上 Enabled 选项。
* ]3 I: n1 L& }# g# oDMA Setting 是在使用USART1 DMA 的情况才需要配置,这里我们不配置。+ p% t  O& }( K0 u+ _9 D5 z
GPIO Setting 便是查看和配置 USART1 相关的 IO 口,这之前的作用一致。' {, {+ X  g& _

: Z8 [  P) X; s& Q7 q4 |0 ?配置完USART1 相关IO 口和USART1 参数之后,如果我们使用到串口中断,那么我们还需要设置中断优先级分组。接下来便是配置NVIC 相关参数。同样的方法,进入Conguration选项卡,点击NVIC 按钮,弹出 NVIC 配置界面NVIC Configuration。/ Z3 C( E, C$ K1 U' k
如下图所示,在弹出的NVIC Configuration 界面,我们首先设置中断优先级分组级别,我们系统初始化设置为分组2,那么就是 2 位抢占优先级和2 位响应优先级。所以这里的参数我们选择“2 bits for pre-emption priority”,也就是 2 位抢占优先级。 配置完中断优先级分组之后,接下来我们要配置的是 USART1 的抢占优先级和响应优先级值,这里我们设置抢占和响应优先级均为3 即可。; |+ q3 U& v) a- Q( X" C4 W+ U9 D

/ \/ ?4 A" N% b+ D1 q' Y 20200102143452749.png . Q% z( t$ I1 ?# a4 N; d+ U
) U. H. f0 C  l6 M" q4 S
串口时钟源选择,USART1 有多个时钟源,我们选择其中一个即可,这里使用默认配置,即PCLK2=80MHz,如图所示:/ k9 Z  u' r. j4 a- k

4 \- y  m1 P- F+ K/ q! E 20200102143701903.png
7 n3 f# S5 R6 {& o. P9 ^, g- }
进行完上面的操作之后,接下来我们就可以生成工程代码。
9 l9 l  D7 M2 c7 s$ I, X0 }. i* p  W0 H3 W4 Y2 r! D+ c
5、生成工程源码
; i! Z& T$ C( }# x( y3 L) [) s2 M. ^在 STM32CubeMX 操作界面,依次点击菜单Project->Generate Code即可生成源码,操作方法如下图所示:
! Y" i) ^+ f6 d" w, O/ s3 L
, |& e- z1 W- H4 { 2020010214401076.png ! ?. R+ O4 a# U& e$ S# t
, ?) c, C7 W& b# L# z
点击之后,弹出的界面会要求配置生成的工程名称,保存目录以及使用的编译软件类型。我们依次填写工程名称和保存目录即可,对于编译软件我们选择MDK5 即可。操作过程如下图 所示:
5 H  G! {) Z2 w: P( C. }8 C: L& l& n/ p3 v$ O6 x$ b( B3 w
20200102144357219.png
8 H, x0 W9 X) k1 L2 ]: S7 X" H" ]/ T" z( ?/ u' B0 e
接下来,是LL库工程的建立最重要的一步,点击【Advanced Settings】选项卡,将库选项都改为【LL】- n0 K9 [* Q9 s. h! P5 j$ a

5 x9 {' @2 ]. d7 p  z9 @, @) { 20200102144611588.png
6 h2 a( ?$ _! C, q5 ], W/ ^9 r5 v+ Q" K* f- |
配置完成后,点击OK 开始生产源码。源码生产完成之后,就保存在我们Project Location选项配置的目录中,同时弹出生成成功提示界面,我们可以点击界面的“Open Folder”按钮打开工程保存目录,也可以点击界面的“Open Project”按钮直接使用IDE 打开工程。提示界面如下图 所示:
+ g' a% S, U% r% Y9 v8 e* V5 i- |/ D3 P: b+ ~
20200102161010883.png 3 R! B$ A  Z! m& ~6 y( ]! N& G

, t; D( F8 |- j$ U) S至此,一个完整的 STM32L4 工程就已经生成完成。* V/ U3 O9 B1 B% x

# F9 S. V$ G  G# k9 g 2020010216111676.png
# P/ P3 J4 y6 e
) q$ J, d- n8 n0 i0 h+ m: J/ ]Drivers 文件夹存放的是LL库文件和CMSIS 相关文件。; z! c# f1 k2 C4 H1 s2 q
Inc 文件夹存放的是工程必须的部分头文件。5 V! S7 h5 C; D
MDK-ARM 下面存放的是MDK 工程文件。2 B2 w) a+ S& p4 T* }9 k
Src 文件夹下面存放的是工程必须的部分源文件。
* S$ M) b" _9 w4 G" U" P1 i' g! ~Template.ioc 是STM32CubeMX 工程文件。: i* f1 G; }5 O& Y1 |. a6 Y5 ]
————————————————2 l4 n7 s& b2 [6 x$ F5 C
转载:Willliam_william! I# y# B6 o' s. m5 L0 e

5 S5 M" H) W$ T
5 Q2 j/ h' j% [& K/ e
收藏 评论0 发布时间:2022-8-27 15:04

举报

0个回答

所属标签

相似分享

官网相关资源

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