继续完成后台用户的查询:如何使用STM32CubeMX设计代码框架,然后实现CPU的内置温度传感器来测量CPU芯片的温度,然后在CPU中输出芯片的温度值。
串口输出形式,数据更新周期为1000ms。
STM32CubeMX工具安装和驱动LED教程请参见前一篇Web文章:4行代码来实现LED闪烁的实现环境:STM32CubeMX版本5.3.0 STM32F103C8T6最低系统板PC13今天已与板载LED连接,以保持上一节的内容这次选择了STM32F407VGT6芯片进行测试。
STM32CubeMX的项目设置基本相似,具体实现如下。
实现目标:STM32CubeMX创建项目和参数配置串口1实现printf输出重定向,获取CPU内置温度传感器的值,实际上是获取ADC的值,然后将电压值转换为温度值本文使用的STM32CubeMX版本为5.3.0:创建项目和参数配置创建新项目并选择相应的MCU。
双击所选的MCU进入配置界面:配置RCC并使用外部晶振,如图所示:在SYS中,将SYS Mode中的Debug设置为Serial Wire,如果不是Debug则使用SWD下载。
第一次,您可能无法再次下载该程序。
如果无法在SWD模式下下载,则可以在按下重置按钮的同时尝试下载固件。
配置USART1,该模式是异步的,并且不使用硬件流控制。
如下图所示配置ADC1的温度传感器通道时钟树配置:项目设置:生成代码Serial 1以实现printf输出重定向打开Keil5项目:将以下代码添加到usart.c文件:将引用的头文件添加到main.c文件,注意添加位置。
添加代码以定义变量其中,变量AD_Value用于保存与内置温度传感器相对应的ADC的AD值,变量Temporate用于保存当前CPU芯片的温度。
添加该语句以获取代码ADC值:HAL_ADC_Start(& amp; hadc1); HAL_ADC_PollForConversion(& amp; hadc1,10); if(HAL_IS_BIT_SET(HAL_ADC_GetState(& amp; hadc1),HAL_ADC_STATE_REG_EOC)){AD_Value = HAL_amp; (浮动)(AD_Value * 3.3 / 4096); //转换为电压值} printf打印输出结果语句:printf(“ AD_Value:%.2f V “,温度”; printf(“ MCU温度:%。
1f度 "温带);将电压值转换为温度值的句子:temperate =(temperate-0.76)/0.0025+25;编译,没有错误:将JLINK下载程序方法配置为SW:单击“设置”,然后单击“设置”。
进行以下设置:确认后,单击下面的1编译项目,然后单击下面的2下载程序。
下载程序后,再次打开电源,然后在串行端口助手上打印出当前电压和转换后的温度值。
实际上,我们可以看到,使用单个ADC值即可将这次获得的ADC值用于计算温度。
该温度值不是很稳定。
在实际使用中,可以多次获得电压值,然后平均值可以稍微稳定。
该温度值仅适合用作核心温度的参考。
总之,通过两篇网络文章,我分享了使用STM32CubeMX创建项目并获取CPU芯片温度的整个过程。
您可以按照说明进行操作。
如有任何疑问,可以在后台留言或在微信上加我。
“每月培训”内容:“基于单芯片的智能风扇”您想实现什么功能,您可以在后台留言或向我添加微信留言。
微信帐号:chengxuyuanxiaoha(程序员Xiaoha)将于6月1日宣布其功能点,并请期待所需功能模块的链接。