ds18b20 读不出温度

2019-07-14 19:36发布

初始化void RCC_HSE_Configuration() 之后,温度就读不出来了,,不初始化void RCC_HSE_Configuration(),,温度读的正常,,,这是为什么
//==================================================================================================
//==================================================================================================
// Name    : systick.c
// Purpose : sysclock
// Version : Ver 1.0
// Author  : Nature Power
// Date    : 20170424
// Hardware: ARM.Cortex M3.STM32F103ZE


#include "System_Main.h"

/*******************************************************************************
* º¯ Êý Ãû         : delay_us
* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱus
* Êä    Èë         : i
* Êä    ³ö         : ÎÞ
*******************************************************************************/
double temper;
void delay_us(u32 i)
{
        u32 temp;
        SysTick->LOAD=9*i;                 //ÉèÖÃÖØ×°ÊýÖµ, 72MHZʱ
        SysTick->CTRL=0X01;                 //ʹÄÜ£¬¼õµ½ÁãÊÇÎÞ¶¯×÷£¬²ÉÓÃÍⲿʱÖÓÔ´
        SysTick->VAL=0;                            //ÇåÁã¼ÆÊýÆ÷
        do
        {
                temp=SysTick->CTRL;                   //¶ÁÈ¡µ±Ç°µ¹¼ÆÊýÖµ
        }
        while((temp&0x01)&&(!(temp&(1<<16))));         //µÈ´ýʱ¼äµ½´ï
        SysTick->CTRL=0;        //¹Ø±Õ¼ÆÊýÆ÷
        SysTick->VAL=0;                //Çå¿Õ¼ÆÊýÆ÷
}

