前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

STM32入门: Step4 传感器的使用(stm32f103连接传感器)

qiguaw 2024-11-10 10:51:03 资源文章 19 ℃ 0 评论

Step4 传感器的使用

在B-L475E-IOT01A和B-U585I-IOT02A

上使用传感器 60分钟

目标描述
本教程的目的是说明如何使用 STM32L4 Discovery 套件和 B-U585I-IOT02A Discovery 套件中的传感器进行测量。可对温度传感器进行分步配置。
完成本教程后,您将能够使用B-L475E-IOT01A板和B-U585I-IOT02A板上的传感器收集值。
本教程的附录提供了有关如何将AC6示例移植到STM32CubeIDE的指南。


先决条件
您已经遵循了:

  • 第 1 步:工具安装和首次测试
  • Step3:UART和新板介绍

硬件

  • STM32L4 Discovery kit IoT 节点[1](B-L475E-IOT01A)
  • B-U585I-IOT02A 探索套件物联网节点[2](B-U585I-IOT02A)
  • USB 数据线 Type-A 转 Micro-B

文献

  • UM2153型物联网节点探索套件,与STM32L4进行多通道通信
  • UM1884型STM32L4/L4+ HAL 和低层驱动程序的描述
  • UM2839型用于 STM32U5 系列物联网节点的探索套件
  • UM2911型STM32U5 HAL 和低层驱动程序的说明
  • UM1859型开始使用 STM32Cube 的 X-CUBE-MEMS1 运动 MEMS 和环境传感器软件扩展
  • UM2579型从System Workbench到STM32CubeIDE的迁移指南
  • STM32L4 Discovery Kit IoT 节点入门
  • 了解全新 STM32U5 IoT 节点 B-U585-IOT02A 探索套件


内容↑

[隐藏]

  • 1在B-L475E-IOT01A上使用传感器1.1硬件说明1.2示例:使用 HTS221 传感器获取温度值并将其显示在终端上1.2.1使用 STM32CubeMX 创建工作项目1.2.2将 BSP 驱动程序复制到您的项目中1.2.3在STM32CubeIDE工作区中支持BSP1.2.4更新包含路径1.2.5更新源文件1.2.6编译并运行示例
  • 2在 B-U585-IOT02A 中使用传感器2.1硬件说明2.2示例:使用 HTS221 传感器获取温度值并将其显示在终端上2.2.1使用 STM32CubeMX 创建工作项目2.2.2将 BSP 驱动程序复制到您的项目中2.2.3在STM32CubeIDE工作区中支持BSP2.2.4更新包含路径2.2.5更新源文件2.2.6编译并运行示例
  • 3附录:将AC6示例移植到STM32CubeIDE3.1硬件说明3.2示例:使用HTS221传感器获取温度值并将其显示在终端上(从AC6移植到STM32CubeIDE)3.2.1硬件设置3.2.2示例详细信息3.2.3将示例移植到STM32CubeIDE3.2.4编译和运行示例
  • 4引用

1使用传感器 B-L475E-IOT01A↑

1.1硬件说明↑

STM32L4探索套件物联网节点(B-L475E-IOT01A)中提供的主要传感器包括:

  • 用于相对湿度和温度的电容式数字传感器 (HTS221)
  • 260-1260 hPa 绝对数字输出气压计 (LPS22HB)
  • 3D 加速度计和 3D 陀螺仪 (LSM6DSL)
  • 高性能 3 轴磁力计 (LIS3MDL)。

1.2示例:使用 HTS221 传感器获取温度值并将其显示在终端上↑

本节的目的是逐步说明如何与 HTS221 传感器连接以获取温度值并将其显示在终端上。

1.2.1使用STM32CubeMX创建工作项目↑

起点是使用STM32CubeMX生成的项目,如Step3教程: B-L475E-IOT01A上的UART I/F简介中所述。

  • 按照教程中的步骤操作。
  • 将生成的项目命名为 L4_IOT_Sensors。

