初始化void RCC_HSE_Configura
tion() 之后,温度就读不出来了,,不初始化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(),,温度读的正常,,,这是为什么
一周热门 更多>