STM32使用LL库建立工程
LL库(Low Layer)是ST最近新增的库,更接近硬件层,直接操作寄存器。其支持所有外设。今天我们通过STM32CubeMX建立一个LL库工程,使用小熊派BearPi开发板,芯片型号为STM32L431RCT6。
一、工程建立步骤
1、工程初步建立和保存
2、配置时钟源(RCC设置)
3、GPIO引脚功能设置
4、外设初始化配置
5、生成工程源码
6、编写用户程序
二、工程建立
1、工程初步建立和保存
首先确保STM32CubeMX程序库目录下存在L4支持包:
然后就可以开始新建工程。工程建立的方法有两种方法,第一种方法是打开 STM32CubeMX 之后在主界面点击 New Project 按钮,第二种方法是在菜单栏依次点击File->New Project。操作方法如下图所示:
点击新建工程按钮之后,会弹出MCU 选择窗口。我们可以通过选项卡Series,Lines 和Package等筛选出我们要的芯片,或者直接选择我们使用的芯片型号STM32L431RC,封装选择为LQFP64,最后双击确定选择。操作方法如下图所示:
为了避免在软件使用过程中出现意外导致工程没有保存,所以我们选择好芯片型号之后,先对工程进行保存。依次点击菜单栏 File->Save Project,然后保存工程到某个文件夹下面即可。
保存完成之后,大家进入 UART目录后发现目录中多了一个 UART.ioc 文件,下次我们点击这个文件就可以直接打开这个工程。
工程新建好之后会直接进入Pinout 选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿色。
2、配置时钟源(RCC设置)
对STM32 芯片而言,RCC 配置的重要性不言而喻。在 STM32CubeMX 中,RCC 相关设置却非常简单,因为它把时钟系统独立出来配置。在操作界面,依次点击选项卡Pinout->Peripherals->RCC 便可进入RCC 配置栏,我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。操作步骤如下图所示:
从上图还可以看出,在我们打开了HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。配置完RCC之后,接下来配置系统时钟树。
我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
①时钟源参数设置:HSE 或者HSI 配置。这里我们选择HSE 为时钟源,所以我们之前必须在RCC 配置中我们开启HSE。
②时钟源选择:HSE、HSI 还是MSI。这里我们配置选择器选择 HSE 即可。
③PLL 分频系数M 配置。分频系数M 我们设置为1。
④主PLL 倍频系数 N 配置。倍频系数N 我们设置为20。
⑤主PLL 分频系数 R 配置。分频系数R 我们配置为2。
⑥系统时钟时钟源选择:PLL,HSI,HSE 还是 MSI。这里毫无疑问,我们选择 PLL,选择器选择PLLCLK 即可。
⑦经过上面配置以后此时 SYSCLK=80Mhz。
经过上面的 7 个步骤,就会生成标准的 80MHz 系统时钟。接下来我们只需要依次配置AHB,Systick,APB1 和APB2 的分频系数,我们都配置为 1 即可。配置完成之后,那么 HCLK=80MHZ,Systick=80MHz,PCLK1=80MHz, PCLK2=80MHz 。
3、GPIO引脚功能设置
这里我们回到STM32CubeMX 的Pinout 选项,可以通过搜索栏输入PC13 即可找到PC13在引脚图中的位置如下图所示,然后点击PE7,在弹出的下拉菜单中,选择 IO 口的功能为GPIO_Output。(PC13接入了LED)
同样的方法,我们配置PB2和PB3 选择功能为GPIO_Input 即可。(PB2,PB3接入KEY1,KEY2按键)
另外我们要使用串口功能。打开 Pinout选项卡界面,左侧依次进入 Configuration->Peripherals->USART1 配置栏。
USART1 配置栏有 2 个选项。第一个选项Mode 用来设置串口1 的模式。第二个选项Hardware Flow Control(RS232)用来开启/关闭串口1 的硬件流控制,该选项只有在Mode 选项值为Asynchronous(异步通信)模式的前提下才有效。
这里我们要开启串口 1 的异步模式,并且不使用硬件流控制,所以这里我们直接选择Mode 值为Asynchronous(异步通信) 即可。
配置好串口1 为异步通信模式后,那么在硬件上会默认开启PA9 和PA10 作为串口1 引脚。这时候我们进入引脚配置图可以发现,PA9 和 PA10 变为绿色,同时显示为 USART1_TX 和USART1_RX 功能引脚,如下图 所示:
4、外设初始化配置
接下来,我们对外设开始进行初始化配置。
依次点击Configuration->GPIO 即可进入 IO 口详细配置界面。
在 IO 口详细参数配置界面,点击我们要配置的 IO 口,会在窗口下方显示该 IO 口配置的详细参数表,下面我们依次来解释这些配置项的含义:
①GPIO output level:默认输出电平,可以为 Low 和High,即低电平或高电平。
②GPIO mode:用来设置输出模式为Output Push Pull(推挽)还是Output Open Drain(开漏)。
③选项GPIO Pull-up/Pull-down 用来设置IO 口是上拉/下拉/没有上下拉。
④选项 Maxinum ouput speed 用来设置输出速度为超高速(Very High)/高速(High)/中速(Medium)/低速(Low)。
⑤选项 User Label 是用来设置初始化的 IO 口 Pin 值为我们自定义的宏,一般情况我们可以不用设置。
同样的方法,我们配置另外两个输入 GPIO,不过其配置参数只剩下模式 GPIO Mode 和上下拉GPIO Pull-up/Pull-down,并且模式值中只有输入模式 Input Mode 可选。这里,我们配置为上拉输入即可。
然后我们对USART的Pin进行配置,点击UASRT1选项卡,选择相应的引脚,我们可以看到相关的配置。对于外设的功能引脚,在我们使能相应的外设(比如 USART1)之后,STM32CubeMX 会自动设置GPIO 相关配置,一般情况下用户不再需要去修改。所以这里,对于PA9 和PA10 的配置我们就保留软件配置即可。
点击【OK】完成对引脚的配置。
接下来我们需要配置 USART1 外设相关的参数,包括波特率,停止位等。我们直接进入Configuration 选项卡,如果我们之前使能了USART1,那么在Connectivity 栏会出现USART1 配置按钮。如下图所示, 接下来我们点击 USART1 配置按钮,进入USART1 详细参数配置界面。
在弹出的USART1 Configuration 界面会出现5 个配置选项卡。Parameter Settings 选项卡用来配置USART1 的初始化参数,包括波特率停止位等等。这里我们将USART1 配置为:波特率 115200,8 位字长模式,无奇偶校验位,1 个停止位,发送/接收均开启。
User Constants 是用来配置用户常量。
NVIC 选项卡用来使能USART1 中断。这里我们勾上 Enabled 选项。
DMA Setting 是在使用USART1 DMA 的情况才需要配置,这里我们不配置。
GPIO Setting 便是查看和配置 USART1 相关的 IO 口,这之前的作用一致。
配置完USART1 相关IO 口和USART1 参数之后,如果我们使用到串口中断,那么我们还需要设置中断优先级分组。接下来便是配置NVIC 相关参数。同样的方法,进入Conguration选项卡,点击NVIC 按钮,弹出 NVIC 配置界面NVIC Configuration。
如下图所示,在弹出的NVIC Configuration 界面,我们首先设置中断优先级分组级别,我们系统初始化设置为分组2,那么就是 2 位抢占优先级和2 位响应优先级。所以这里的参数我们选择“2 bits for pre-emption priority”,也就是 2 位抢占优先级。 配置完中断优先级分组之后,接下来我们要配置的是 USART1 的抢占优先级和响应优先级值,这里我们设置抢占和响应优先级均为3 即可。
串口时钟源选择,USART1 有多个时钟源,我们选择其中一个即可,这里使用默认配置,即PCLK2=80MHz,如图所示:
进行完上面的操作之后,接下来我们就可以生成工程代码。
5、生成工程源码
在 STM32CubeMX 操作界面,依次点击菜单Project->Generate Code即可生成源码,操作方法如下图所示:
点击之后,弹出的界面会要求配置生成的工程名称,保存目录以及使用的编译软件类型。我们依次填写工程名称和保存目录即可,对于编译软件我们选择MDK5 即可。操作过程如下图 所示:
接下来,是LL库工程的建立最重要的一步,点击【Advanced Settings】选项卡,将库选项都改为【LL】
配置完成后,点击OK 开始生产源码。源码生产完成之后,就保存在我们Project Location选项配置的目录中,同时弹出生成成功提示界面,我们可以点击界面的“Open Folder”按钮打开工程保存目录,也可以点击界面的“Open Project”按钮直接使用IDE 打开工程。提示界面如下图 所示:
至此,一个完整的 STM32L4 工程就已经生成完成。
Drivers 文件夹存放的是LL库文件和CMSIS 相关文件。
Inc 文件夹存放的是工程必须的部分头文件。
MDK-ARM 下面存放的是MDK 工程文件。
Src 文件夹下面存放的是工程必须的部分源文件。
Template.ioc 是STM32CubeMX 工程文件。