1.2.2将 BSP 驱动程序复制到您的项目中↑

BSP(板级支持包)驱动程序采用STM32CubeL4封装。这提供了与主板的硬件组件相对应的 API。

默认情况下,STM32CubeL4软件包的最新版本下载在STM32CubeMX存储库中:

C:\Users\user_name\STM32Cube\Repository\STM32Cube_FW_L4_Vx.xx.x

下图显示了 BSP 位置及其内容:


信息

在本例中,使用的STM32CubeL4版本为1.11.0。版本可能会随着时间的推移而增加。

按照以下步骤将 BSP 驱动程序复制到您的项目:

  • 在生成的项目中,创建一个文件夹 L4_IOT_Sensors/Drivers/BSP
  • 复制STM32CubeL4/Drivers/BSP/B-L475E-IOT01文件夹,并将其粘贴到L4_IOT_Sensors/Drivers/BSP文件夹中。
  • 复制 STM32CubeL4/Drivers/BSP/Components 文件夹并将其粘贴到 L4_IOT_Sensors/Drivers/BSP/Components 下。
  • 仅使用 HTS221 温度传感器。因此,可以删除复制到工作目录的任何其他文件和文件夹。此步骤是可选的:
    * Keep only the following files under  L4_IOT_Sensors\Drivers\BSP\B-L475E-IOT01:

    * Keep only the following files under L4_IOT_Sensors\Drivers\BSP\Components:

1.2.3在STM32CubeIDE工作区中支持BSP↑

添加的文件夹会自动显示在STM32CubeIDE工作区中:



1.2.4更新包含路径↑

更新路径以支持新的头文件:

  • Project Explorer 视角选择相关项目:
  • 从“项目”菜单或“文件”菜单中,转到“属性”>“C/C++构建>设置”>“工具设置”>“MCU GCC 编译器”>“包含路径”。
  • 单击以包含新路径。
  • 添加 ../drivers/BSP/B-L475E-IOT01 和 ../Drivers/BSP/Components/hts221 路径。

以下屏幕截图总结了要遵循的步骤:


1.2.5更新源文件↑

编辑 main.c,如下所示:

  • 包括头文件:stm32l475e_iot01.hstm32l475e_iot01_tsensor.hmath.h
/* USER CODE BEGIN Includes */
#include "stm32l475e_iot01.h"
#include "stm32l475e_iot01_tsensor.h"
#include <math.h>
/* USER CODE END Includes */
  • 添加私有值。这些值用于在终端上显示温度和消息:
/* USER CODE BEGIN PV */
/* Private variables -------------------------------------------------------*/
float temp_value = 0;  // Measured temperature value
char str_tmp[100] = ""; // Formatted message to display the temperature value
uint8_t msg1[] = "****** Temperature values measurement ******\n\n\r";
uint8_t msg2[] = "=====> Initialize Temperature sensor HTS221 \r\n";
uint8_t msg3[] = "=====> Temperature sensor HTS221 initialized \r\n ";
/* USER CODE END PV */
  • 在终端上显示消息并初始化 HTS221 温度传感器:
/* USER CODE BEGIN 2 */
HAL_UART_Transmit(&huart1,msg1,sizeof(msg1),1000);
HAL_UART_Transmit(&huart1,msg2,sizeof(msg2),1000);
BSP_TSENSOR_Init();
HAL_UART_Transmit(&huart1,msg3,sizeof(msg3),1000);
/* USER CODE END 2 *//
  • while(1)循环中,读取温度值,格式化,然后在终端上显示带有测量值的消息:
/* USER CODE BEGIN 3 */
temp_value = BSP_TSENSOR_ReadTemp();
int tmpInt1 = temp_value;
float tmpFrac = temp_value - tmpInt1;
int tmpInt2 = trunc(tmpFrac * 100);
snprintf(str_tmp,100," TEMPERATURE = %d.%02d\n\r", tmpInt1, tmpInt2);
HAL_UART_Transmit(&huart1,( uint8_t *)str_tmp,sizeof(str_tmp),1000);
HAL_Delay(1000);
/* USER CODE END 3 */

