STM32F407 内部参考电压校准实现 HAL库

校准的是什么?

首先,这个校准机制校准的是系统中电源电压VDD,不校准的情况下我们默认它是3.3V

怎么校准?

STM32F407 提供了一个内部固定参考电压VREFINT ,这是一个精确的1.21V 固定电压源。在芯片制造时,厂家将VREFINT 在3.3V的电源电压下的ADC采样值记录在了flash地址0x1FFF7A2A

什么意思呢?厂家出厂的时候给了一个很精确的3.3V电源作为VDD,并记录了在该精准3.3V下,内部那个精确1.21V 固定电压源的ADC采样值,并记在了0x1FFF7A2A这个地方。我们实际使用的时候VDD不一定是精准的3.3V,而内部那个1.21V 电压源是精确的,0x1FFF7A2A这个地方记录的ADC采样值也是精确的,这样就可以用这两个精确的值去计算出精确的VDD值(这里好好体会一下)

怎么计算?

将flash地址0x1FFF7A2A中记录的uint16值记为VREFINT_CAL,将ADC在当前这个需要校准的VDD下采样的内部那个精确1.21V固定电压源的ADC采样值记为VREFINT_ADC,那么当前的VDD如下:

体会一下,假如VREFINT_ADC大于VREFINT_CAL,那不就是当前的参考电压VDD比出厂时的精确的3.3V小了?反之亦然(这里要结合逐次比较型ADC的采样原理理解)

代码实现

核心的也就下面这几行

复制代码
FLASH_READ_boo(0x1FFF7A2A, &VREFINT_CAL, 1);

VREFINT_ADC = ADC1_sampling.average_Vrefint;

校准后的ADC采样值 = ADC采样值 * VREFINT_CAL/VREFINT_ADC

如果对ADC采样过程不清除可以参考我之前写的STM32 f407 多通道ADC采集+DMA传输 基于HAL库和Cubemx配置_stm32f407 adc dma-CSDN博客

对flash读写不清楚的话可以参考另一篇STM32 使用HAL库实现flash读写_stm32 hal flash-CSDN博客

体会

实测下来,以上方法校准VDD用处不大,校准前和校准后基本也就差个0.1%~0.3%,VDD在大部分情况下还是比较准的,不如直接校准零点来的直接。

补充:后续测试发现零点偏移也很小,很多端口连0.1%的偏差都不到,公司的控制器做的还是可以的,给硬件的同事点个赞!

相关推荐
BreezeJuvenile15 分钟前
ADC_案例练习:独立模式多通道采集
stm32·单片机·adc·多通道采集·dma辅助
代码游侠16 分钟前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
Joshua-a35 分钟前
高云FPGA在线调试/逻辑分析仪简要使用流程
嵌入式硬件·fpga开发·高云
国科安芯40 分钟前
高轨航天器抗辐照MCU选型约束分析
单片机·嵌入式硬件·性能优化·机器人·安全性测试
CS Beginner1 小时前
【单片机】嵌入式显示屏开发框架:QT、SDL、LVGL 深度解析
单片机·嵌入式硬件·qt
YouEmbedded1 小时前
解码从架构到嵌套向量中断控制器(NVIC)
stm32·软件架构·mcu中断·exti外设·启动文件分析
亿道电子Emdoor2 小时前
【Altium】原理图中网络标签作用范围的设置
单片机·嵌入式硬件
风行男孩2 小时前
stm32基础学习——串口(USART)的基本使用
stm32·嵌入式硬件·学习
点灯小铭2 小时前
基于单片机的多模式档位调节与过热保护风扇设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
星源~2 小时前
Zephyr - MCU 开发快速入门指南
单片机·嵌入式硬件·物联网·嵌入式开发·zephyr