上一篇 ->
原创不易,转载请注明出处,互相尊重劳动成果,谢谢!
三. MCU 软件设计构建
1. MCU核心温度采样
先实现基于片内ADC采样核心温度的功能,数据采样使用定时采样方式,采样数据基于DMA传输,减少CPU占用。
(1)设计框架
H743内部有三个独立的ADC转换器,除了能够采样连接到外部的模拟引脚外,还有三个内部的模拟采样通道,分别为核心温度、参考电压、VBat电压。

所使用的开发板上,有一个可调电阻连接到了PC3引脚,查DataSheet可知,该引脚可作为 ADC3 的 Channel 1 使用:

因此在建立片内采样驱动时,使用 ADC3 作为采样ADC,分别采样:
* 外部引脚PC3上的电压数值
* 内部参考电压
* 内部温度传感器
* VBAT电压
四路模拟信号数值。采样结果通过DMA传输保存到变量中。
采样使用定时100毫秒采样一次,既10Hz采样率。每次连续采样上述四个通道后,触发处理信号,通知检测任务,处理采样数据,并通过串口传输出去。
(2) 片内ADC初始化与驱动
片内 ADC3 的初始化,基于LL固件库接口,参考LL库中关于ADC的使用例程移植改造而来。初始化过程中,需要注意的是对于上述四个采样通道的设置。
目前仅在启动后的初始化中做一次通道的配置,之后运行不再动态改变,因此配置过程比较简单,基本是先配置通道,再启动ADC,之后运行过程中不再配置,因此不需要做配置时的复杂判断逻辑。而在运行过程中动态切换通道配置时,是需要先停止ADC,完全停止后再配置通道,之后再开启采样的。
通道配置中,采样模式设置为软件触发而不是连续自动触发,以满足10Hz的采样率控制;
调用 LL_ADC_REG_SetSequencerLength 接口,设置总采样通道数量为 4 ;
要使能三个内部采样通道,需要调用接口 LL_ADC_SetCommonPathInternalCh,允许对指定通道进行采样;
最后,定义四个采样通道的顺序。
通道配置代码如下:
if ((LL_ADC_IsEnabled(TEMP_ADC) == 0) ||
(LL_ADC_REG_IsConversionOngoing(TEMP_ADC) == 0) )
{
LL_ADC_REG_SetTriggerSource(TEMP_ADC, LL_ADC_REG_TRIG_SOFTWARE);
LL_ADC_REG_SetOverrun(TEMP_ADC, LL_ADC_REG_OVR_DATA_OVERWRITTEN);
LL_ADC_REG_SetSequencerLengt

本文详细介绍了如何在树莓派4配合STM32H7微控制器上实现核心温度、参考电压和VBat电压的实时采样,利用DMA降低CPU负担,并通过定时触发和串口传输数据。同时讨论了STM32H7的DMA配置挑战和自定义ADC驱动。
最低0.47元/天 解锁文章
990

被折叠的 条评论
为什么被折叠?



