小熊派开发笔记-串口读取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_Transmit
和 HAL_UART_Receive
都是用的 uart2
串口,向我们的土壤传感器发送和接收数据。
查阅土壤传感器的用户手册,想要获取数据,要先发送一个问询帧,如下
因此,我们根据用户手册里的示例,向 uart2
串口发送一个如代码所示的问询帧,然后接收返回来的应答帧,最后输出到串口助手上就好啦
编译、烧录程序
勾选 MicroLIB
库很重要,不然会无法向串口助手输出数据
勾选 reset and run
可以让程序烧录完成后自动运行。
设置完成后点击确定,OK
点击编译,然后烧录,下图所示表示烧录成功
打开串口助手,这里我用的是 QCOM。打开端口,然后按下小熊派的 KEY1
按键,可以看到串口助手打印出了应答帧的信息,如下图
根据土壤传感器的用户手册,可以解析出温度数据为:0x01 0x03(十六进制) = 259(十进制)
,所以当前温度为 25.9 ℃
世界上最幸运的事莫过于可以学习自己喜欢的知识~