[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> <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]