给你的 ART-Pi (STM32H7) 降降温

本文介绍了ART-Pi在不同主频下STM32H7 MCU的温度变化,并提供了详细的温度测量方法及实验数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,ART-Pi 是什么

ART-Pi 是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。详细资料都可以从 ART-Pi主页 来获取。

二,ART-Pi 全速运行时的温度

相信每一位第一次使用 STM32H7 系列 MCU 的用户都会被他的发热量吓到,内心 OS:这个板子是不是有问题,第一次遇到这么热的 STM32。时间长了的用户都会知道只要手还能摸得住说明就是正常的。但是这个温度到底是多少呢?
因此我做了一个读取 MCU 内存温度的实验
主频为 480M 时的温度


[40978145] D/board: System Clock information
[40978153] D/board: SYSCLK_Frequency = 480000000
[40978162] D/board: HCLK_Frequency   = 240000000
[40978171] D/board: PCLK1_Frequency  = 120000000
[40978180] D/board: PCLK2_Frequency  = 120000000
[40978188] D/board: STM32H7 temp is 49.610136

主频为 120M 时的温度


[33922714] D/board: System Clock information
[33922722] D/board: SYSCLK_Frequency = 120000000
[33922731] D/board: HCLK_Frequency   = 60000000
[33922740] D/board: PCLK1_Frequency  = 30000000
[33922749] D/board: PCLK2_Frequency  = 30000000
[33922758] D/board: STM32H7 temp is 32.261209

如何实现测量 STM32H7 的内部温度:

  1. 在 CUBEMX 中打开 ADC3-IN18 的测量引脚,这个是自带的测量温度通道:
    在这里插入图片描述
  2. 温度的计算公式
    在这里插入图片描述
    TS_CAL2 的值保存在 :0x1FF1E840
    TS-CAL1 的值保存在:0x1FF1E820

所以可得

    adc_v = HAL_ADC_GetValue(&ADC3_Handler);
    adcx = (110.0-30.0)/(*(unsigned short*)(0x1FF1E840) - *(unsigned short*)(0x1FF1E820));
    temp = adcx*(adc_v - *(unsigned short*)(0x1FF1E820))+30;
  1. ADC 的初始化
    ADC 的初始化代码就比较常规了,简单的测试也就不需要使用 DMA 等配置
    ADC3_Handler.Instance=ADC3;
    ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;
    ADC3_Handler.Init.Resolution=ADC_RESOLUTION_16B;
    ADC3_Handler.Init.ScanConvMode=DISABLE;
    ADC3_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV;
    ADC3_Handler.Init.LowPowerAutoWait=DISABLE;
    ADC3_Handler.Init.ContinuousConvMode=DISABLE; 
    ADC3_Handler.Init.NbrOfConversion=1;
    ADC3_Handler.Init.DiscontinuousConvMode=DISABLE;
    ADC3_Handler.Init.NbrOfDiscConversion=0;
    ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;
    ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;
    ADC3_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN;
    ADC3_Handler.Init.OversamplingMode=DISABLE;
    ADC3_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR;
    HAL_ADC_Init(&ADC3_Handler);

    HAL_ADCEx_Calibration_Start(&ADC3_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); 

    ADC_ChannelConfTypeDef ADC3_ChanConf;

    ADC3_ChanConf.Channel=ADC_CHANNEL_TEMPSENSOR;
    ADC3_ChanConf.Rank=ADC_REGULAR_RANK_1;
    ADC3_ChanConf.SamplingTime=ADC_SAMPLETIME_810CYCLES_5; 
    ADC3_ChanConf.SingleDiff=ADC_SINGLE_ENDED;
    ADC3_ChanConf.OffsetNumber=ADC_OFFSET_NONE;
    ADC3_ChanConf.Offset=0;
    HAL_ADC_ConfigChannel(&ADC3_Handler,&ADC3_ChanConf);
    
    return 0;
  1. 获取温度与系统时钟的频率
    unsigned int adc_v;
    double adcx;
    double temp;

    HAL_ADC_Start(&ADC3_Handler);
    HAL_ADC_PollForConversion(&ADC3_Handler,10);

    LOG_D("System Clock information");
    LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
    LOG_D("HCLK_Frequency   = %d", HAL_RCC_GetHCLKFreq());
    LOG_D("PCLK1_Frequency  = %d", HAL_RCC_GetPCLK1Freq());
    LOG_D("PCLK2_Frequency  = %d", HAL_RCC_GetPCLK2Freq());

    adc_v = HAL_ADC_GetValue(&ADC3_Handler);
    adcx = (110.0-30.0)/(*(unsigned short*)(0x1FF1E840) - *(unsigned short*)(0x1FF1E820));
    temp = adcx*(adc_v - *(unsigned short*)(0x1FF1E820))+30;

    LOG_D("STM32H7 temp is %f",temp);

三,未完待续

后续测试了不同频率,不同编译器,不同优化选项的性能对比,后续结果放在了传送门, 整个测是工程也开源在了 GITEE,欢迎 Start.

### ART-Pi STM32H750 Linux移植教程和资源 #### 一、准备工作 对于ART-Pi STM32H750VB而言,要实现Linux系统的移植并非一件容易的事。通常情况下,这类微控制器更适合运行实时操作系统RTOS如RT-Thread而非完整的Linux系统[^4]。 然而,在特定需求驱动下,确实存在一些尝试将轻量级Linux内核移植至ARM Cortex-M系列MCU上的案例。这些项目往往依赖于高度裁剪过的uCLinux或其他专为低功耗嵌入式设备设计的小型化Linux发行版。 #### 二、具体步骤概述 1. **选择合适的Linux版本** - 对于STM32H750这样的低端处理器来说,建议采用经过优化处理后的μClinux或者其他专门为无MMU架构定制的精简版Linux内核。 2. **获取必要的工具链和支持文件** - 安装交叉编译器以及相关构建工具; - 下载目标芯片对应的BSP(Board Support Package),如果官方未提供,则需自行编写启动加载程序(Bootloader)并适配硬件特性; 3. **配置与编译内核** - 修改Makefile以适应新的体系结构设置; - 根据实际应用场景调整内核选项,去除不必要的模块和服务来减小镜像大小; 4. **创建根文件系统** - 利用BusyBox等工具建立基础命令集合; - 添加应用程序和其他必需的服务进程; 5. **测试与调试** - 将生成好的映像通过JTAG/SWD接口写入Flash存储区; - 进行初步的功能验证,确保能够正常启动进入shell界面; 6. **持续改进和完善** - 解决遇到的各种兼容性和性能瓶颈问题; - 增加更多实用功能直至满足预期要求为止; 值得注意的是,上述流程涉及到大量底层编程和技术细节操作,对于开发者的技术水平提出了较高要求。而且由于缺乏广泛支持,整个过程中可能会面临诸多挑战。 ```bash # 示例:安装交叉编译环境(假设使用arm-linux-gnueabi) sudo apt-get update && sudo apt-get install gcc-arm-linux-gnueabihf ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值