您的位置 首页 观点

STM32 的内部温度传感器

STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电…

STM32有一个内部的温度传感器,能够用来丈量CPU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转化成数字值。温度传感器模仿输入引荐采样时刻是17.1μs。STM32的内部温度传感器支撑的温度规模为:-40~125度。精度比较差,为±1.5℃左右。

STM32内部温度传感器的运用很简单,只需设置一下内部ADC,并激活其内部通道就差不多了。

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. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/275292.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部