锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

小熊派开发笔记-串口读取RS485输出的土壤七合一传感器数据(基于STM32CubeMX)

时间:2022-10-04 23:30:00 返出传感器

文章目录

    • 环境
    • 硬件
    • 接线图
    • 创建工程
    • 在 Keil5-MDK 中编写代码
    • 编译、烧录程序

环境

  • JRE(Java Runtime Environment)
  • STM32CubeMX v6.3.0
  • HAL 库 L4 v1.7.0
  • Keil5-MDK

环境建设参考:STM32CubeMX学习记录–安装配置及使用

如果你不想去官,也可以从我的百度云分享下载 STM32CubeMX 和 HAL 库

链接:https://pan.baidu.com/s/10MKGKPNQrIxZnuMZvVKqkg
提取码:zjor

硬件

小熊派开发板

  • 土壤七合一传感器(水、温、电导率、氮磷钾、PH值)

  • RS485 转 TTL 模块

接线图

  • 小熊派的 5v 连接土壤传感器的电源 电源正
  • 小熊派的 GND 连接土壤传感器 电源地
  • 小熊派的 3.3v 电源接转模块 VCC
  • 小熊派的 GND 连接转接模块 GND
  • 小熊派的 UART2_TX 连接转接模块 TXD
  • 小熊派的 UART2_RX 连接转接模块 RXD
  • 转接模块的 A 连接土壤传感器 485-A
  • 转接模块的 B- 连接土壤传感器 485-B

创建工程

打开 STM32CubeMX,选择新项目,如下图所示

输入输入框 stm32l431rc,选中,然后双击选择中间 LQFP64 如下图所示

查看原理图,KEY1 按钮对应的引脚是 PB2,如下图

在 STM32CubeMX 中选择 PB2 引脚输出模式为 GPIO_input

设置 PB2 如下图所示

设置 UART1 该串口用于异步输出 PC 通信端,波特率使用默认 115200,如下图

设置 UART2 为了异步输出,串口用于与土壤传感器通信,我们上面的硬件接线也用于 UART2 串口。土壤传感器的波特率为 9600,因此串口波特率设置在项目中 9600,如下图

内部默认时钟设置为最高 80MHz

最后配置生成工程设置,如下图

最后选择右上角 GENERATE CODE,项目创建即可完成

在 Keil5-MDK 中编写代码

进入 MDK-ARM 目录,打开工程,在 usart.c 编写以下代码

/* USER CODE BEGIN 1 */ int fputc(int ch, FILE *file) { 
          uint8_t temp[1] = { 
        ch};  HAL_UART_Transmit(&huart1, temp, 1, 0xff);  return HAL_OK; } /* USER CODE END 1 */ 

将头文件添加到文件头部

/* USER CODE BEGIN 0 */ #include "stdio.h" /* USER CODE END 0 */ 

重写 fputc 可以将 printf 函数输出重定向 uart1 串口可以通过串口助手显示

main.c 首先添加头文件

/* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */ 

然后在 main 函数的 whil 循环中编写如下代码

/* USER CODE BEGIN 3 */
// 如果检测到 KEY1 按下
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)
{ 
        
    // 按键去抖
    HAL_Delay(20);
    while (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET);
    HAL_Delay(20);
    
    // 发送问询帧
    uint8_t askData[] = { 
        0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x09};
    HAL_UART_Transmit(&huart2, askData, 8, 0xff);
    
    // 接收应答帧
    uint8_t result[13];
    HAL_UART_Receive(&huart2, result, 13, 0xff);
    for (int i = 0; i < 13; i++)
    { 
        
        printf(" %x ", result[i]);
    }
}

这里的 HAL_UART_TransmitHAL_UART_Receive 都是用的 uart2 串口,向我们的土壤传感器发送和接收数据。

查阅土壤传感器的用户手册,想要获取数据,要先发送一个问询帧,如下

因此,我们根据用户手册里的示例,向 uart2 串口发送一个如代码所示的问询帧,然后接收返回来的应答帧,最后输出到串口助手上就好啦

编译、烧录程序

勾选 MicroLIB 库很重要,不然会无法向串口助手输出数据

勾选 reset and run 可以让程序烧录完成后自动运行。

设置完成后点击确定,OK

点击编译,然后烧录,下图所示表示烧录成功

打开串口助手,这里我用的是 QCOM。打开端口,然后按下小熊派的 KEY1 按键,可以看到串口助手打印出了应答帧的信息,如下图

根据土壤传感器的用户手册,可以解析出温度数据为:0x01 0x03(十六进制) = 259(十进制),所以当前温度为 25.9 ℃

世界上最幸运的事莫过于可以学习自己喜欢的知识~

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章