STM32开发板入门教程 - 内部温度传感器

发布者:正在搬砖的河马71最新更新时间:2016-06-30 来源: eefocus关键字:STM32  入门教程  温度传感器 手机看文章 扫描二维码
随时随地手机看文章

废话少说 先看看他的参数
1.  STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量;
2.  测量范围–40~125℃,精度±1.5℃。
3.  温度传感器产生一个随温度线性变化的电压,转换范围在2V < VDDA < 3.6V之间。

转换公式如下图所示:

呵呵 其实 写代码的时候 公式直接简化就得啦  如果测量要求不怎么高的话 呵呵(其实高也高不了 呵呵)
我们都喜欢简单 简单明了  嘿嘿
简化的公式:  vu16 Temperature= (1.42 - ADC_Value*3.3/4096)*1000/4.35 + 25;

呵呵  重新说一下 过程:
1. 初始化ADC  初始化DMA (大家可以参考马七的ADC教程 点击这里
2.  ADC_TempSensorVrefintCmd(ENABLE);   这个要开启哦  使能温度传感器和内部参考电压通道 
3. 简单的数字滤波一下检测到的ADC的值 
4. 按照刚才列出的公式计算  就OK啦 呵呵 


第二步是做什么的呢?  看这个图就晓得啦
贴一下初始化的函数

/*******************************************************************************
* Function Name  : ADC_Configuration
* Description    : ADC_Configuration
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void ADC_Configuration(void)
{
  /* DMA1 channel1 configuration ----------------------------------------------*/
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADCConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = 1;
  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);
  
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);
     
  /* ADC1 configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);
  /* ADC1 regular channel14 configuration */ 
  ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);
  /* Enable the temperature sensor and vref internal channel */ 
  ADC_TempSensorVrefintCmd(ENABLE); 
  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);
  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));
  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */ 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

 


这个是抄袭马七的均值数字滤波函数 呵呵

/*******************************************************************************
* Function Name  : ADC_Filter
* Description    : ADC_Filter
* Input          : None
* Output         : None
* Return         : ADC Converted Value
*******************************************************************************/
u16 ADC_Filter(void)
{
    u16 result=0;
    u8 i;
    for(i=16;i>0;i--)
    {
        Delay_Ms(1);
        result += ADCConvertedValue;
    }
    return result/16;
}

 


转换结果 往串口发送显示 (写的很烂哈)

   ADC_Value = ADC_filter();
    
    vu16 Temperature= (1.42 - ADC_Value*3.3/4096)*1000/4.35 + 25;
    ADC_Value = Temperature;
                   
    a = ADC_Value/1000;
    b = (ADC_Value - a*1000)/100;
    c = (ADC_Value - a*1000 - b*100)/10;
    d = ADC_Value - a*1000 - b*100 - c*10;
                       
    Uart1_PutString("STM32 Chip Temperature = ",strlen("STM32 Chip Temperature = "));
    Uart1_PutChar(a+'0');
    Uart1_PutChar(b+'0');
    Uart1_PutChar(c+'0');
    Uart1_PutChar(d+'0');
    Uart1_PutString(" C/n",strlen(" C/n"));

关键字:STM32  入门教程  温度传感器 引用地址:STM32开发板入门教程 - 内部温度传感器

上一篇:STM32开发板入门教程(六) - I2C--24Cxx
下一篇:STM32笔记---DMA(USART)的演示

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

