PT1000C语言程序,基于stm32f103的PT100测温源程序

#include "bsp_adc.h"

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue;

//__IO u16 ADC_ConvertedValueLocal;

/**

* @brief  使能ADC1和DMA1的时钟,初始化PC.0

* @param  无

* @retval 无

*/

static void ADC1_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable DMA clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

/* Enable ADC1 and GPIOC clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);

/* Configure PC.0  as analog input */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOC, &GPIO_InitStructure);                                // PC0,输入时不用设置速率

}

/**

* @brief  配置ADC1的工作模式为MDA模式

* @param  无

* @retval 无

*/

static void ADC1_Mode_Config(void)

{

DMA_InitTypeDef DMA_InitStructure;

ADC_InitTypeDef ADC_InitStructure;

/* DMA channel1 configuration */

DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADC地址

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //内存地址

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize = 1;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //外设地址固定

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;                                  //内存地址固定

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //半字

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //循环传输

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA1_Channel1, &DMA_InitStructure);

/* Enable DMA channel1 */

DMA_Cmd(DMA1_Channel1, ENABLE);

/* ADC1 configuration */

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //独立ADC模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE ;                                          //禁止扫描模式,扫描模式用于多通道采集

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //开启连续转换模式,即不停地进行ADC转换

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //不使用外部触发转换

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //采集数据右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1;                                                                         //要转换的通道数目1

ADC_Init(ADC1, &ADC_InitStructure);

/*配置ADC时钟,为PCLK2的8分频,即9MHz*/

RCC_ADCCLKConfig(RCC_PCLK2_Div8);

/*配置ADC1的通道11为55.        5个采样周期,序列为1 */

ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);

/* Enable ADC1 DMA */

ADC_DMACmd(ADC1, ENABLE);

/* Enable ADC1 */

ADC_Cmd(ADC1, ENABLE);

/*复位校准寄存器 */

ADC_ResetCalibration(ADC1);

/*等待校准寄存器复位完成 */

while(ADC_GetResetCalibrationStatus(ADC1));

/* ADC校准 */

ADC_StartCalibration(ADC1);

/* 等待校准完成*/

while(ADC_GetCalibrationStatus(ADC1));

/* 由于没有采用外部触发,所以使用软件触发ADC转换 */

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}

/**

* @brief  ADC1初始化

* @param  无

* @retval 无

*/

void ADC1_Init(void)

{

ADC1_GPIO_Config();

ADC1_Mode_Config();

}

/**

* @brief  获取PT100的阻值

* @param  无

* @retval 无

*/

float getPT100Value(float AdValue)

{

float BaseValue = 2.460;

float AD623A = 27.3,AD620A = 27.0;

float R1=1999.0,R2=1999.0,R3=100.0;

float Rx = 0;

float Uo = AdValue/AD623A;

printf("%f\n",Uo);

Rx = (BaseValue*(R3*R1)+Uo*(R1*R2+R1*R3))/((double)((BaseValue*R2))-(Uo*(R2+R3)));

return Rx;

}

/**

* @brief  获取AD的平均值

* @param  无

* @retval 无

*/

float getAdcAverage(uint8_t times)

{

uint8_t i = 0;

double temp = 0;

for(i = 0;i

{

temp+=(float) ADC_ConvertedValue/4096*3.3; // 读取转换的AD值

}

return (temp/(float)times);

}

/**

* @brief  获取PT100温度值 Rt = Ro(1+A*t+B*t*t)

* @param  无

* @retval 无

*/

float getTValue(float PT100Value)

{

float A = 0.003940;

float B = -0.0000005802;

float C = -0.000000000004274;

}

/*********************************************END OF FILE**********************/

你可能感兴趣的:(PT1000C语言程序)