信息

只能对所需的USER CODE部分进行更新,以避免使用新的STM32CubeMX代码生成覆盖所有内容。

1.2.6编译运行示例↑

  • 单击“生成”按钮以编译项目。
  • 单击“调试”按钮以运行软件。
  • 打开控制台模拟器,例如 TeraTerm[3].要配置控制台波特率,请选择数据位:8,然后单击确定。端口名称可能因您的计算机而异。
  • STM32CubeIDE打开Debug透视图。单击“恢复”按钮以执行代码。
  • Tera术语[3]在测量的温度值之前显示初始化消息:

现在,您可以

  • 构建您自己的项目,使用B-L475E-IOT01A中的嵌入式传感器测量温度值。
  • 将BSP组件添加到STM32CubeMx生成的项目中。
  • 将该板的使用范围扩展到 HTS221 以外的传感器,以进行环境测量。

2在 B-U585-IOT02A 上使用传感器↑

2.1硬件说明↑

B-U585I-IOT02A 物联网节点探索套件中提供的主要传感器包括:

  • 用于相对湿度和温度的电容式数字传感器 (HTS221)
  • 260-1260 hPa 绝对数字输出气压计 (LPS22HH)
  • 3D加速度计和3D陀螺仪(ISM330DHCX)
  • 高性能 3 轴磁力计 (IIS2MDCTR)。

2.2示例:使用 HTS221 传感器获取温度值并将其显示在终端上↑

本节的目的是逐步说明如何与 HTS221 传感器连接以获取温度值并将其显示在终端上。

2.2.1使用STM32CubeMX创建工作项目↑

使用 STM32CubeMX 创建一个新项目:

  • 使用主板选择器选择 B-U585I-IOT02A 主板。
  • 回答“是”以使用默认模式初始化所有外围设备 ? 弹出窗口。
  • 选择未激活 TrustZone?。回答“在未激活 TrustZone 的情况下创建新项目?”弹出窗口。
  • “引脚分配”选项卡中验证 USART1 模式是否配置为异步
  • 单击“配置”选项卡中的 USART1 按钮。设置字长8位,波特率为115200位/秒奇偶校验停止位1,如下图所示:
  • 通过选择“内存地址重新映射”,在“引脚”选项卡中启用 ICache,以达到最佳性能
  • 切换到“项目管理器”选项卡:选择“STM32CubeIDE”作为“工具链/IDE”,并为您的项目命名。
  • 单击 Generate Code
  • 接受以在STM32CubeIDE中打开项目,并按照步骤操作。
  • U5_IOT_Sensors调用生成的项目。

2.2.2将 BSP 驱动程序复制到您的项目中↑

BSP(板级支持包)驱动程序采用STM32CubeU5封装。这提供了与主板的硬件组件相对应的 API。

默认情况下,STM32CubeU5 软件包的最新版本在 SMT32CubeMX 存储库中下载:

C:\Users\user_name\STM32Cube\Repository\STM32Cube_FW_U5_Vx.xx.x

下图显示了 BSP 位置及其内容:


信息

在本例中,使用的STM32CubeU5版本为1.1.1。版本可能会随着时间的推移而增加。

以下是将 BSP 驱动程序复制到项目时要遵循的步骤:

  • 在生成的项目中,创建一个文件夹 U5_IOT_Sensors/Drivers/BSP
  • 复制STM32CubeU5/Drivers/BSP/B-U585-IOT02文件夹并将其粘贴到U5_IOT_Sensors/Drivers/BSP文件夹。
  • 复制STM32CubeU5/Drivers/BSP/Components文件夹并将其粘贴到U5_IOT_Sensors/Drivers/BSP/Components下。
  • 仅使用 HTS221 温度传感器。因此,可以删除复制到工作目录的任何其他文件和文件夹。此步骤是可选的:
    * Keep only the following folders under U5_IOT_Sensors\Drivers\BSP\Components:

    *Keep only the following folders under  U5_IOT_Sensors\Drivers\BSP\B-U585-IOT02:

  • 将文件 b_u585i_iot02a_conf_template.h 重命名为 b_u585i_iot02a_conf.h

