1.模块介绍

测量土壤湿度,主要以ADC模拟量采集为主,接AO引脚

2.引脚介绍
3.使用说明
soilmoisture.c
#include "stm32f10x.h"
#include "Delay.h"
/****************************
*函 数:土壤湿度传感器初始化
*作 者:Dragon-H
*时 间:2024-5-6
*物理创新实验室
****************************/
void soilMoisture_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置分频因子6,72M/6=12M,ADC最大时间不能超过14M
ADC_DeInit(ADC1);//复位ADC1,将ADC1的全部寄存器全部设为缺省值
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_NbrOfChannel=1;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC1,&ADC_InitStructure);
//ADC准备阶段
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
/****************************
*函 数:获取ADC值
*作 者:Dragon-H
*时 间:2024-5-6
*物理创新实验室
****************************/
int soilMoisture_ADC_GET(int ch){
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
/****************************
*函 数:处理数据 多久求和取平均值
*作 者:Dragon-H
*时 间:2024-5-6
*物理创新实验室
****************************/
int soilMoisture_ReadData(int channel,int count){
int sum_val=0;
for(uint8_t i;i<count;i++){
sum_val+=soilMoisture_ADC_GET(channel);
}
return sum_val/count;
}
main.c
int main(void)
{
/**************************
*函数初始化
*2024-4-26
*Dragon-H
*物理创新实验室
***************************/
soilMoisture_Init();
/**************************
*自定义变量
*2024-4-26
*Dragon-H
*物理创新实验室
***************************/
float RainData;
/**************************
*数据执行
*2024-4-26
*Dragon-H
*物理创新实验室
***************************/
OLED_ShowChinese(0,16, "土壤湿度:");
while (1)
{
RainData=(float)soilMoisture_ReadData(5,20)*(3.3/4096);
OLED_ShowFloatNum(75, 16,RainData, 2,2, OLED_8X16);
OLED_Update();
}
本文详细介绍了如何在STM32F10x平台中使用ADC模块测量土壤湿度,包括GPIO配置、ADC初始化、获取ADC值和数据处理方法。主要内容涉及传感器初始化函数、ADC操作以及主函数中的数据读取和显示。
295

被折叠的 条评论
为什么被折叠?



