以下文档将为您提供激活STM32U5开发板上GPIO引脚以与继电器交互的基本知识的简要概述。本文档将重点介绍配置STM32U5板软件以启用GPIO引脚的步骤,以及如何利用AWS测试这些GPIO引脚。

1.用户提供的项目

  • 5V继电器。

  • 可以连接到继电器的不同设备。


2.一般要求

  • STM32U5演示完成


3.简介

STM32U5物联网发现套件配备了多个GPIO端口,其中可以通过MQTT测试通过发布的JSON命令连接到AWS Core并由其控制。这些端口也可以配置为通过AWS控制台手动设置为活动低或活动高。


4.在STM32CubeIDE上配置用于GPIO操作的项目


为了允许U5板的GPIO修改,需要在b_u585i_iot2a_tz项目下配置/更改某些文件。
注意:错误通常可以忽略,因为它们不会影响最终构建,也不会影响AWS上启用和禁用GPIO引脚的功能。
在项目资源管理器下,单击b_u585i_iot02_ntzm,然后单击Common->config->hw_defs.h打开STM32CubeIDE中相应的头文件。

一旦打开,项目中的文件应该与下面描述的文件类似。

注:预配置的GPIO引脚与U5板上的某些按钮和LED相关,在没有事先了解其功能的情况下,不应进行操作。
然后使用以下pdf/链接:
https://www.st.com/resource/en/user_manual/um2237-stm32cubeprogrammer-software-description-stmicroel...
决定要使用的GPIO引脚/端口。特别注意STM32U585引脚分配。

注:GPIO引脚及其各自的端口列于第33-44页,以下代码示例利用了位于U5板背面的CN14引脚。
使用列出的端口之一,使用STM32U585引脚的数字为引脚本身添加一个定义,然后为特定端口添加另一个定义(应为STM32U585引脚数字前的字母)。例如,如果我们想使用与STM32LU585引脚PB6相关的GPIO引脚,我们将编写以下2个定义,如下所示。

注意:如果您希望启用一个以上的GPIO引脚,请对您希望使用的每个特定引脚重复上述过程,注意不要覆盖任何保留引脚,这些引脚在pdf中的相应表格中是特定的。
然后,在项目资源管理器下,单击b_u585i_iot02a_ntzm,然后单击Common->sys->hal_init.c打开STM32CubeIDE中的相应编译器文件。

向下滚动,直到您看到一个定义为static void hw_gpio_init(void)的函数,类似于下面显示的内容。

确保启用了正确的GPIO_CLK,否则GPIO将无法发送正确的信号。然后按照以下步骤初始化GPIO:

  1. 复制LED输出部分,并将其副本粘贴到代码的原始部分下方。

  2. 将.Pin更改为您之前在hw_def.h中为其定义的相应引脚。

  3. 将GPIOH的任何实例更改为先前在hw_def.h中定义的相应GPIO端口

  4. 将HAL_GPIO_WritePin中的LED_RED_PIN|LED_GREEN_PIN更改为您在hw_def.h中定义的相应引脚



在hal_init.c中定义GPIO引脚后,在项目资源管理器下,单击b_u585i_iot02a_ntzm,然后单击Common->app->shadow_device_task.c打开STM32CubeIDE中的相应编译器文件。

将#define shadowexampleSHADOW_REPORTED_JSON更改为您希望报告给AWS的所需JSON状态。

注:#define shadowexampleSHADOW_REPORTED_JSON_LENGTH(sizeof(shadowexampleSHADOW_REPORTED_6)需要根据其重新格式化的方式更改其数值[显示为红色]。
为您定义的每个GPIO引脚添加与以下类似的当前和报告的通电状态。

向下滚动,直到您看到:
静态void prvIncomingPublishUpdateDeltaCallback(void*pvCtx,MQTTPublishInfo_t*pxPublishInfo)
并添加相应的日志警告以及先前在hw_def.h中定义的相应GPIO引脚的日志信息和引脚写入。注意,如果添加超过1个引脚,则将为每个相应引脚重复行508至537。

然后向下滚动,直到您看到:
静态void prvIncomingPublishUpdateAcceptedCallback(void*pvCtx,MQTTPublishInfo_t*pxPublishInfo)
并添加线723至748上所示的内容,针对先前在hw_def.h中定义的每个相应GPIO引脚一个接一个地重复它们。

最后,向下滚动,直到看到void vShadowDeviceTask(void*pvParameters)。
在xStatus=prvInitializeCtx(&xShadowCtx)下为定义的每个GPIO引脚添加一个HAL_GPIO_WritePin;代码如下所示。

更新后,每个引脚的snpriff命令都是根据其CurrentPowerOnState定义的,如下所示

最后,在for(;;)下面,确保向if语句添加一个检查,以查看CurrentPowerOnState是否不等于已添加的每个引脚的ReportedPowerOnState,并在正在检查的每个引脚之间添加一个||语句。然后使用LogInfo为每个引脚添加相应的CurrentPowerOnState。然后格式化snprintf命令,以便它可以向AWS报告,类似于下面所示的内容。

在连接U5板的情况下构建和运行该项目,以使用更新的GPIO修改代码重新刷新该板,确保其配置和供应正确。
注:此时,软件应完全格式化,以便修改GPIO。


5.在AWS上启用GPIO引脚/活动


使用之前创建的IAM用户登录aws.amazon.com。在AWS管理控制台上,单击Iot Core。在下面显示的事物下,单击您在终端提示中输入的事物的名称。

在选择相应事物的事物选项卡下,移动到设备阴影,然后单击为该事物列出的阴影。

单击标题为“MQTT主题”的选项卡,并在此选项卡下单击MQTT测试客户端。

在MQTT测试客户端中,单击标题为“Publish to a Topic”的选项卡,并在主题名称类型下,或选择$aws/things/YOUR_DEVICE_name/shadow/update。然后在消息有效负载中键入类似于下面所示的内容。

要将某个pin设置为on,请将“0”字符串更改为“1”并点击publish,
注意:此消息负载需要与shadowexampleSHADOW_REPORTED_JSON的格式匹配,主要区别在于将REPORTED替换为所需。
一旦发布,相应的GPIO引脚被切换为关闭或打开。
 


5.下一步

使用Alexa控制GPIO引脚在这里