日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

發布時間:2024/7/23 编程问答 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要:一文帶你用小熊派開發板動手做土壤濕度傳感器。

一、實驗準備

1.實驗環境

  • 一塊stm32開發板(推薦使用小熊派),以及數據線
  • 已經安裝STM32CubeMX
  • 已經安裝KeilMDK,并導入stm32開發板對應的芯片包(小熊派使用的是STM32L431RCT6)
  • 準備一個串口調試助手,我使用的是UartAssist(包含在附件中)
  • 一個土壤濕度傳感器模塊

2.目標效果

  • 通過CubeMX創建工程并配置參數
  • 獲取stm32以硬件IIC獲取SHT20傳感器值(通過SHT20數據手冊轉化)
  • 串口1重定向輸出土壤濕度值

二、通過CubeMX生產MDK工程

A.芯片選擇

打開CubeMX,進入芯片選擇:

選擇自己的stm32芯片(即STM32L431RCT6):

B.時鐘源RCC設置

更改系統時鐘源

系統時鐘默認使用內部的高速時鐘(HSI),選擇使用HSE,時鐘更精確

設置外部時鐘對應的端口

配置時鐘樹

STM32L431RCT6系統時鐘最大可以為80MHz,我們配置到最大即可

C.參數配置(對應端口設置)

1)配置USART1

使用USART,模式為異步,波特率為115200,無硬件流控制

2)配置ADC通道

知識補充:ADC,模擬-數字轉換器,可以將連續變化的模擬信號轉化為離散的數字信號。其中,小熊派的ADC1的通道三已經被引出,即PC2

打開ADC1通道3

?---
3)配置adc

我們保持默認即可:

D.工程設置

一些基礎的設置,包括工程名、存儲位置、工程環境、工程中各個文件的組成

E.生成代碼

三、代碼補充

1. 串口1輸出重定向

我們知道printf是打印函數,原理是根據傳入的字符串參數格式化打印輸出到stdout中。我們需要讓printf打印到串口之中,只需要在usart.c文件中模仿printf寫一個輸出函數即可

  • 在添加頭文件
/* USER CODE BEGIN 0 */#include <stdarg.h>#include <string.h>#include <stdio.h>/* USER CODE END 0 */
  • 寫輸出函數
/* USER CODE BEGIN 1 */void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...){unsigned char UsartPrintfBuf[296];va_list ap;unsigned char *pStr = UsartPrintfBuf;va_start(ap, fmt);vsprintf((char *)UsartPrintfBuf, fmt, ap); //格式化va_end(ap);while(*pStr != 0){USART1->TDR = *pStr++;while((USART1->ISR & 0x40) == 0);}}//使用方法:UsartPrintf(&huart1,"hello worldrn");/* USER CODE END 1 */

注意:自己添加的代碼,需要在begin和end之間

2. 讀取傳感器ADC值

我們獲取傳感器adc的值,通過在實驗室多次測量不同土壤濕度的ADC值,來表示土壤濕潤程度

主函數代碼

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc1); //開啟ADC1HAL_ADC_PollForConversion(&hadc1,50); //等待ADC轉化完成for(num=0;num<20;num++){AD_Value += HAL_ADC_GetValue(&hadc1);}AD_Value = AD_Value/20; //ADC轉換的數據20次的平均值UsartPrintf(&huart1,"ADC20次獲取的平均值值為:%drn",AD_Value);Temperature = ((int16_t)(AD_Value-*TEMP30_CAL_ADDR)*1.0/(int16_t)(*TEMP130_CAL_ADDR-*TEMP30_CAL_ADDR))+30;UsartPrintf(&huart1,"Temperature is %.2f °rn",Temperature); ////UsartPrintf(&huart1,"%drn",*TEMP130_CAL_ADDR);//UsartPrintf(&huart1,"%drn",*TEMP30_CAL_ADDR);}

代碼很簡單,但是如果我們需要獲取更精確的值,可以加入各種濾波算法。然后根據實驗值,判斷土壤濕潤程度。

我通過實驗發現,在空氣中獲取的值為1300左右,包上濕潤的餐巾紙后,值為兩位數以下。因此我們可以粗略判斷,土壤越濕度,值越小;相反,土壤越干,值越大。

四、編譯+下載

點擊編譯后,0 error,0 warning

小熊派連接在電腦上,代碼下載到開發板

五、效果

1.將小熊派串口1和電腦相連,即撥到 AT-MUC,按下復位鍵

2.打開串口調試助手

連接端口,設置波特率為115200

可以看到,在空氣中獲取的值為1200-1300;此時,我們不僅掌握了ADC的使用,還掌握了土壤濕度傳感器的使用

附件中包含本文工程文件(cubemx + keilMDK)

附件:BearPiToSoil.zip

點擊關注,第一時間了解華為云新鮮技術~

總結

以上是生活随笔為你收集整理的读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。