STM32之ADC_3(内部通道)

发布者:老卫最新更新时间:2018-05-13 来源: eefocus关键字:STM32  ADC  内部通道 手机看文章 扫描二维码
随时随地手机看文章

ADC的内部通道: 
这里写图片描述 
STM32的ADC除了可以用外部通道来采集外部模拟电压信号之外,还有两个内部通道16和17。其中通道16是连接至芯片上的温度传感器,通道17是连接至内部电源模块.(所以这两个通道可以用来检测STM32芯片d额温度和电源状态,就可以检测芯片运行的状态啦!)

温度检测实例: 
通道16是把内部温度传感器输出的模拟电压转换成数字值,通过公式运算我们就可以得到温度值.内部温度传感器支持的温度范围从 -40 至 125摄氏度.精度是比较差的,所以只适合检测温度的变化,并不适合做绝对的温度检测.(如果需要测量精确的温度,可以使用一个外置的温度传感器)

main函数: 
/用于存放ADC1转换的值/ 
extern __IO u16 ADC_ConvertedValue; 
/温度值/ 
u16 Current_Temp;

int main(void) 

/* USART1 config 115200 8-N-1 */ 
USART1_Config(); 
Temp_ADC1_Init();

while (1)

{

Delay(0xffffee); // 延时


Current_Temp=(V25-ADC_ConvertedValue)/Avg_Slope+25;


printf("\r\n The current temperature= %3d ℃ \r\n,Current_Temp);



main函数里面配置好串口1以及ADC1的通道16后,ADC转换的值就被DMA传输到ADC_ConvertedValue变量里面。然后就可以往串口不断更新温度数据了. 

**根据STM32内部温度传感器检测温度的计算公式: 

温度 = {(V25 - Vsense)/Avg_Slope}+25** 

Vsense:通过ADC通道16检测的ADC转换值(变量)


V25:是25度时的ADC转换值(常量)


Avg_Slope:是温度与Vsense曲线的平均斜率(单位为 mV/ °C 或 μV/ °C)(常量)


Ps: 

其中V25以及Avg_Slope都是根据数据手册定义好的宏(少了个#,好像会放大就不写了) 

define V25 0x6EE 

define Avg_Slope 0x05


ADC初始化: 

void Temp_ADC1_Init(void) 

ADC1_GPIO_Config(); 

ADC1_Mode_Config(); 

DMA以及ADC的配置: 

static ADC1_Mode_Config(void) 

DMA_InitTypeDef DMA_InitStructure; 

ADC_InitTypeDef ADC_InitStructure; 

/这里是DMA的配置/ 

DMA_DeInit(DMA1_Channel1);


DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//ADC1的地址    

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//内存地址  

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设为数据源

DMA_InitStructure.DMA_BufferSize = 1;//DMA缓存大小

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//内存地址固定

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设传输数据单位半字

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存传输数据单位半字

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循环传输

DMA_InitStructure.DMA_Priority = DMA_Priority_High;//优先级设置为高

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //关闭内存到内存的传输

DMA_Init(DMA1_Channel1, &DMA_InitStructure); //填充DMA,配置为DMA1的通道11


DMA_Cmd(DMA1_Channel1, ENABLE); //使能通道11


/*这里是ADC的配置*/

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立的ADC模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE ;//关闭扫描模式(扫描一般用于多通道采集)

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//开启连续转换模式(就是不停的进行ADC转换)

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //不使用外部触发转换

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//采集的数据右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1; //要转换的通道数量是1个

ADC_Init(ADC1, &ADC_InitStructure);//填充ADC1

RCC_ADCCLKConfig(RCC_PCLK2_Div8); //设置ADC时钟的分频,为PCLK2的8分频,就是9HZ 72/8 = 9

ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);//配置ADC1的通道16为239.5个采样周期


ADC_TempSensorVrefintCmd(ENABLE);//使能温度传感器和内部参考电压

/*这里是ADC的复位校准操作*/

ADC_DMACmd(ADC1, ENABLE);//使能ADC1的DMA

ADC_Cmd(ADC1, ENABLE);   //使能ADC1


ADC_ResetCalibration(ADC1);//复位ADC1校准寄存器

while(ADC_GetResetCalibrationStatus(ADC1)); //等待校准寄存器复位成功


ADC_StartCalibration(ADC1);//ADC1校准

while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准成功


ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使用软件触发ADC转换,因为没有采用外部触发



温度检测的ADC初始化和ADC采集外部数据时的差不多,只有以下两条有改变: 

ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5) 

配置ADC通道16,把周期改为ADC_SampleTime_239Cycles5(239.5周期),这个周期是根据手册推荐的内部温度传感器ADC转换时间为17.1us,这里为28us.


ADC_TempSensorVrefintCmd(ENABLE); 

这是一个库函数,功能是使能或关闭内部温度传感器.它是使用内部温度传感器时必须调用的,默认的温度传感器shi不开启的,当然也就测量不到正确的温度值.


关键字:STM32  ADC  内部通道 引用地址:STM32之ADC_3(内部通道)

上一篇:STM32F407的ADC之DMA多通道+温度
下一篇: 经典STM32 ADC多通道转换

推荐阅读最新更新时间:2024-03-16 16:02

应用笔记 | 关闭SPI会导致WRPERR错误的问题分析
01 引言 在STM32的应用中,SPI算是用的比较多的外设了,也是单片机最常见外设之一。客户说它执行了关闭SPI的代码,竟然会导致Flash中的WRPERR标志置位,致使应用碰到一些问题。这就奇怪了,SPI和内部Flash看起来是风马牛不相及的事情,为什么会发生这种事呢?一起来看看吧。 02 问题 2.1 问题起源 客户在使用STM32L072RBT6的时候,使用STM32 CubeL0库,在程序编写时,发现执行关闭SPI代码时,会导致Flash的写保护错误标志WRPERR置位,导致其后面准备写EEPROM的时候,就无法对EEPROM写入了。 客户使用两个标志flag1和flag2,来观察WRPERR标志的变
[单片机]
应用笔记 | 关闭SPI会导致WRPERR错误的问题分析
【STM32F103攻城笔记】STM32之MDK(Keil)环境搭建(一)
开始前需准备的工具和文件: 一、keil安装好。(要支持ARM的) 二、去下载STM32f103的芯片包,后缀为pack (因为一般安装keil不会自带stm32的芯片包) 三、去官网或百度下个STM32的库函数文件。 上面二 和 三的文件如下图: 开始了! 第一步:打开Keil,按图操作 出现以下界面,并继续操作 选择刚才下载的芯片pack 出现以下信息 说明stm32芯片已经安装成功! 最后退出到开始打开页面! 下一篇就可以开始搭工程了!
[单片机]
【STM32F103攻城笔记】<font color='red'>STM32</font>之MDK(Keil)环境搭建(一)
STM32—数组作为被调用函数的入口参数时定义成指针
STM32—数组作为被调用函数的入口参数时,要两个条件, 1:数组首地址 2:数组长度 在被调用函数中,比如把数据保存到数组pbuffer 中,那么在入口参数定义时要定义成指针u8 *pbuffer, 1 而在调用时,比如要保存到tab 中,要在入口参数处强制转换成(u8 *)tab,
[单片机]
<font color='red'>STM32</font>—数组作为被调用函数的入口参数时定义成指针
STM32生态系统工具和软件介绍
STM32能被这么多开发者认可,它的强大生态系统起了关键作用。本文围绕STM32生态各软件工具进行相关描述,其中包含一些技术细节。 一、STM32生态系统总预览STM32提供了全套开发工具,以及开发所需的软件包,下面看一张图,从全局来了解STM32生态系统工具和软件: 主要分为两大类:1.软件工具:即左边部分的STM32CubeMX、 CubeIDE、 CubeProgrammer、 CubeMontor等。 2.嵌入式软件包:STM32CubeMCU Packages 和 扩展软件包CubeExpansions. STM32Cube生态系统几个特点: 免费自由使用; 接口一致,方便移植 可裁剪、可扩展 易使用和理解 节约
[单片机]
<font color='red'>STM32</font>生态系统工具和软件介绍
DSP与STM32区别
关于DSP和普通51 AVR还有STM32的区别 DSP是为运算而生的芯片,他最强大的地方就在与它的数**算性能,那是由它的指令集支持的。那些拿DSP和STM32比较的,省省吧,如果你两者都熟悉你就知道根本没啥好比的, 如果我需要很多高级的接口,比如以太网和USB,那么我自然选STM32,如果我需要实现一些算法,那肯定会选DSP。如果你对运算速度不敏感,反正72M的速度已经比原先单片机快很多了,那当然是看你熟悉哪个,哪个价格比较好,支持比较好。 从51 AVR到DSP最大的障碍   1、应该是编译环境吧,TI的DSP都用的是CCS,CCS界面和原先IAR区别不是一般的大,比如程序导入,比如观察变量,比如烧写FLASH
[单片机]
stm32-NRF24L01通信
////////////////////////////////////////// 引脚分布, IRQ PA2 CE PA4 CS PA3 SPI1 (记住是SPI1的接口) SCK PA5 MISO PA6 MOSI PA7 //////////////////////////////////////// 接好引脚,初始化好就可以使用了。记住,里面的文件配置都不用改,改引脚是ok 的 http://download.csdn.net/download/hes_c/10140988 这是RX初始化 NRF24L01_Init(); while(NRF24L01_Check()) { led_on
[单片机]
超低功耗、18位、差分PULSAR ADC驱动(CN0237)
电路功能与优势   图1所示电路使用超低功耗、18位1 MSPS ADCAD7982 ,由低功耗全差分放大器ADA4940-1来驱动。低噪声精密5.0V基准电压源 ADR395用于提供该ADC所需的5V电源。图1所示的所有IC均采用3 mm × 3 mm LFCSP或3 mm × 5 mm MSOP小型封装,从而有助于降低电路板成本和空间。   电路中ADA4940-1的功耗不到9 mW。18位1 MSPS AD7982 ADC的功耗仅7 mW (1 MSPS时),远低于市面上的同类ADC。此功耗也随吞吐量而变化。ADR395功耗仅为0.7mW,使系统总功耗低于17 mW。   图1 高性能18位差分ADC驱动器(简易
[模拟电子]
超低功耗、18位、差分PULSAR <font color='red'>ADC</font>驱动(CN0237)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved