最近在使用STM32L011的ADC时,发现ADC采样值极其不准确。经过查找资料,和反复测试,总算摸出点门道。
如将VDDA接到VDD,那么电源的波动会极大的影响ADC精度。
不过使用内部参考电压可以计算实际的VDDA电压。
说明:
VREFINT_CAL:芯片出厂时固化在存储器中的。使用时需要通过软件读取。
VREFINT_DATA:ADC读取VREFINT(内部参考电压通道ch17)得到的值,每次采样序列,将ch17一并采集,用来后续的AD值补偿计算。
如何读取VREFINT_CAL?
首先,找到芯片的datasheet,是所使用的那款芯片的数据手册,因为同一系列的不同芯片,可能存在区别。例如,我需要找到的datasheet标题是这个
搜索:VREFINT_CAL
得到VREFINT_CAL的地址后,使用语句
#define VREF_CAL *(__IO uint16_t *)(0x1FF80078)
然后data1 = VREF_CAL;就可以了。
怎样计算得到一个与电源电压无关的绝对精确的AD值?
使用这个公式就可以了。
说明:
VREFINT_CAL:使用前述的读取语句data1 = VREF_CAL;从芯片存储器中读出;
ADC_DATAx:你需要测量的通道,使用ADC读出;
VREFINT_DATA:前述,内部参考电压通道(ch17)读出的值;
full_SCALE:上面已经解释很好了。取值2^n-1,n是分辨率。
关键字:STM32 ADC采样
引用地址:
STM32 ADC采样不准怎么办
推荐阅读最新更新时间:2024-03-16 16:24
stm32的定时器使用方法
STM32学习笔记(六)----TIM (待补充) 1、使能TIM时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM*,ENABLE); 2、基础设置 TIM_TimeBaseStructure.TIM_Period 计数值 TIM_TimeBaseStructure.TIM_Prescaler 预分频,此值+1为分频的除数 TIM_TimeBaseStructure.TIM_ClockDivision = 0 时钟因子 待做进一步说明 TI
[单片机]
玩转STM32CubeMX | STM32内部FLASH
1.内部FLASH简介 之前的文章中介绍过STM32F1利用SPI与外部FLASH(W25QXX芯片)通讯的例程,本例程将介绍STM32F1的内部FLASH,通过内部FLASH实现数据读写操作。 不同型号的STM32,其FLASH容量也有所不同,最小的只有16K字节,最大的则达到了1024K字节。此处我们使用的是STM32F103ZET6,其FLASH容量为512K字节,属于大容量产品,大容量产品的闪存模块组织图如下图示 STM32F1的闪存模块由:主存储器、信息块和闪存存储器接口寄存器3部分组成 *主存储器:用来存放代码和数据常量,起始地址是0x08000000,BOOT0和BOOT1都接GND时,就是从该起始地址运行
[单片机]
STM32跑马灯实验——库函数版本
1.编写led.h文件 #ifndef __LED_H #define __LED_H //如果标识符__LED_H没有被定义,则定义标识符__LED_H, void LED_Init(void); #endif 3,编写led.c文件 #include led.h #include stm32f4xx.h void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GP
[单片机]
STM32 GPIO寄存器的相关知识
一、前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍。 GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析; GPIO工作模式中主要介绍GPIO应用在不同的使用场景下,GPIO端口的静态特征配置和动态的工作模式,同时对信号的工作流进行了分析。 这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对GPIO最底层的一些配置和工作原理有更好的认识,有助于加深对GPIO基本结构及工作模式的理解,同时对后续介绍到的GPIO在应用设计中有较好的帮助。 二、寄存器概述 图1为STM32的GPIO模块中寄存器的概述,总共有5种类型的寄存
[单片机]
STM32菜鸟成长记录---窗口看门狗
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。 图1 窗口看门狗的 上窗口就是配置寄存器WWDG- CFR里设定的W ; 下窗口是固定的0x40; 当窗口看门狗的计数器在上窗口值之外,或是低于下窗口值都会产生复位。 图2 && 上窗口的值可以只有设定,7位二进制数最大只可以设定为127(0x7F),最小又必须大于下窗口的0x40,所以其
[单片机]
stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断。 如果设计代码时不希望定时器配置完成后,立刻进入中断,可以在定时器配置完成后,立刻清除UIF标志位(TIMx- SR &= 0xFFFE) ,再使能定时器更新中断。比如用库函数这么写: TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能TIM4的更新中断 TIM_Cmd(TIM4, ENABLE); 但又发现个特别奇怪的问题,TIM_ClearITPen
[单片机]
基于STM32的MIT-BIH心电数据的D/A回放
0 引言 心电信号是人类最早开展研究并应用于临床医学的生物电信号之一,通过对心电信号的分析处理能有效地预测心脏疾病。如何利用心电数据开发研究相关的医疗设备是对科研人员至关重要。心电数据的回放就是将原有的存储的MIT-BIH心电数据,根据其存储的格式,利用设计的系统通过D/A转换最终从终端回放出模拟信号。本文介绍基于ARM Cortex-M3内核的STM32微控制器作为主控嵌入式芯片的心电信号数据回放的设计方法。 1 工作原理和硬件设计 上位机应用程序读取心电数据库中一文件,利用设备驱动程序与D/A回放模块设备进行通信。通过USB总线不断向硬件设备发送数据,设备接收到的原始数据,利用DMA传输方式,连续、不丢失地传送到DAC模
[单片机]