1 /* DS18B20时钟端口、引脚定义 */ 2 #define DS18B20 GPIOC 3 #define DS18B20_Onboard (GPIO_Pin_15) 4 #define DS18B20_PORT_RCC RCC_APB2Periph_GPIOC 5 #define ds_count 20 6 7 ///IO操作函数 8 #define DS18B20_DQ_OUT PCout(15) 9 #define DS18B20_DQ_IN PCin(15) 10 11 #define dsmax 6 //最多允许温度传感器的数量
配置DS18B20初始化函数,输入配置,输出配置,参考DS18B20数据手册:
1 void DS18B20_Reset(void) 2 { 3 DS18B20_IO_OUT(); //SET PC15 OUTPUT 4 DS18B20_DQ_OUT=0; //拉低DQ 5 delay_us(750); //拉低750us 6 DS18B20_DQ_OUT=1; //DQ=1 7 delay_us(35); //35US 8 } 9 10 u8 DS18B20_Check(void) 11 { 12 u8 retry=0; 13 DS18B20_IO_IN();//SET PC15 INPUT 14 while(DS18B20_DQ_IN&&retry<200) 15 { 16 retry++; 17 delay_us(1); 18 }; 19 if(retry>=200) return 1; 20 else retry = 0; 21 while (!DS18B20_DQ_IN && retry <240) 22 { 23 retry++; 24 delay_us(1); 25 }; 26 if(retry>=240) return 1; 27 return 0; 28 } 29 30 u8 DS18B20_Init(void) 31 { 32 GPIO_InitTypeDef GPIO_InitStructure; 33 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE ); 34 PWR_BackupAccessCmd( ENABLE );/* 允许修改RTC和后备寄存器*/ 35 RCC_LSEConfig( RCC_LSE_OFF ); /* 关闭外部低速时钟,PC14+PC15可以用作普通IO*/ 36 BKP_TamperPinCmd(DISABLE); /* 关闭入侵检测功能,PC13可以用作普通IO*/ 37 38 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; 39 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 40 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 41 GPIO_Init(GPIOC, &GPIO_InitStructure); 42