如何使用stm32f103c8t6获取一个B为3219的热敏电阻测的当前温度
时间: 2023-09-07 15:13:31 浏览: 48
要获取热敏电阻的温度,可以使用STM32F103C8T6的 ADC(模数转换器)和定时器来测量热敏电阻的电压值。
首先,需要计算热敏电阻的电阻值,可以使用下面的公式:
Rt = R * (1023 / ADCVal - 1)
其中,R是热敏电阻的额定电阻值,ADCVal是ADC转换后的数字值,1023是ADC的最大值。
接下来,需要使用另一个公式把热敏电阻的电阻值转换为温度:
T = 1 / {A + B[ln(Rt)] + C[ln(Rt)]^3}
其中,A、B、C是热敏电阻的参数,可以在热敏电阻的数据手册中找到。对于一个B值为3219的热敏电阻,一般的参数值是:A=1.291e-3,B=2.362e-4,C=9.628e-8。
根据上述公式,我们可以编写如下的STM32代码:
```c
#include "stm32f10x.h"
#define R_REF 10000 // 热敏电阻参考电阻值
#define ADC_MAX 1023 // ADC最大值
#define A 1.291e-3 // 热敏电阻参数A
#define B 2.362e-4 // 热敏电阻参数B
#define C 9.628e-8 // 热敏电阻参数C
float GetTemperature(uint16_t ADCVal)
{
float Rt = R_REF * (float)(ADC_MAX - ADCVal) / (float)ADCVal;
float lnRt = log(Rt);
float T = 1.0 / (A + B * lnRt + C * lnRt * lnRt * lnRt);
return T - 273.15;
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
while(1)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
uint16_t ADCVal = ADC_GetConversionValue(ADC1);
float Temperature = GetTemperature(ADCVal);
// 在这里进行温度的处理
}
}
```
在上面的代码中,首先初始化了ADC和GPIO,然后在无限循环中获取ADC转换值,并将其转换为温度。可以根据需要在获取温度后进行相关处理。