新闻中心

EEPW首页>嵌入式系统>设计应用> STM32 的内部温度传感器

STM32 的内部温度传感器

作者: 时间:2016-11-11 来源:网络 收藏
STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1μs。STM32的内部温度传感器支持的温度范围为:-40~125度。精度比较差,为±1.5℃左右。

器的使用很简单,只要设置一下内部ADC,并激活其内部通道就差不多了。

本文引用地址://m.amcfsurvey.com/article/201611/317046.htm

STM32内部温度传感器使用的步骤了,如下:

1)设置ADC,开启内部温度传感器。

ADC_TempSensorVrefintCmd(ENABLE);//开启内部温度传感器功能:

2)读取通道16的AD值,计算结果。

在设置完之后,我们就可以读取温度传感器的电压值了

  1. //初始化ADC
  2. //这里我们仅以规则通道为例
  3. //我们默认将开启通道0~3
  4. voidT_Adc_Init(void)//ADC通道初始化
  5. {
  6. ADC_InitTypeDef ADC_InitStructure;
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);//使能GPIOA,ADC1通道时钟
  8. RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分频因子6时钟为72M/6=12MHz
  9. ADC_DeInit(ADC1);//将外设 ADC1 的全部寄存器重设为缺省值
  10. ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式
  11. ADC_InitStructure.ADC_ScanConvMode=DISABLE;//模数转换工作在单通道模式
  12. ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//模数转换工作在单次转换模式
  13. ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
  14. ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC数据右对齐
  15. ADC_InitStructure.ADC_NbrOfChannel=1;//顺序进行规则转换的ADC通道的数目
  16. ADC_Init(ADC1,&ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
  17. ADC_TempSensorVrefintCmd(ENABLE);//开启内部温度传感器
  18. ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
  19. ADC_ResetCalibration(ADC1);//重置指定的ADC1的复位寄存器
  20. while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC1重置校准寄存器的状态,设置状态则等待
  21. ADC_StartCalibration(ADC1);//
  22. while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC1的校准程序,设置状态则等待
  23. }
  24. u16 T_Get_Adc(u8 ch)
  25. {
  26. ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC1,ADC通道3,第一个转换,采样时间为239.5周期
  27. ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的软件转换启动功能
  28. while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待转换结束
  29. returnADC_GetConversionValue(ADC1);//返回最近一次ADC1规则组的转换结果
  30. }
  31. //得到ADC采样内部温度传感器的值
  32. //取10次,然后平均
  33. u16 T_Get_Temp(void)
  34. {
  35. u16 temp_val=0;
  36. u8 t;
  37. for(t=0;t<10;t++)
  38. {
  39. temp_val+=T_Get_Adc(ADC_Channel_16);//TampSensor
  40. delay_ms(5);
  41. }
  42. returntemp_val/10;
  43. }
  44. //获取通道ch的转换值
  45. //取times次,然后平均
  46. u16 T_Get_Adc_Average(u8 ch,u8 times)
  47. {
  48. u32 temp_val=0;
  49. u8 t;
  50. for(t=0;t
  51. {
  52. temp_val+=T_Get_Adc(ch);
  53. delay_ms(5);
  54. }
  55. returntemp_val/times;
  56. }



评论


技术专区

关闭