加强STM32生态系统建设 MadeForSTM32质量标志势在必行
ST合作伙伴计划成员可提交支持STM32开发的产品给意法半导体评估 评审通过后,授权合作伙伴的产品将获得MadeForSTM32标志,代表意法半导体认可产品的性能、客户支持和产品维护 产品标志给生态系统产品开发者带来推广机会,并促进STM32开发者对生态建设的参与度 横跨多重电子应用领域的全球领先的半导体供应商意法半导体 将发布MadeForSTM32** 质量标志,从而进一步提高STM32*微控制器产品家族的市场号召力。经评审合格后,ST开发生态系统合作伙伴的产品可获得此标志。 微控制器是各种智能产品的微型电子“大脑”,微控制器应用工程师依赖开发生态系统提供配置和开发工具、即用型软件示例、软件库以及电路板,帮助他
[嵌入式]
加强<font color='red'>STM32</font>生态系统建设 MadeForSTM32质量标志势在必行
STM32时钟体系结构
STM32的时钟体系可以直接以图概括(摘自STM32F10X参考手册) 下面就此图做分析 1. STM32输入时钟源 1.1 时钟源的作用 无论是小型单片机还是像STM32这样高级单片机,它们工作的核心都是大规模的时序逻辑电路,而驱动时序逻辑电路的关键则是准确而又稳定的时钟源。它的作用就像小学在操场上做广播体操时候播放的背景音乐,用于协调和同步各单元运行,为时序电路提供基本的脉冲信号。 1.2 STM32时钟源的设计 在51单片机中,一般都外接一个11.0592MHz的晶振,注意,提供时钟的不是晶振,而是RC时钟电路,而晶振只是时钟电路的元件之一。同理,在STM32中,时钟源也是由RC时钟电路产生,与51单片机的区别是区别在于
[单片机]
STM32 之 NVIC(中断向量、优先级) 简述
一、背景 需要使用STM32的CAN进行通信,经过一系列配置后,已可正常收发,还剩下一个CAN通信的错误处理。可错 误中断使能寄存器已经配置使能了,出错后就是无法进入 CAN1_SCE_IRQHandler 中断。(让CAN通信出错的的 办法很简单,将 CAN_H 与 CAN_L 直接短接,然后让其发送数据,正常情况下,就会触发错误中断了,发送错 误寄存器会瞬间加至 128 ,如果继续发,每发一次,发送错误计数器会+8,直到256,然后CAN节点即会进入离 线状态,也就是 Bus off 状态)。 一步一步查,才发现, CAN1_SCE_IRQn 的M3内核中断没有开,也就是NVIC相关配置。对于N
[单片机]
<font color='red'>STM32</font> 之 NVIC(中断向量、优先级) 简述
STm32 使用 stm32cube GPIO 点亮 led 的
一、API说明 HAL库一共包含如下6个IO操作函数: 1、读取某个引脚的电平状态: HAL_GPIO_ReadPin() 2、写入某个引脚的电平状态: HAL_GPIO_WritePin() 3、翻转某个引脚的电平状态: HAL_GPIO_TogglePin() 4、锁定某个引脚的配置状态(直到下次复位): HAL_GPIO_LockPin() 5、外部中断服务函数: HAL_GPIO_EXTI_IRQHandler() 6、外部中断回调函数: HAL_GPIO_EXTI_Callback() 具体使用方法参见 STM32F4xx HAL驱动说明书 。 二、GPIO使用示例 示例功能:使用按键(PC13)翻转LED(PA5)
[单片机]
<font color='red'>STm32</font> 使用 stm32cube GPIO 点亮 led 的
为您的应用选择正确温度传感器
如果您要进行可靠的温度测量,就需要为您的应用选择正确的温度传感器。热电偶、热敏电阻、铂电阻(RTD)和温度IC是测试中最常用的温度传感器。    热电偶 热电偶是温度测量中最常用的传感器。其主要好处是宽温度范围和适应各种大气环境,而且结实、价低,无需供电,尤其最便宜。热电偶由在一端连接的两条不同金属线(金属A和金属B)构成,如图1所示。当热电偶一端受热时,热电偶电路中就有电势差。可用测量的电势差来计算温度。 不过,电压和温度间是如图2所示的非线性关系,温度变化时电压变化很小。例如J型热偶在0℃时产生的电压为50mV,每1℃的温度变化只产生5mV量级的电压变化。您需要用精密的测量设备来测量如此小的电压。此外,热偶也是最不灵
[测试测量]
为您的应用选择正确<font color='red'>温度传感器</font>
STM32PWM配置详解笔记
关于STM32的PWM模式配置 ,核心代码如下,以原子的mini板STM32F103RCT6为例子 void TIM1_PWM_Init(u16 arr,u16 psc)//定时器1的PWM初始化 { /*结构体变量定义*/ GPIO_InitTypeDef GPIO_Initstrue; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstrue; TIM_OCInitTypeDef TIM_OCInitstrue; /*-------------*/ /*开启TIM1时钟,配置对应管脚(PA8)为复用输出*/ RCC_APB2PeriphClockCmd(RCC_APB2Per
[单片机]
STM32PWM配置详解笔记
STM32笔记记录3
高级控制定时器(TIM1 和TIM8)   TIM1和TIM8定时器的功能包括: ● 16位向上、向下、向上/ 下自动装载计数器 ● 16位可编程( 可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535 之间的任意数值 ● 多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 ● 死区时间可编程的互补输出 ● 使用外部信号控制定时器和定时器互联的同步电路 ● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 ● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态 ● 如下事件发生时产生中断/DMA : ─ 更新:计数器向上溢出/ 向下溢出,
[单片机]
<font color='red'>STM32</font>笔记记录3
纤巧、24 位、4 通道增量累加ADC具有校准的温度传感器和Easy Drive输入电流消除技术
2006 年 11 月 28 日 - 北京 - 凌力尔特公司( Linear Technology Corporation )推出 4 通道增量累加模数转换器( ADC ) LTC2492 ,该器件在纤巧的 4mm x 3mm DFN 封装中集成了一个温度传感器和一个新颖的前端设计。 LTC2492 的 Easy Drive TM 设计产生的平均差分输入电流为零,因此无需内部缓冲器就可测量高阻抗输入电源。这个已获专利的采样电路简化了前端信号调节电路的设计,并允许直接用电桥、 RTD 、热电耦和高阻抗传感器驱动该 ADC 。轨至轨输入信号可以直接数字化,同时保持卓
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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