摘要:一文带你用小熊派开发板动手做土壤湿度传感器。
一、试验筹备
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); //开启ADC1 HAL_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
点击关注,第一工夫理解华为云陈腐技术~