
STM32WLE5的GPIO介绍 STM32WLE5引脚说明 GPIO是通用输入/输出端口的简称,用于感知外界信号(输入模式),控制外部设备(输出模式),是STM32WL的一种外设,与芯片的大部分引脚直接挂钩。这里的重点就是,GPIO一定是程序可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32WLE5CB芯片为48脚芯片,如下图所示: ![]() 由上图可知,并不是所有的引脚都是GPIO引脚,STM32WL的 引脚可以分为下面几类: 1.电源引脚:引脚图中的 VDD、VDDA、VBAT、VDDPA、VDDRF 等都属于电源引脚。 2.晶振引脚:引脚图中的 PC14、PC15 和 OSC_IN、OSC_OUT 都属于晶振引脚,包括主晶振IO和RTC晶振IO,不过它们还可以作为普通引脚使用。 3.复位引脚:引脚图中的 NRST 属于复位引脚,不做其他功能使用。 4.下载引脚:引脚图中的 PA13、PA14、PA15、PB3 和 PB4 属于 JTAG 或SW 下载引脚。不过它们还可以作为普通引脚或者特殊功能使用,具体的功能可以查看芯片数据手册,里面都会有附加功能说明。当然,STM32WL 的串口功能引脚也是可以作为下载引脚使用。 5.BOOT 引脚:引脚图中的 PH3-BOOT0属于 BOOT 引脚。 以上五部分IO组成的系统我们可以称为是最小系统。 GPIO 引脚:引脚图中的 PA、PB、PC等均属于 GPIO 引脚。从引脚图可以看出,GPIO 占用了 STM32WL 芯片大部分的引脚。并且每一个端口最多16个引脚,比如 PA 端口,它有 PA0-PA15。 STM32WL的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚。一般来说其用途可以做如下划分: 1.专用器件接到专用的总线上,比如I2C, SPI, SDIO, FSMC, DCMI等这些总线的器件需要接到专用的IO上。 2.普通的元器件接到GPIO上,比如蜂鸣器,LED,按键等元器件用普通的GPIO即可。 3.如果还有剩余,可以根据项目需要引出或不引出均可。 那么,具体每个引脚的功能信息,可以看下图。 ![]() ![]() ![]() ![]() ![]() ![]() 如上所示,从数据手册中我们可以获取引脚的名字、引脚类型、引脚容忍的电压值和引脚复用功能等信息。 GPIO功能框图 每个GPIO内部都有这样的一个电路结构,这个结构的功能原理网上介绍的很多,这里就不再赘述。 ![]() GPIO相关配置寄存器 每组GPIO端口含下面10个寄存器,它们可以控制一组GPIO的各个IO口。 1.一个端口模式寄存器(GPIOx_MODER) 2.一个端口输出类型寄存器(GPIOx_OTYPER) 3.一个端口输出速度寄存器(GPIOx_OSPEEDR) 4.一个端口上拉下拉寄存器(GPIOx_PUPDR) 5.一个端口输入数据寄存器(GPIOx_IDR) 6.一个端口输出数据寄存器(GPIOx_ODR) 7.一个端口置位/复位寄存器(GPIOx_BSRR) 8.一个端口配置锁存寄存器(GPIOx_LCKR) 9.两个复用功能寄存器(低位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); 固件编译与烧写测试 程序编写完成,按下图所示,点击“编译”和“下载”图标即可完成相应的固件编译和烧写工作。烧写完成即可看到蓝灯闪烁的效果。 ![]() 如果烧写失败,请检查如下设置是否一致: ![]() ![]() ———————————————— 版权声明:enchen |
基于LORA的环境感知系统
【新品发布】超低功耗复合调制无线STM32WL3x微控制器
实战经验 | 从STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植
基于STM32WL55中开启双核的使用经验分享
基于STM32WL55双核烧录过程的问题及解决办法
基于STM32WL LSE 添加反馈电阻后无法起振问题经验分享
STM32WL sub-GHz SoC 未来工业物联网最佳的选择
STM32Wx 助力万物互联3.0
STM32Wx 赋能工业物联网解决方案
【分享】无线测温系统-硬件篇