打印
[STM32F1]

STM32知识点分享+内部温度传感器使用

[复制链接]
1781|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我这次使用的是STM32F103C8T6这款单片机,这款单片机内部也是有温度传感器的,最近我们公司的项目中用到了这种功能,感觉还挺不错的,顺便介绍一下,希望大家批评指导:
       其实温度传感器就是STM32的AD采集功能,温度传感器和通道ADCx_IN16相连接,可以按注入或规则通道对这两个内部通道进行转换。  就是对ADC的16通道进行数据采集,此通道把传感器输出的电压转换成数字值,温度传感器模拟输入推荐采样时间是17.1μs。  
数据手册的中介绍温度传感器的框图如下:

数据手册中还介绍了,使用温度传感器的步骤:

我们可以根据手册中温度传感器的表格,来选择公式中对应参数的值:

理论上具体的知识就这些,然后就是写程序了,当然开始就是AD初始化:
          void  Adc_Init(void)
{   

        RCC->APB2ENR|=1<<2;   
        GPIOA->CRL&=0XFFFF0000;
                 
        RCC->APB2ENR|=1<<9;  
        RCC->APB2RSTR|=1<<9;   
        RCC->APB2RSTR&=~(1<<9);  
        RCC->CFGR&=~(3<<14);  

        RCC->CFGR|=1<<14;               
        ADC1->CR1&=0XF0FFFF;   
        ADC1->CR1|=0<<16;      
        ADC1->CR1&=~(1<<8);   
                                               
        ADC1->CR2&=~(1<<1);  
        ADC1->CR2&=~(7<<17);          
        ADC1->CR2|=7<<17;          
        ADC1->CR2|=1<<20;      
        ADC1->CR2&=~(1<<11);   
        ADC1->CR2|=1<<23;   

        ADC1->SQR1&=~(0XF<<20);
        ADC1->SQR1&=0<<20;               
                 
        ADC1->SMPR1&=~(7<<18);  
        ADC1->SMPR1|=7<<18;     

        ADC1->CR2|=1<<0;          
        ADC1->CR2|=1<<3;      
        while(ADC1->CR2&1<<3);                  
           
        ADC1->CR2|=1<<2;         
        while(ADC1->CR2&1<<2);
}       

然后就是获取ADC值,计算温度的程序:
u16 Get_Adc(u8 ch)   
{
                         
        ADC1->SQR3&=0XFFFFFFE0;
        ADC1->SQR3|=ch;                                              
        ADC1->CR2|=1<<22;      
        while(!(ADC1->SR&1<<1));           
        return ADC1->DR;               
}

u16 Get_Temp(void)
{
        u16 temp_val=0;
        u8 t;
        for(t=0;t<10;t++)
        {
                temp_val+=Get_Adc(TEMP_CH);
                Delayms(5);
        }
        return temp_val/10;
}

由于编译器中文格式跟网页不同,注释的语句复制过来全是乱码,所以就不带注释了,请见谅
通过串口打印采集的电压值和温度值:

这就是我对stm32内部温度传感器的使用,请大家批评指教
评分
参与人数 1威望 +5 收起 理由
mmuuss586 + 5 很给力!
沙发
mmuuss586| | 2017-9-9 11:36 | 只看该作者

不错,谢谢分享;

使用特权

评论回复
板凳
airwill| | 2017-9-10 08:17 | 只看该作者
要注意一下, 这个温度传感器只能用来测量相对变化

使用特权

评论回复
地板
kelly1989|  楼主 | 2017-9-10 21:21 | 只看该作者
airwill 发表于 2017-9-10 08:17
要注意一下, 这个温度传感器只能用来测量相对变化

没错,毕竟时在内部,测得温度都会受器件本身的影响

使用特权

评论回复
5
队长shiwo| | 2017-9-11 08:49 | 只看该作者
不错不错,内部温度,另外个ADCx_IN17是内部参考电压吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

1108

帖子

3

粉丝