读取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寫一個輸出函數即可
- 在添加頭文件
- 寫輸出函數
注意:自己添加的代碼,需要在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值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB仿真TSC在哪里找,-bas
- 下一篇: pacman 查询_掌握pacman包管