/*******************************************************************************
* º¯ Êý Ãû         : delay_ms
* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱms
* Êä    Èë         : i
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void delay_ms(u32 i)
{
        u32 temp;
        SysTick->LOAD=9000*i;          //ÉèÖÃÖØ×°ÊýÖµ, 72MHZʱ
        SysTick->CTRL=0X01;                //ʹÄÜ£¬¼õµ½ÁãÊÇÎÞ¶¯×÷£¬²ÉÓÃÍⲿʱÖÓÔ´
        SysTick->VAL=0;                        //ÇåÁã¼ÆÊýÆ÷
        do
        {
                temp=SysTick->CTRL;           //¶ÁÈ¡µ±Ç°µ¹¼ÆÊýÖµ
        }
        while((temp&0x01)&&(!(temp&(1<<16))));        //µÈ´ýʱ¼äµ½´ï
        SysTick->CTRL=0;        //¹Ø±Õ¼ÆÊýÆ÷
        SysTick->VAL=0;                //Çå¿Õ¼ÆÊýÆ÷
}

/*******************************************************************************
* º¯ Êý Ãû         : RCC_HSE_Configuration
* º¯Êý¹¦ÄÜ                   : ×Ô¶¨ÒåϵͳʱÖÓ£¬¿ÉÒÔͨ¹ýÐÞ¸ÄPLLʱÖÓÔ´ºÍ±¶ÆµÏµÊýʵÏÖʱÖÓµ÷Õû
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void RCC_HSE_Configuration() //×Ô¶¨Òåϵͳʱ¼ä£¨¿ÉÒÔÐÞ¸ÄʱÖÓ£©
{
        RCC_DeInit(); //½«ÍâÉèRCC¼Ä´æÆ÷ÖØÉèΪȱʡֵ
        RCC_HSEConfig(RCC_HSE_ON);//ÉèÖÃÍⲿ¸ßËÙ¾§Õñ£¨HSE£©
        if(RCC_WaitForHSEStartUp()==SUCCESS) //µÈ´ýHSEÆðÕñ
        {
                RCC_HCLKConfig(RCC_SYSCLK_Div1);//ÉèÖÃAHBʱÖÓ£¨HCLK£©
                RCC_PCLK1Config(RCC_HCLK_Div2);//ÉèÖõÍËÙAHBʱÖÓ£¨PCLK1£©
                RCC_PCLK2Config(RCC_HCLK_Div1);//ÉèÖøßËÙAHBʱÖÓ£¨PCLK2£©
                RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//ÉèÖÃPLLʱÖÓÔ´¼°±¶ÆµÏµÊý
                RCC_PLLCmd(ENABLE); //ʹÄÜ»òÕßʧÄÜPLL
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//¼ì²éÖ¸¶¨µÄRCC±ê־λÉèÖÃÓë·ñ,PLL¾ÍÐ÷
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//ÉèÖÃϵͳʱÖÓ£¨SYSCLK£©
                while(RCC_GetSYSCLKSource()!=0x08);//·µ»ØÓÃ×÷ϵͳʱÖÓµÄʱÖÓÔ´,0x08£ºPLL×÷ΪϵͳʱÖÓ
        }
}


//-----------------------------------------------------------------------------------

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ʱÖÓʹÄÜ

        TIM_TimeBaseStructure.TIM_Period = arr; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ         ¼ÆÊýµ½5000Ϊ500ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂʳýÊýµÄÔ¤·ÖƵֵ  10KhzµÄ¼ÆÊýƵÂÊ  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»

        TIM_ITConfig(  //ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄTIMÖжÏ
                TIM3, //TIM2
                TIM_IT_Update ,
                ENABLE  //ʹÄÜ
                );
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);    //×Ô¼º¼ÓµÄ
        
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖжÏ
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏÈÕ¼ÓÅÏȼ¶0¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //´ÓÓÅÏȼ¶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀ±»Ê¹ÄÜ
        NVIC_Init(&NVIC_InitStructure);  //¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷

        TIM_Cmd(TIM3, ENABLE);  //ʹÄÜTIMxÍâÉè
                                                         
}

void TIM3_IRQHandler(void)   //TIM3ÖжÏ
{   
        
        UART1_SendByte(0x00);
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì²éÖ¸¶¨µÄTIMÖжϷ¢ÉúÓë·ñ:TIM ÖжÏÔ´
                {
                        
//                        UART1_SendByte(0x01);
//                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå³ýTIMxµÄÖжϴý´¦Àíλ:TIM ÖжÏÔ´
//                UART1_SendByte(0x02);
                        temper=readtemp();
                        sprintf(UART1.TxBuff,"µ±Ç°Î¶ÈΪ£º%0.4lf ¡æ ",temper);
                UART1.Length = strlen(UART1.TxBuff);
                for(UART1.Counter = 0;UART1.Counter<UART1.Length;UART1.Counter++)
                {
                        UART1_SendByte(UART1.TxBuff[UART1.Counter]);
                }
//                        UART1_SendByte(0x03);
//                        ADC_value();
                        UART1_SendByte(0x04);
                }
}

//========================================--NO MORE--===============================================

====================================================================================



DS18b20、、、、、、、、、、


#include "System_Main.h"
#include "System_Macro.h"


/*******************************************************************************
* º¯ Êý Ãû         : ds18b20_init
* º¯Êý¹¦ÄÜ                   : IO¶Ë¿ÚʱÖÓ³õʼ»¯º¯Êý           
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void ds18b20_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);

        GPIO_InitStructure.GPIO_Pin=dq;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIO_ds18b20,&GPIO_InitStructure);
}

/*******************************************************************************
* º¯ Êý Ãû         : DQININT
* º¯Êý¹¦ÄÜ                   : ÊäÈëÅäÖà          
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void DQININT()         //ÊäÈëÅäÖÃ
{
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin=dq;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIO_ds18b20,&GPIO_InitStructure);        
}

/*******************************************************************************
* º¯ Êý Ãû         : DQOUTINT
* º¯Êý¹¦ÄÜ                   : Êä³öÅäÖà          
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void DQOUTINT()         //Êä³öÅäÖÃ
{
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin=dq;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIO_ds18b20,&GPIO_InitStructure);        
}

/*******************************************************************************
* º¯ Êý Ãû         : ds18b20init
* º¯Êý¹¦ÄÜ                   : DS18B20³õʼ»¯Ê±Ðò           
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void ds18b20init()
{
        DQOUTINT();//Êä³ö
        ds18b20_dq_L;
        delay_us(480);//ÑÓʱ480΢Ãî        
        ds18b20_dq_H;
        delay_us(480);//ÑÓʱ480΢Ãî
}

/*******************************************************************************
* º¯ Êý Ãû         : ds18b20wr
* º¯Êý¹¦ÄÜ                   : DS18B20дÊý¾ÝʱÐò           
* Êä    Èë         : dat
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void ds18b20wr(u8 dat)
{
        u8 i=0;
        DQOUTINT();//Êä³ö

        for(i=0;i<8;i++)
        {
                ds18b20_dq_L;         //À­µÍ
                delay_us(15);//ÑÓʱ15΢Ãî
               
                if((dat&0x01)==1)
                {
                        ds18b20_dq_H;
                }
                else
                {
                        ds18b20_dq_L;
                }
                delay_us(60);//ÑÓʱ60΢Ãî
                ds18b20_dq_H;
               
                dat>>=1;//×¼±¸ÏÂһλÊý¾ÝµÄ·¢ËÍ        
        }
}

/*******************************************************************************
* º¯ Êý Ãû         : DS18b20rd
* º¯Êý¹¦ÄÜ                   : DS18B20¶ÁÊý¾ÝʱÐò           
* Êä    Èë         : ÎÞ
* Êä    ³ö         : value
*******************************************************************************/
u8 DS18b20rd()
{
        u8 i=0,value=0;

        for(i=0;i<8;i++)
        {
                value>>=1;
                DQOUTINT();//Êä³ö
                ds18b20_dq_L;         //À­µÍ
                delay_us(4);//ÑÓʱ4΢Ãî
                ds18b20_dq_H;
                delay_us(10);//ÑÓʱ10΢Ãî
                DQININT();         //ÊäÈëÅäÖÃ

                if(GPIO_ReadInputDataBit(GPIO_ds18b20,dq)==1)
                {
                   value|=0x80;//¶ÁÊý¾Ý ´ÓµÍλ¿ªÊ¼
                }

                delay_us(45);//ÑÓʱ45΢Ãî
        }

        return value;        
}

