STM32的ADC模块是一个12位的逐次逼近型模拟数字转换器。他有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式储存在16位数据寄存器中。
其中,ADC的供电要求是2.4V到3.6V,ADC输入范围:VREF-LDO造成不同的参考电压值,虽然STM32是可以正常工作,但是参考电压的不同,也就造成我们使用ADC采集外部模拟信号值时,无法还原真实数据。所以,在这里介绍一下STM32的内部2个ADC通道。
STM32的ADC可以直接测量2个内部信号源,其中一个是温度传感器,一个是内部参考电压。
其中,温度传感器和通道ADCx_IN16相连接。内部参考电压VREFINT和ADCx_IN17相连接。
根据数据手册中的数据,这个参考电压值的典型值为1.20V,最小值为1.16V,最大值为1.24V。这个电压基本不随外部供电电压的变化而变化。
其使用的具体为:在测量某个通道的电压值之前,先读出ADCx_IN17引脚参考电压的ADC的测量数值,记为AD_REFINT,再读出要测量通道的ADC的转换数值,记为AD_CHX。则要测量的电压数值为:
V_CHX=V_REFINT*(AD_CHX/AD_REFINT)
其中,V_REFINT为参考电压:1.2V(典型值)。
在STM32提供的库函数中,如果要开启内部参考电压功能,使用的库函数和开启温度内部温度传感器的函数是一样的,只是在后面采集ADCx_Channel_x通道的时候不同而已。开启函数为: ADC_TempSensorVrefintCmd(ENABLE);
注:必须设置TSVREFE位激活内部通道:ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换。
关于操作源码,可以参考正点原子不完全手册 第二十一章 内部温度传感器实验,对于内部电压值的测量和温度传感器的方法是一样的,只是使能的ADC通道不一样,其他都是一样的,所以,可以直接参考。
关键字:STM32 电池电压值 参考电压
引用地址:
STM32测量外部电池电压值时参考电压解决方法
推荐阅读最新更新时间:2024-03-16 16:23
STM32的USARTx中u3_printf函数解析
我们在STM32中常常使用printf来将信息打印至PC端控制台上。但是有这样一种函数,它可以把数据以我们指定的格式装进字符串中——sprinft和vsprintf。 ⑴ sprintf函数使用的方式如下: ① 将多个参数以指定格式写入字符串 int a=1,b=2; char s ; sprintf(s, a=%d,b=%d ,1,2); puts(s); 输出结果:a=1,b=2 ② 错误使用:在函数封装中使用 void Myprintf(const char* fmt,...) // 传递个数不定的参数 { char s ; sprintf(s,fmt); // 出现错误 puts
[单片机]
STM32 | 基于STM32实现的普通灯泡调光控制器
功能 用STM32控制一个普通灯泡的亮度,一路开关控制普通灯泡电源的通断,另外两路开关分别控制普通灯泡亮度的增加和减小。 调光控制器的原理 通过STM32控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。 所以需要在交流电的个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。 调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。这就需要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。
[单片机]
STM32新建keil工程具体步骤(详细)
1. 新建本地工程文件夹 在本地电脑上新建一个“工程模板”文件夹,在它之下再新建 6 个文件夹: 2.添加库文件到相应文件夹 把 ST 标准库必要的文件复制到工程模版对应文件夹的目录下 3.KEIL5新建工程 打开 KEIL5,新建一个工程,文件名自拟,工程放在Project目录下。 保存后弹出芯片选择,要根据自己芯片的型号提前按照PACK包,选择型号后点击OK。 随后弹出在线添加库文件,关闭即可。 4.添加组文件夹 在新建的工程中添加常用的文件夹,用来存放不同的文件。 5.添加文件 在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件即可。 6.配置魔术棒选
[单片机]
STM32串口发送十六进制的数组
通过串口发送十六进制的数组的方法有很多种,这里我介绍一种最简单也最使用的一种方法。 我这里使用的板子是STM32F103RCT6,使用串口2,usart2.c的代码如下: #include delay.h #include usart2.h #include stdarg.h #include stdio.h #include string.h #include timer.h //串口接受缓存区 u8 USART2_RX_BUF ; //接受数据缓冲,最大为USART2_MAX_RECV_LEN个字节 u8 USART2_TX_BUF ; //发送数据缓冲,最大为USART2
[单片机]
一种基于STM32利用始终定时实现延迟的方法
传统上我们常用delay函数进行延迟,然而这种方式有一个很大的弊端那就是需要占用相当长的时钟周期,此时原本该用于计算各类复杂算法的计算内核都要随着系统一起停下来,很不经济也容易造成问题处理不及时的后果。 事实上,我们只需要利用时钟中断的方式,利用一个全局变量作为标志为即可具体程序如下: u8 time3_tmp = 0;//时钟标志 u8 fun_flag;//服务函数标志 void Timer3_Config(void)//配置 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStruture; ////////重定义结构体 TIM_DeInit(TIM3);
[单片机]
意法半导体发布远距离无线微控制器,提高智能计量、智能建筑和工业监控的连接能效
新的STM32系统芯片低功耗,支持多种无线通信协议,简化各种用途的无线系统设计 中国,2023年11月24日 - 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;) 发布了一款新的融合无线芯片设计专长与高性能、高能效STM32系统架构的微控制器(MCU)。全新的节能功能将这款无线MCU的电池续航时间延长到15年以上。 在远距离部署的应用领域,包括能源计量、监控设备、报警系统、执行器,以及智能建筑、智能工厂和智能城市的传感器,STM32WL3无线MCU的特别有用,有助于控制功耗,并给工作划分优先级。这些高能效MCU可以改善用户体验,提供服务,减少环境足迹。通过
[嵌入式]
stm32 485串口数据的收发
//串口初始化: #define EN_USART2_RX 1 void RS485_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOG, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); RCC
[单片机]
基于STM32的实时心率检测仪设计
一、开发环境介绍 主控芯片: STM32F103ZET6 代码编程软件: keil5 心率检测模块: PulseSensor WIFI模块: ESP8266 --可选的。直接使用串口有线传输给上位机也可以。 上位机: C++(QT) 设计的。 支持PC机电脑、Android手机显示。 与上位机的传输协议: 支持串口传输、WIFI网络传输两种。 如果是PC就可以直接连接串口传输数据,如果不方便可以直接通过WIFI---TCP协议传输。 二、PulseSensor心率模块介绍 PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器。 可以将其佩戴于手指、耳垂、手腕等处,通过杜邦线--导线将引脚连接到单片机,可将采集到
[单片机]