板上通过GPIO控制LED"/>
STM32WL开发之LORA评估板上通过GPIO控制LED
前言:在前一篇《STM32WL开发之LORA开发环境及其Demo例程介绍》中已经对LM401评估板、开发环境以及开发所用Demo例程做了简要介绍。从本文开始,将基于LM401评估板进行相关外设的学习研究。
STM32WLE5的GPIO介绍
STM32WLE5引脚说明
GPIO是通用输入/输出端口的简称,用于感知外界信号(输入模式),控制外部设备(输出模式),是STM32WL的一种外设,与芯片的大部分引脚直接挂钩。这里的重点就是,GPIO一定是程序可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
STM32WLE5CB芯片为48脚芯片,如下图所示:
由上图可知,并不是所有的引脚都是GPIO引脚,STM32WL的 引脚可以分为下面几类:
- 电源引脚:引脚图中的 VDD、VDDA、VBAT、VDDPA、VDDRF 等都属于电源引脚。
- 晶振引脚:引脚图中的 PC14、PC15 和 OSC_IN、OSC_OUT 都属于晶振引脚,包括主晶振IO和RTC晶振IO,不过它们还可以作为普通引脚使用。
- 复位引脚:引脚图中的 NRST 属于复位引脚,不做其他功能使用。
- 下载引脚:引脚图中的 PA13、PA14、PA15、PB3 和 PB4 属于 JTAG 或SW 下载引脚。不过它们还可以作为普通引脚或者特殊功能使用,具体的功能可以查看芯片数据手册,里面都会有附加功能说明。当然,STM32WL 的串口功能引脚也是可以作为下载引脚使用。
- BOOT 引脚:引脚图中的 PH3-BOOT0属于 BOOT 引脚。
以上五部分IO组成的系统我们可以称为是最小系统。
GPIO 引脚:引脚图中的 PA、PB、PC等均属于 GPIO 引脚。从引脚图可以看出,GPIO 占用了 STM32WL 芯片大部分的引脚。并且每一个端口最多16个引脚,比如 PA 端口,它有 PA0-PA15。
STM32WL的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚。一般来说其用途可以做如下划分:
- 专用器件接到专用的总线上,比如I2C, SPI, SDIO, FSMC, DCMI等这些总线的器件需要接到专用的IO上。
- 普通的元器件接到GPIO上,比如蜂鸣器,LED,按键等元器件用普通的GPIO即可。
- 如果还有剩余,可以根据项目需要引出或不引出均可。
那么,具体每个引脚的功能信息,可以看下图。
如上所示,从数据手册中我们可以获取引脚的名字、引脚类型、引脚容忍的电压值和引脚复用功能等信息。
GPIO功能框图
每个GPIO内部都有这样的一个电路结构,这个结构的功能原理网上介绍的很多,这里就不再赘述。
上述的GPIO功能框图介绍,可以参考网上的文章,比如:
GPIO相关配置寄存器
每组GPIO端口含下面10个寄存器,它们可以控制一组GPIO的各个IO口。
- 一个端口模式寄存器(GPIOx_MODER)
- 一个端口输出类型寄存器(GPIOx_OTYPER)
- 一个端口输出速度寄存器(GPIOx_OSPEEDR)
- 一个端口上拉下拉寄存器(GPIOx_PUPDR)
- 一个端口输入数据寄存器(GPIOx_IDR)
- 一个端口输出数据寄存器(GPIOx_ODR)
- 一个端口置位/复位寄存器(GPIOx_BSRR)
- 一个端口配置锁存寄存器(GPIOx_LCKR)
- 两个复用功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)
下面介绍一下本文需要用到的两个寄存器:
1、GPIO端口模式寄存器
查看参考手册上的GPIO端口模式寄存器,如下:
由此可知STM32WLE5支持四种工作模式:
00:输入
01:通用输出模式
10:复用功能模式
11:模拟模式(复位状态)
2、端口输出类型寄存器
查看参考手册上的GPIO端口输出类型寄存器,如下:
由此可知,输出类型分为:
0:推挽输出(复位状态)
1:开漏输出
基于GPIO控制的点灯程序设计
上面已介绍了GPIO的相关知识,本部分将基于LM401评估的设计及SubGHz_Phy_PingPong例程,介绍一下点亮LED灯的实现过程。
系统时钟配置
作为低功耗处理器,STM32WL一般用MSI时钟作为系统主时钟,默认使用最高的48MHz频率。配置如下:
PS:这里配置LSE时钟,主要是为RTC使用,本例程中的HAL_Delay()函数也有使用。
GPIO端口配置
由开发板的原理图可知,LED灯的设计连接如下:
看上图,开发板上带了三个LED灯,分别连接到GPIO的PB3,PB4, PB5端口。
本文以点亮LED1为例,初始化PB5端口。SDK中的LED灯初始化函数是BSP_LED_Init(), 具体实现如下:
LED闪灯程序
本文中设计一个LED灯每隔500ms闪烁的程序,那么SubGHz_Phy_PingPong例程中的具体函数调用及实现代码如下:
以上就是基于开发板SDK实现的普通GPIO控制LED闪灯的程序。
闪灯的实现方式有两种,一种就是上图中直接调用LED状态翻转函数实现,具体实现细节如下:
另一种是直接调用GPIO的Write函数,分别写入1或0,以实现LED灯的亮或灭。比如:
写入1的调用是:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
写入0的调用是:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
固件编译与烧写测试
程序编写完成,按下图所示,点击“编译”和“下载”图标即可完成相应的固件编译和烧写工作。烧写完成即可看到蓝灯闪烁的效果。
如果烧写失败,请检查如下设置是否一致:
PS:基于STM32WLE5的评估板上通过GPIO控制LED闪灯的工程代码下载地址:
链接:
提取码:2wey
STM32WLEX的参考手册地址:
链接:
提取码:y1k5
STM32WLE5CB的数据手册:
链接:
提取码:1vd7
更多推荐
STM32WL开发之LORA评估板上通过GPIO控制LED
发布评论