/*******************************************************************************
* º¯ Êý Ãû         : readtemp
* º¯Êý¹¦ÄÜ                   : DS18B2ζȼĴæÆ÷ÅäÖã¬Î¶ȶÁÈ¡           
* Êä    Èë         : ÎÞ
* Êä    ³ö         : value
*******************************************************************************/
double readtemp()                          //¶ÁȡζÈÄÚÐèÒª¸´Î»µÄ
{
        u16 temp;
extern        u8 a,b;
        extern double value1;
        ds18b20init();                //³õʼ»¯
        ds18b20wr(0xcc);   //·¢ËͺöÂÔROMÖ¸Áî
        ds18b20wr(0x44);   //·¢ËÍζÈת»»Ö¸Áî
        delay_ms(800);
        ds18b20init();           //³õʼ»¯
        ds18b20wr(0xcc);   //·¢ËͺöÂÔROMÖ¸Áî
        ds18b20wr(0xbe);   //·¢¶ÁÔÝ´æÆ÷Ö¸Áî
        a=DS18b20rd();         //ζȵĵͰËλ
        b=DS18b20rd();         //ζȵĸ߰Ëλ
        temp=b;
        temp=(temp<<8)+a;
        if((temp&0xf800)==0xf800)
        {
                temp=(~temp)+1;
                value1=temp*(-0.0625);
        }
        else
        {
                value1=temp*0.0625;        
        }
        return value1;
}

初始化void RCC_HSE_Configuration() 之后,温度就读不出来了,,不初始化void RCC_HSE_Configuration(),,温度读的正常,,,这是为什么




0条回答

一周热门 更多>