找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4392|回复: 1
打印 上一主题 下一主题
收起左侧

STM32F030c8t6单片机读取内部温度传感器值不正确?

[复制链接]
跳转到指定楼层
楼主
ID:101106 发表于 2019-3-11 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是初始化代码

得到的温度值都是偏大 譬如室温是25摄氏度得到的值是65?

哪位大神有成功代码参考参考?
  1. /* Temperature sensor calibration value address */
  2. #define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7B8))
  3. #define VDD_CALIB ((uint32_t) (3300))
  4. #define VDD_APPLI ((uint32_t) (3000))
  5. #define AVG_SLOPE ((uint32_t) (5336)) //AVG_SLOPE in ADC conversion step (@3.3V)/°C multiplied by 1000 for precision on the division
  6. int32_t temperature; /* will contain the temperature in degrees Celsius */
  7. temperature = ((uint32_t) *TEMP30_CAL_ADDR - ((uint32_t) ADC1->DR * VDD_APPLI / VDD_CALIB)) * 1000;
  8. temperature = (temperature / AVG_SLOPE) + 30;
复制代码
这个是参考手册里的源码
  1. static void MX_ADC_Init(void)
  2. {

  3.   ADC_ChannelConfTypeDef sConfig;

  4.   /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */
  5.   hadc.Instance = ADC1;
  6.   hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  7.   hadc.Init.Resolution = ADC_RESOLUTION_12B;
  8.   
  9.   hadc.Init.SamplingTimeCommon = ADC_SAMPLETIME_239CYCLES_5;
  10.   
  11.   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  12.   hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  13.   hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  14.   hadc.Init.LowPowerAutoWait = DISABLE;
  15.   hadc.Init.LowPowerAutoPowerOff = DISABLE;
  16.   hadc.Init.ContinuousConvMode = DISABLE;
  17.   hadc.Init.DiscontinuousConvMode = ENABLE;
  18.   hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  19.   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  20.   hadc.Init.DMAContinuousRequests = DISABLE;
  21.   hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  22.   /* Initialize ADC peripheral according to the passed parameters */
  23.   if (HAL_ADC_Init(&hadc) != HAL_OK)
  24.   {
  25.     _Error_Handler(__FILE__, __LINE__);
  26.   }

  27.   /* 校正ADC */
  28.   if(HAL_ADCEx_Calibration_Start(&hadc) != HAL_OK)
  29.   {
  30.     _Error_Handler(__FILE__, __LINE__);
  31.   }
  32.   
  33.   /**Configure for the selected ADC regular channel 16 to be converted.*/
  34.   sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
  35.   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  36.   {
  37.     _Error_Handler(__FILE__, __LINE__);
  38.   }
  39. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:142059 发表于 2019-3-11 20:44 来自手机 | 只看该作者
1.芯片内部温度本来就比室温高,2.内部温度传感器是低精度的,一般此温度是用来监测芯片内部温度变化(做参考)而不是它精确的温度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表