jobszheng5 发表于 2023-10-28 16:06

[STM32F769IDISCO返场]ADC专用通道采集MCU温度

<div class='showpostmsg'># ADC专用通道采集MCU温度

大家好!今天在做LCD屏实验时,我摸了一下板子,有点发烫!也不知道是屏幕的原因,还是ST-Link接口供电电源的问题。决定通过STM32F769芯片内置的环境温度传感器来采集一下芯片的温度。看一看STM32F769在有负荷的情况的温度变化如何?于是也就有了本篇文章。

阅读STM32F769芯片手册ADC章节,可以轻松获知温度传感器在ADC内部与ADC_IN18相连接,但要注意其与Vbat复用通道。

手册上也对读取芯片内部温度传感步骤进行了说明,我摘录如下:

- step3: 选择ADC1_IN18
- step4: 设置ADC的时钟源
- step5: 置位TSVREFE位,使温度传感器从掉电低功耗模式中恢复过来
- step6: 置位SWSTART位,启动转换
- step7: 回读ADC数据寄存器
- 依公式计算温度

我使用查询poll的方式来读取的ADC数值。接下来分享一下核心代码:

~~~c
while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_13, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_5, GPIO_PIN_SET);
    adc_status = HAL_ADC_Start(&hadc1);
    if (adc_status != HAL_OK)
    {
      JDEBUG_PRINTF("1. error\r\n");
    }
    else
    {

      adc_status = HAL_ADC_PollForConversion(&hadc1, 100);
      if (adc_status != HAL_OK)
      {
      JDEBUG_PRINTF("2. error\r\n");
      }
      else
      {
      val = HAL_ADC_GetValue(&hadc1);
      JTemp = ((((val * VREF) / MAX_CONVERTED_VALUE) - VSENS_AT_AMBIENT_TEMP) * 10 / AVG_SLOPE) + AMBIENT_TEMP;
      JDEBUG_PRINTF("Internal Temperature is %ld degree C[%d]\r\n", JTemp, val);
      }
    }

    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_13, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOJ, GPIO_PIN_5, GPIO_PIN_RESET);
}
~~~

让我们编译,下载,看看STM32F769运行的结果吧!

</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                               
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

jobszheng5 发表于 2023-10-28 16:08

<p>帖子撰写、发布完成。</p>

<p>回头看了一眼温度,现在温度已经涨到了37度了。</p>

<p><img height="51" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/sweat.gif" width="50" /></p>
页: [1]
查看完整版本: [STM32F769IDISCO返场]ADC专用通道采集MCU温度