中级会员
 
- 积分
- 294
- 金钱
- 294
- 注册时间
- 2015-11-30
- 在线时间
- 39 小时
|

楼主 |
发表于 2016-8-10 10:40:55
|
显示全部楼层
本帖最后由 bumbdong 于 2016-8-10 10:43 编辑
正常温度值应该再30度左右,可是我如果开启了2个通道的转换,温度值就只有24度左右
ADC初始化:
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructre;
GPIO_InitTypeDef GPIO_InitStructre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE); //使能PA、ADC1时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //ADC时钟分频因子6,72M/6=12M,ADC最大时钟频率不能超过14M
GPIO_InitStructre.GPIO_Pin=GPIO_Pin_0; //PA0设置为ADC输入
GPIO_InitStructre.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructre); //写入PA0配置
ADC_DeInit(ADC1); //初始化ADC1,讲ADC1所有参数重置缺省状态
ADC_InitStructre.ADC_Mode=ADC_Mode_Independent; //ADC工作模式:ADC1、ADC2工作在独立模式
ADC_InitStructre.ADC_ScanConvMode=DISABLE; //模数转换工作在但通道模式
ADC_InitStructre.ADC_ContinuousConvMode=DISABLE; //模数转换工作在单次模式转换模式
ADC_InitStructre.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
ADC_InitStructre.ADC_NbrOfChannel=1; //顺序进行规则转换的ADC通道数目
ADC_InitStructre.ADC_DataAlign=ADC_DataAlign_Right; //ADC数据右对齐
ADC_Init(ADC1,&ADC_InitStructre); //写入ADC配置参数
ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器通道
ADC_Cmd(ADC1,ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); //使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //ADC1开始校准
while(ADC_GetCalibrationStatus(ADC1)); //等待ADC1校准结束
}
主函数:
int main(void)
{
u16 adcx;
float temp,tep;
delay_init();
LED_Init();
uart_init(9600); //放在LCD初始化之前(lcd初始化使用到printf),否则程序将出现异常
LCD_Init();
Adc_Init();
POINT_COLOR=RED;
LCD_ShowString(30,60,300,24,24,"Mini STM32 -_-||!");
LCD_ShowString(30,90,300,24,24,"ADC Test!!");
LCD_ShowString(30,120,300,16,16,"ADC_CH1 Value is:");
LCD_ShowString(30,140,300,16,16,"ADC_CH1 Voltage is:0.000V");
LCD_ShowString(30,170,300,16,16,"ADC_TEP Value is:");
LCD_ShowString(30,190,300,16,16,"ADC_TEP Voltage is:0.000V");
LCD_ShowString(30,210,300,16,16,"IC Temperate is:00.00C");
POINT_COLOR=BLUE;
LCD_ShowString(182,140,200,16,16,"0.000");
LCD_ShowString(182,190,200,16,16,"0.000");
LCD_ShowString(158,210,200,16,16,"00.00");
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(166,120,adcx,4,16,0);
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(182,140,adcx,1,16,0);
temp=(temp-adcx)*1000;
LCD_ShowxNum(198,140,temp,3,16,0x80);
adcx=Get_Adc_Average(ADC_Channel_TempSensor,10);
LCD_ShowxNum(166,170,adcx,4,16,0);
temp=(float)adcx*(3.3/4096);
adcx=temp;
tep=temp;
LCD_ShowxNum(182,190,adcx,1,16,0);
temp=(temp-adcx)*1000;
LCD_ShowxNum(198,190,temp,3,16,0x80);
tep=((1.43-tep)/0.0043)+25;
LCD_ShowxNum(158,210,(u8)tep,2,16,0);
tep-=(u8)tep;
tep*=100;
LCD_ShowxNum(182,210,tep,2,16,0x80);
LED0=!LED0;
delay_ms(500);
}
}
麻烦原子哥给看一下 这个哪里出的问题
|
|