和ADC的设置基本相同,算是ADC的扩展应用。
只是在计算方法上有变化,在adc的初始化程序里面做一些变动就可以了。
包含函数:
(1)Main
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 实验平台 : ST 官方三合一套件
+ 硬件 : STM32F103C8T6
+ 开发平台 : IAR For ARM 5.40
+ 仿真器 : J-Link
+ 日期 : 2010-10-28
+ 频率 :HSE = 8MHz ,主频 = 72MHz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "includes.h"
#include "stdio.h"
/*******************************************************************************
== 变量声明 ==
*******************************************************************************/
float ADC_Value,Tem;
unsigned char a=" 0;unsigned char b=" 0;unsigned char c=" 0;unsigned char d=" 0;
/*******************************************************************************
== Main 函数 ==
*******************************************************************************/
void main(void)
{
//---- 初始化 ------------------------------------------------------
RCC_Configuration(); //配置系统时钟
NVIC_Configuration(); //配置 NVIC 和 Vector Table
SysTick_Config(); //配置SysTick的精确延时
GPIO_Configuration();
UART1_Configuration();
AD_Configration();
DMA_Configration();
//---- 任务开始 ----------------------------------------------------
LED1_HIGH ; LED2_HIGH ; LED3_HIGH ; LED4_HIGH ; // 初始化让灯全灭
Uart1_PutString("===== douzi STM32 @ Temperature =====\r\n",39);
while (1)
{ // 这里只选采集的10个数据中的一个,应该做一些算法进行滤波才好
ADC_Value = (float)(sys_analog[5])*330/409600; // 计算公式datasheet上可以找到,但是我没找到。
Tem = (1.42 - ADC_Value)*1000/4.35 + 25;
Tem = Tem*100 ; // ADC是12位的,这里数据类型转换有问题
a = Tem/1000;
b = (Tem - a*1000)/100;
c = (Tem - a*1000 - b*100)/10;
d = Tem - a*1000 - b*100 - c*10;
Uart1_PutChar(a+'0');
Uart1_PutChar(b+'0');
Uart1_PutString(".",1);
Uart1_PutChar(c+'0');
Uart1_PutChar(d+'0');
Uart1_PutString(" C\n",3);
Delay_Ms(1000);
}
}
(2)在ADC初始化函数里要变动些内容,关于温度传感器的
文章推荐: