文章目錄
- 環境
- 硬體
- 接線圖
- 創建工程
- 在 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 函式的 while 回圈中撰寫如下代碼
/* 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 ℃
世界上最幸運的事莫過于可以學習自己喜歡的知識~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321409.html
標籤:其他
