STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)

目录

1、实验目的

2、实验设计

3、实验步骤

3.1、使用 STM32CubeMX 新建项目工程

3.2、工程介绍

3.2.1、MDK工程目录结构介绍

3.2.2、MDK工程文件介绍

3.3、编写LED闪烁代码

3.4、配置烧写参数

3.5、烧写程序

1、实验目的

  • 了解STM32L431RCT6 LED灯外围电路搭建原理;
  • 学习STM32CubeMX 新建工程的方法;
  • 掌握STM32编程实现LED闪烁的编程技巧。

2、实验设计

  1. 实验开发板的 LED 灯连接在 MCU 的 PC13 引脚上,原理图如下所示,将该引脚输出高电平,LED 灯会被点亮;
  2. 延时函数使用 HAL 库函数自带的 HAL_Delay()函数,传入参数单位为 ms,输入 500ms;
  3. 然后将该引脚输出低电平,LED 灯会被熄灭,再使用 HAL_Delay()函数延时 500ms;
  4. 最终实现每隔500ms闪烁效果。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第1张图片

3、实验步骤

3.1、使用 STM32CubeMX 新建项目工程

第一步:双击打开 STM32CubeMX,点击新建工程,在 MCU 选型框里输入 STM32L431RC,右侧选择芯片封装为 LQFP 的型号,双击进入。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第2张图片

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第3张图片

第二步:参照原理图配置GPIO。看到 STM32L431RC MCU有高速和低速外部晶振,LED 灯接在的是PC13 引脚,当 PC13 输出为高的时候点亮 LED 灯。因此我们在 Pinout 配置界面先设置使用外部晶振,在 RCC 下面将高速时钟和低速时钟都设置为 Crystal/Ceramic Resonator,然后单击PC13 引脚设置为 GPIO_Output 模式。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第4张图片

在 SYSTEM 一栏里点击 GPIO 进入设置,点击 PC13 引脚,配置初始化参数:推挽输出、默认输出低电平(初始化不让 LED 亮)、无上拉无下拉。 

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第5张图片

这里讲解一下 GPIO 的输出模式,分为两种(复用输出暂时不讲):推挽输出模式和开漏输出模式。

推挽输出模式:在输出高电平时,P-MOS 管导通,低电平时,N-MOS 管导通。两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为 0V,高电平为 3.3V。

开漏输出模式:如果我们控制输出为 0,低电平,则使 N-MOS 管导通,使输出接地,若控制输出为 1,则既不输出高电平,也不输出低电平,为高阻态。要正常使用必须在外部接一个上拉电阻。它具有线与特性,即多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0V。

普通推挽输出模式一般应用在输出电平为 0 和 3.3 伏的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部接一个上拉电阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 的电平。 

第三步:配置时钟。按照自己的工程要求配置时钟,本次以自动设置为例,直接将最后的频率设置为 80MHz(确定后电机回车),STM32CubeMX 会自动设置。 

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第6张图片

第四步:配置生成代码的一些配置。在 Project 界面设置本工程名称,选择按照什么开发工具生成项目工程,这里我们使用的是 MDK5。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第7张图片

 在这个界面中还需要配置的是 Code Generator,这一栏中将“Generate peripheral initialization as a……”选中,这样生成的工程会把使用的资源(IIC、SPI、USART、GPIO 等)初始化代码分别放在对应名字的单独的.c 文件中,方便我们自己增删改查使用。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第8张图片

第五步:点击上面的 OK 生成工程代码。 生成工程代码成功后,可以选择打开工程目录或者直接打开工程。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第9张图片

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第10张图片

 选择打开工程目录。可以看到工程目录分为两个部分,一个是 MDK5 的工程目录,一个是 STM32CubeMX 的工程。STM32CubeMX 工程文件还可以用 STM32CubeMX 打开提供增加或者删除、修改本工程,非常方便。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第11张图片

3.2、工程介绍

3.2.1、MDK工程目录结构介绍

在MDK工程中具体文件目录结构如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第12张图片

 重点文件介绍如下:

 STM32L4xx_HAL_Driver 文件包含STM32L4xx 硬件抽象层的外设驱动,具体描述如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第13张图片

3.2.2、MDK工程文件介绍

进入MDK-ARM文件夹,打开LED工程文件。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第14张图片

 整个工程目录设置的特别清楚,分为 4 个部分:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第15张图片

并且在用户代码区的每一个.C 文件中,都有多处是 BEGIN 和 END 且每处 BEGIN 和 END都有对应的提示,开发者只需将自己的代码放在对应的区域就行(当然也可以不这么做,这个只是为了方便再次使用 STM32CubeMX 开发缩小研发时间,增强代码可读性,便于团队协作)。

编译之后无错误无警告。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第16张图片

3.3、编写LED闪烁代码

第一步:找到 GPIO 接口。在 main.c 文件中可以看到,工程文件首先重置所有外设,初始化 Flash 接口和 Systick,然后配置初始化了系统时钟,再配置初始化了 GPIO(本例程里只用了 GPIO,如果用其他的也会在这一部分初始化),初始化函数在 gpio.c 文件里,剩下的我们就可以直接写自己需要的应用了,这里我们想做的事情是LED 灯闪烁。

由于 HAL 库是封装的比较好的,因此我们不需要和底层的寄存器打交道,只需要利用外设库提供的接口即可,我们想点亮 LED 灯闪烁就是让对应的引脚拉低拉高,打开 stm32l4xx_hal_gpio.h 中接口函数。

打开步骤为:

  • Drivers/STM32L4xx_HAL_Driver→点开stm32l4xx_hal_gpio.c 前面的“+”;
  • 找到 stm32l4xx_hal_gpio.h 双击打开,拉倒最下面,会看到/* IO operation functions *****************************************************/,这个下面的函数就是 GPIO 的一些接口,如下图所示:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第17张图片

第二步: 编写程序,使PC13 引脚每隔500ms输出高电平或低电平切换, 实现LED 灯闪烁。

这里将使用三个GPIO函数:

HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),功能是设置拉高还是拉低某个引脚,函数各个参数说明如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第18张图片

HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),功能是将某个引脚输出方波,函数各个参数说明如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第19张图片

HAL_Delay(uint32_t Delay),功能是延时单位毫秒,函数各个参数说明如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第20张图片

将这三个函数名复制到 main.c 文件的 while 下面的 USER CODE BEGIN 3 和 USERCODE END 3 中间。

根据函数参数说明提示和类型,设置函数中的参数,有两种方式实现LED灯闪烁,具体代码如下:

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第21张图片

 第三步: 编译程序,确保无误。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第22张图片

3.4、配置烧写参数

将NB-IoT实验版供电,插上烧写器,配置烧写参数,设置使用 ST-LINK 下载,设置好下图参数,点击下载程序。

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第23张图片

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第24张图片

3.5、烧写程序

STM32控制LED灯闪烁(NB-IoT项目实战专栏—4)_第25张图片

最终实现LED灯闪烁效果,此处省略效果图。

基础实验:按键联动控制LED灯状态(NB-IoT项目实战专栏—5)

你可能感兴趣的:(NB-IoT,NB-IoT项目实践)