2.2.3在STM32CubeIDE工作区中支持BSP↑

添加的文件夹会自动显示在STM32CubeIDE工作区中:



2.2.4更新包含路径↑

更新路径以支持新的头文件:

  • Project Explorer 视角选择相关项目:
  • 从“项目”菜单或“文件”菜单中,转到“属性”>“C/C++构建>设置”>“工具设置”>“MCU GCC 编译器”>“包含路径”。
  • 单击以包含新路径。
  • 添加路径 ../驱动程序/BSP/B-U585I-IOT02A , ../Drivers/BSP/Components/hts221 和 ../驱动程序/BSP/组件/lps22hh

以下屏幕截图总结了要遵循的步骤:


2.2.5更新源文件↑

编辑 main.c,如下所示:

  • 包括头文件:b_u585i_iot02a.hb_u585i_iot02a_env_sensors.hmath.h
/* USER CODE BEGIN Includes */
#include "b_u585i_iot02a.h"
#include "b_u585i_iot02a_env_sensors.h"
#include <math.h>
/* USER CODE END Includes */
  • 添加私有值。这些值用于在终端上显示温度和消息:
/* USER CODE BEGIN PV */
/* Private variables -------------------------------------------------------*/
float temp_value = 0;  // Measured temperature value
char str_tmp[100] = ""; // Formatted message to display the temperature value
uint8_t msg1[] = "****** Temperature values measurement ******\n\n\r";
uint8_t msg2[] = "=====> Initialize Temperature sensor HTS221 \r\n";
uint8_t msg3[] = "=====> Temperature sensor HTS221 initialized \r\n";
/* USER CODE END PV */
  • 在终端上显示消息并初始化 HTS221 温度传感器:
/* USER CODE BEGIN 2 */
HAL_UART_Transmit(&huart1,msg1,sizeof(msg1),1000);
HAL_UART_Transmit(&huart1,msg2,sizeof(msg2),1000);
BSP_ENV_SENSOR_Init(0, ENV_TEMPERATURE);
BSP_ENV_SENSOR_Enable(0, ENV_TEMPERATURE);
HAL_UART_Transmit(&huart1,msg3,sizeof(msg3),1000);
/* USER CODE END 2 *//
  • while(1)循环中,读取温度值,格式化,然后在终端上显示带有测量值的消息:
/* USER CODE BEGIN 3 */
BSP_ENV_SENSOR_GetValue(0, ENV_TEMPERATURE, &temp_value);
int tmpInt1 = temp_value;
float tmpFrac = temp_value - tmpInt1;
int tmpInt2 = trunc(tmpFrac * 100);
snprintf(str_tmp,100," TEMPERATURE = %d.%02d\n\r", tmpInt1, tmpInt2);
HAL_UART_Transmit(&huart1,( uint8_t *)str_tmp,sizeof(str_tmp),1000);
HAL_Delay(1000);
/* USER CODE END 3 */

信息

只能对所需的USER CODE部分进行更新,以避免使用新的STM32CubeMX代码生成覆盖所有内容。

2.2.6编译运行示例↑

  • 单击“生成”按钮以编译项目。
  • 单击“调试”按钮以运行软件。
  • 打开控制台模拟器,例如 TeraTerm[3].要配置控制台波特率,请选择数据位:8,然后单击确定。端口名称可能因您的计算机而异。
  • STM32CubeIDE打开Debug透视图。单击“恢复”按钮以执行代码。
  • Tera术语[3]在测量的温度值之前显示初始化消息:


