1、实验目的
2、实验设计
3、实验步骤
3.1、使用 STM32CubeMX 新建项目工程
3.2、工程介绍
3.2.1、MDK工程目录结构介绍
3.2.2、MDK工程文件介绍
3.3、编写LED闪烁代码
3.4、配置烧写参数
3.5、烧写程序
第一步:双击打开 STM32CubeMX,点击新建工程,在 MCU 选型框里输入 STM32L431RC,右侧选择芯片封装为 LQFP 的型号,双击进入。
第二步:参照原理图配置GPIO。看到 STM32L431RC MCU有高速和低速外部晶振,LED 灯接在的是PC13 引脚,当 PC13 输出为高的时候点亮 LED 灯。因此我们在 Pinout 配置界面先设置使用外部晶振,在 RCC 下面将高速时钟和低速时钟都设置为 Crystal/Ceramic Resonator,然后单击PC13 引脚设置为 GPIO_Output 模式。
在 SYSTEM 一栏里点击 GPIO 进入设置,点击 PC13 引脚,配置初始化参数:推挽输出、默认输出低电平(初始化不让 LED 亮)、无上拉无下拉。
这里讲解一下 GPIO 的输出模式,分为两种(复用输出暂时不讲):推挽输出模式和开漏输出模式。
推挽输出模式:在输出高电平时,P-MOS 管导通,低电平时,N-MOS 管导通。两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为 0V,高电平为 3.3V。
开漏输出模式:如果我们控制输出为 0,低电平,则使 N-MOS 管导通,使输出接地,若控制输出为 1,则既不输出高电平,也不输出低电平,为高阻态。要正常使用必须在外部接一个上拉电阻。它具有线与特性,即多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0V。
普通推挽输出模式一般应用在输出电平为 0 和 3.3 伏的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部接一个上拉电阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 的电平。
第三步:配置时钟。按照自己的工程要求配置时钟,本次以自动设置为例,直接将最后的频率设置为 80MHz(确定后电机回车),STM32CubeMX 会自动设置。
第四步:配置生成代码的一些配置。在 Project 界面设置本工程名称,选择按照什么开发工具生成项目工程,这里我们使用的是 MDK5。
在这个界面中还需要配置的是 Code Generator,这一栏中将“Generate peripheral initialization as a……”选中,这样生成的工程会把使用的资源(IIC、SPI、USART、GPIO 等)初始化代码分别放在对应名字的单独的.c 文件中,方便我们自己增删改查使用。
第五步:点击上面的 OK 生成工程代码。 生成工程代码成功后,可以选择打开工程目录或者直接打开工程。
选择打开工程目录。可以看到工程目录分为两个部分,一个是 MDK5 的工程目录,一个是 STM32CubeMX 的工程。STM32CubeMX 工程文件还可以用 STM32CubeMX 打开提供增加或者删除、修改本工程,非常方便。
在MDK工程中具体文件目录结构如下:
重点文件介绍如下:
STM32L4xx_HAL_Driver 文件包含STM32L4xx 硬件抽象层的外设驱动,具体描述如下:
进入MDK-ARM文件夹,打开LED工程文件。
整个工程目录设置的特别清楚,分为 4 个部分:
并且在用户代码区的每一个.C 文件中,都有多处是 BEGIN 和 END 且每处 BEGIN 和 END都有对应的提示,开发者只需将自己的代码放在对应的区域就行(当然也可以不这么做,这个只是为了方便再次使用 STM32CubeMX 开发缩小研发时间,增强代码可读性,便于团队协作)。
编译之后无错误无警告。
第一步:找到 GPIO 接口。在 main.c 文件中可以看到,工程文件首先重置所有外设,初始化 Flash 接口和 Systick,然后配置初始化了系统时钟,再配置初始化了 GPIO(本例程里只用了 GPIO,如果用其他的也会在这一部分初始化),初始化函数在 gpio.c 文件里,剩下的我们就可以直接写自己需要的应用了,这里我们想做的事情是LED 灯闪烁。
由于 HAL 库是封装的比较好的,因此我们不需要和底层的寄存器打交道,只需要利用外设库提供的接口即可,我们想点亮 LED 灯闪烁就是让对应的引脚拉低拉高,打开 stm32l4xx_hal_gpio.h 中接口函数。
打开步骤为:
第二步: 编写程序,使PC13 引脚每隔500ms输出高电平或低电平切换, 实现LED 灯闪烁。
这里将使用三个GPIO函数:
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),功能是设置拉高还是拉低某个引脚,函数各个参数说明如下:
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),功能是将某个引脚输出方波,函数各个参数说明如下:
HAL_Delay(uint32_t Delay),功能是延时单位毫秒,函数各个参数说明如下:
将这三个函数名复制到 main.c 文件的 while 下面的 USER CODE BEGIN 3 和 USERCODE END 3 中间。
根据函数参数说明提示和类型,设置函数中的参数,有两种方式实现LED灯闪烁,具体代码如下:
第三步: 编译程序,确保无误。
将NB-IoT实验版供电,插上烧写器,配置烧写参数,设置使用 ST-LINK 下载,设置好下图参数,点击下载程序。
最终实现LED灯闪烁效果,此处省略效果图。
基础实验:按键联动控制LED灯状态(NB-IoT项目实战专栏—5)