
LL库(Low Layer)是ST最近新增的库,更接近硬件层,直接操作寄存器。其支持所有外设。今天我们通过STM32CubeMX建立一个LL库工程,使用小熊派BearPi开发板,芯片型号为STM32L431RCT6。 6 c$ U' _7 \4 {+ K% ` 一、工程建立步骤 1、工程初步建立和保存* k4 V* F' u7 N1 N 2、配置时钟源(RCC设置): Z+ I8 z( t" i% b( B0 _/ ^/ V 3、GPIO引脚功能设置 4、外设初始化配置6 o( L( U0 @# A8 Y2 C 5、生成工程源码0 m6 U, O' ?% j: L 6、编写用户程序 二、工程建立& z* o2 i- s# A7 A1 V0 ^ d0 d 1、工程初步建立和保存' T" U1 [/ r! J 首先确保STM32CubeMX程序库目录下存在L4支持包: ![]() 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 ![]() 点击新建工程按钮之后,会弹出MCU 选择窗口。我们可以通过选项卡Series,Lines 和Package等筛选出我们要的芯片,或者直接选择我们使用的芯片型号STM32L431RC,封装选择为LQFP64,最后双击确定选择。操作方法如下图所示: ![]() 为了避免在软件使用过程中出现意外导致工程没有保存,所以我们选择好芯片型号之后,先对工程进行保存。依次点击菜单栏 File->Save Project,然后保存工程到某个文件夹下面即可。( V4 m, S) Z# j; K; d2 N4 r' ] ![]() 保存完成之后,大家进入 UART目录后发现目录中多了一个 UART.ioc 文件,下次我们点击这个文件就可以直接打开这个工程。' `+ C0 t. r' L9 E. B- _ ; |( ^+ j7 W$ p% P4 n5 J ![]() 工程新建好之后会直接进入Pinout 选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿色。2 X6 H j7 R# s! M/ w ] & b( D+ M2 m! u" b ![]() 2、配置时钟源(RCC设置) 对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 ![]() 从上图还可以看出,在我们打开了HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。配置完RCC之后,接下来配置系统时钟树。5 j4 ^4 l4 f3 ? 我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为: ①时钟源参数设置: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。 ⑤主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。 经过上面的 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 ![]() 3、GPIO引脚功能设置# ~7 M w* U4 \% |7 |- g+ E 这里我们回到STM32CubeMX 的Pinout 选项,可以通过搜索栏输入PC13 即可找到PC13在引脚图中的位置如下图所示,然后点击PE7,在弹出的下拉菜单中,选择 IO 口的功能为GPIO_Output。(PC13接入了LED) 3 w/ G' x9 u4 _( T ![]() 同样的方法,我们配置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 功能引脚,如下图 所示: ![]() 4、外设初始化配置 接下来,我们对外设开始进行初始化配置。+ Z+ O" `6 B1 {5 w6 ]- f 依次点击Configuration->GPIO 即可进入 IO 口详细配置界面。 ![]() ![]() 在 IO 口详细参数配置界面,点击我们要配置的 IO 口,会在窗口下方显示该 IO 口配置的详细参数表,下面我们依次来解释这些配置项的含义:9 N6 u. f& G0 t* h; j- K2 h ①GPIO output level:默认输出电平,可以为 Low 和High,即低电平或高电平。 ②GPIO mode:用来设置输出模式为Output Push Pull(推挽)还是Output Open Drain(开漏)。" w7 }2 S- D/ O/ s' h0 U ③选项GPIO Pull-up/Pull-down 用来设置IO 口是上拉/下拉/没有上下拉。 ④选项 Maxinum ouput speed 用来设置输出速度为超高速(Very High)/高速(High)/中速(Medium)/低速(Low)。 ⑤选项 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 ![]() * N, o1 z' ?+ L4 ]! e, q) Q. w8 [ 然后我们对USART的Pin进行配置,点击UASRT1选项卡,选择相应的引脚,我们可以看到相关的配置。对于外设的功能引脚,在我们使能相应的外设(比如 USART1)之后,STM32CubeMX 会自动设置GPIO 相关配置,一般情况下用户不再需要去修改。所以这里,对于PA9 和PA10 的配置我们就保留软件配置即可。3 Q# l$ d5 G5 I# w& U ![]() 点击【OK】完成对引脚的配置。 接下来我们需要配置 USART1 外设相关的参数,包括波特率,停止位等。我们直接进入Configuration 选项卡,如果我们之前使能了USART1,那么在Connectivity 栏会出现USART1 配置按钮。如下图所示, 接下来我们点击 USART1 配置按钮,进入USART1 详细参数配置界面。 在弹出的USART1 Configuration 界面会出现5 个配置选项卡。Parameter Settings 选项卡用来配置USART1 的初始化参数,包括波特率停止位等等。这里我们将USART1 配置为:波特率 115200,8 位字长模式,无奇偶校验位,1 个停止位,发送/接收均开启。 8 D$ l- \8 F5 P& G( ~$ W ![]() User Constants 是用来配置用户常量。0 E% A0 E' S# H# p& ^, A) W' @% ] NVIC 选项卡用来使能USART1 中断。这里我们勾上 Enabled 选项。 DMA Setting 是在使用USART1 DMA 的情况才需要配置,这里我们不配置。+ p% t O& }( K0 u+ _9 D5 z GPIO Setting 便是查看和配置 USART1 相关的 IO 口,这之前的作用一致。' {, {+ X g& _ 配置完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 ![]() ) U. H. f0 C l6 M" q4 S 串口时钟源选择,USART1 有多个时钟源,我们选择其中一个即可,这里使用默认配置,即PCLK2=80MHz,如图所示:/ k9 Z u' r. j4 a- k ![]() & o. P9 ^, g- } 进行完上面的操作之后,接下来我们就可以生成工程代码。 . i* p W0 H3 W4 Y2 r! D+ c 5、生成工程源码 在 STM32CubeMX 操作界面,依次点击菜单Project->Generate Code即可生成源码,操作方法如下图所示: ![]() , ?) c, C7 W& b# L# z 点击之后,弹出的界面会要求配置生成的工程名称,保存目录以及使用的编译软件类型。我们依次填写工程名称和保存目录即可,对于编译软件我们选择MDK5 即可。操作过程如下图 所示: & n/ p3 v$ O6 x$ b( B3 w ![]() : S7 X" H" ]/ T" z( ?/ u' B0 e 接下来,是LL库工程的建立最重要的一步,点击【Advanced Settings】选项卡,将库选项都改为【LL】- n0 K9 [* Q9 s. h! P5 j$ a ![]() 9 r5 v+ Q" K* f- | 配置完成后,点击OK 开始生产源码。源码生产完成之后,就保存在我们Project Location选项配置的目录中,同时弹出生成成功提示界面,我们可以点击界面的“Open Folder”按钮打开工程保存目录,也可以点击界面的“Open Project”按钮直接使用IDE 打开工程。提示界面如下图 所示: 9 v8 e* V5 i- |/ D3 P: b+ ~ ![]() 至此,一个完整的 STM32L4 工程就已经生成完成。* V/ U3 O9 B1 B% x ![]() 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 文件夹下面存放的是工程必须的部分源文件。 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 |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门