你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32WL开发之LORA评估板上通过GPIO控制LED

[复制链接]
STMCU小助手 发布时间:2022-10-20 14:26
STM32WLE5的GPIO介绍

STM32WLE5引脚说明


GPIO是通用输入/输出端口的简称,用于感知外界信号(输入模式),控制外部设备(输出模式),是STM32WL的一种外设,与芯片的大部分引脚直接挂钩。这里的重点就是,GPIO一定是程序可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

STM32WLE5CB芯片为48脚芯片,如下图所示:

1a8513aaa59b4a989404ceed78c470ab.png

由上图可知,并不是所有的引脚都是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.如果还有剩余,可以根据项目需要引出或不引出均可。


那么,具体每个引脚的功能信息,可以看下图。

628a5c37bc0044e2a218572c46968d37.png

e30c35607ad94c5a9b44dac94b7d89fa.png

8c4ca43c104d480e84c237db985b4230.png

e38547df944f4df69f204865d5af37d4.png

d697405a48aa46db81781719df0cdb42.png

8433d0a17f224f95a7dd2500b8067510.png

如上所示,从数据手册中我们可以获取引脚的名字、引脚类型、引脚容忍的电压值和引脚复用功能等信息。

GPIO功能框图

每个GPIO内部都有这样的一个电路结构,这个结构的功能原理网上介绍的很多,这里就不再赘述。

5173be1017564d54972e6dd80064327d.png


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端口模式寄存器,如下:

1689ffe2b8c947af8bb0efddff23b5bd.png

       由此可知STM32WLE5支持四种工作模式:

       00:输入

       01:通用输出模式

       10:复用功能模式

       11:模拟模式(复位状态)

2、端口输出类型寄存器

查看参考手册上的GPIO端口输出类型寄存器,如下:

8971b568070e46c6aa2995bbd390ef98.png

由此可知,输出类型分为:

0:推挽输出(复位状态)

1:开漏输出


基于GPIO控制的点灯程序设计

上面已介绍了GPIO的相关知识,本部分将基于LM401评估的设计及SubGHz_Phy_PingPong例程,介绍一下点亮LED灯的实现过程。

系统时钟配置

作为低功耗处理器,STM32WL一般用MSI时钟作为系统主时钟,默认使用最高的48MHz频率。配置如下:

681122528b574d6489eb2ca1612357f8.png

PS:这里配置LSE时钟,主要是为RTC使用,本例程中的HAL_Delay()函数也有使用。


GPIO端口配置

由开发板的原理图可知,LED灯的设计连接如下:

2748d9121e254232b70ad046ae68b8c3.png

看上图,开发板上带了三个LED灯,分别连接到GPIO的PB3,PB4, PB5端口。

本文以点亮LED1为例,初始化PB5端口。SDK中的LED灯初始化函数是BSP_LED_Init(), 具体实现如下:

22f49d38660d45089cb1e76b74918e5d.png

LED闪灯程序

本文中设计一个LED灯每隔500ms闪烁的程序,那么SubGHz_Phy_PingPong例程中的具体函数调用及实现代码如下:

bec9f0cf005d47c4bc9bf1cec38202df.png

以上就是基于开发板SDK实现的普通GPIO控制LED闪灯的程序。

闪灯的实现方式有两种,一种就是上图中直接调用LED状态翻转函数实现,具体实现细节如下:

75557f5b76394a7b8cda5d8a9067ecfd.png

另一种是直接调用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);


固件编译与烧写测试
程序编写完成,按下图所示,点击“编译”和“下载”图标即可完成相应的固件编译和烧写工作。烧写完成即可看到蓝灯闪烁的效果。

a8ee4a9ccc4c461593d028e22c2dd3c6.png

如果烧写失败,请检查如下设置是否一致:

e281aa2ad4b347ee8ff1789c9c660bd1.png

e74798fad021485a937e8745d17d1d1e.png

————————————————
版权声明:enchen


收藏 评论0 发布时间:2022-10-20 14:26

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版