现在,您可以

  • 构建您自己的项目,使用B-U585I-IOT02A中的嵌入式传感器测量温度值。
  • 将BSP组件添加到STM32CubeMx生成的项目中。
  • 将该板的使用范围扩展到 HTS221 以外的传感器,以进行环境测量。

3附录:将AC6示例移植到STM32CubeIDE↑

DataLogTerminal 是本附录中使用的示例。 它位于:STM32CubeExpansion_MEMS1_V7.1.0\Projects\STM32L476RG-Nucleo\Examples\IKS01A2\DataLogTerminal

信息

STM32CubeExpansion_MEMS1_V7.1.0 是 X-CUBE-MEMS 的提取物。随着时间的推移,可以从同一链接获得此包的最新版本。

警告

为了防止将来由于路径过长而导致的编译错误,建议将软件包放在 C: 下。

3.1硬件说明↑

The X-NUCLEO-IKS01A2[4]是用于STM32 64引脚Nucleo的运动MEMS和环境传感器扩展板。它通过 I2C 总线引脚与 NUCLEO-L476RG 连接。


3.2示例:使用HTS221传感器获取温度值并显示在终端上(从AC6移植到STM32CubeIDE)↑

本节的目的是逐步说明如何连接X-NUCLEO IKS01A2 HTS221传感器和NUCLEO-L476RG板,以获得温度值并将其显示在终端上。

3.2.1硬件设置↑

  • 使用 Arduino 连接器用 X-NUCLEO-IKS01A2 扩展板扩展您的 Nucleo 板。
  • 将带有扩展板的板连接到您的计算机。

3.2.2示例详情↑

readme.txt文件中的 STM32CubeExpansion_MEMS1_ V7.1.0\Projects\STM32L476RG-Nucleo\Examples\IKS01A2\DataLogTerminal 下提供了 DataLogTerminal 示例的描述:

@par Example Description
Main function is to show how to use sensor expansion board to send sensor data from a Nucleo board using UART to a connected PC or desktop, and display it on generic applications like TeraTerm.
After connection has been established:
- The user can view the data from various on-board environment sensors such as temperature, humidity, and pressure
- The user can also view data from various on-board MEMS sensors such as accelerometer, gyroscope, and magnetometer.

3.2.3将示例移植到STM32CubeIDE↑

将基于 SW4STM32 的 DataLogTerminal 示例导入 STM32CubeIDESTM32CubeExpansion_MEMS1_V7.1.0\Projects\STM32L476RG-Nucleo\Examples\IKS01A2\DataLogTerminal

必须转换项目,并显示以下消息:


  • 单击“确定”时,会弹出以下消息:
  • 单击“确定”。
  • Project Explorer 视角选择相关项目:

3.2.4编译运行示例↑

  • 单击“生成”按钮以编译项目。
  • 单击“调试”箭头,然后选择“调试配置”。
  • 在弹出的 Debug Configuration 窗口中,确保所选的 Debug 探测器ST-LINK
  • 在同一窗口中,单击调试”,或单击“调试”按钮以运行软件。
  • 打开控制台模拟器,例如 TeraTerm[3].配置控制台波特率,选择数据位:8,然后单击确定。端口名称可能因您的计算机而异。
  • 单击“恢复”按钮以执行代码。Tera术语[3]使用扩展板 X-NUCLEO-IKS01A2 中可用的传感器显示测量值。
  • X-NUCLEO-IKS01A2传感器测量的值显示在TeraTerm窗口中,如下所示:

4参考资料↑

  1. Jump up↑ STM32L4 Discovery kit IoT 节点
  2. Jump up↑ B-U585I-IOT02A 探索套件物联网节点
  3. ↑Jump up to:3.0 3.1 3.2 3.3 3.4 3.5 Tera术语
  4. Jump up↑ X-核-IKS01A2

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表