作业七:DS18B20测温:
	
	//ADC改变灯的颜色:
	#include "stm32f10x.h"    
	#include "stm32_eval.h"    
	#include <stdio.h>    
	#define VREF 3.3    
	GPIO_InitTypeDef   GPIO_InitStructure;    
	USART_InitTypeDef USART_InitStructure;    
	USART_ClockInitTypeDef USART_ClockInitStructure;    
	int volt;    
	unsigned int temp0,temp1,temp2;    
	void RCC_Configuration(void)    
	{/*  
	 RCC_DeInit();  
	     
	 RCC_HSICmd(ENABLE);  
	 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);  
	   
	 RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);  
	   
	 RCC_HSEConfig(RCC_HSE_OFF);  
	 RCC_LSEConfig(RCC_LSE_OFF);  
	 RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz  
	 RCC_PLLCmd(ENABLE);  
	 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
	 RCC_ADCCLKConfig(RCC_PCLK2_Div4);  
	 RCC_PCLK2Config(RCC_HCLK_Div1);  
	 RCC_PCLK1Config(RCC_HCLK_Div2);  
	 RCC_HCLKConfig(RCC_SYSCLK_Div1);  
	 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
	 while(RCC_GetSYSCLKSource() != 0x08);  
	*/    
	   SystemInit();    
	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);    
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG    
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);    
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG    
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
	 GPIO_Init(GPIOD, &GPIO_InitStructure);    
	   GPIO_ResetBits(GPIOD,GPIO_Pin_2);    
	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);    
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG    
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;    
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
	 GPIO_Init(GPIOC, &GPIO_InitStructure);    
	   GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);    
	     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    
	}    
	   
	void USART_int(long BaudRate)    
	{    
	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);    
	      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    
	   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;    
	   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    
	   GPIO_Init(GPIOA, &GPIO_InitStructure);    
	   /* PA10 USART1_Rx  */    
	   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    
	   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    
	   GPIO_Init(GPIOA, &GPIO_InitStructure);    
	 /* USARTx configured as follow:  
	       - BaudRate = 115200 baud    
	       - Word Length = 8 Bits  
	       - One Stop Bit  
	       - No parity  
	       - Hardware flow control disabled (RTS and CTS signals)  
	       - Receive and transmit enabled  
	 */    
	 USART_InitStructure.USART_BaudRate = BaudRate;  
	 USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
	 USART_InitStructure.USART_StopBits = USART_StopBits_1;    
	 USART_InitStructure.USART_Parity = USART_Parity_No;    
	 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    
	   USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;        
	   USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;          
	   USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;          
	   USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;    
	   USART_ClockInit(USART1, &USART_ClockInitStructure);    
	 USART_Init(USART1, &USART_InitStructure);    
	 USART_Cmd(USART1, ENABLE);    
	   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);    
	USART_Cmd(USART1, ENABLE);    
	}    
	void delay_us(u32 n)    
	{    
	   u8 j;    
	   while(n--)    
	   for(j=0;j<10;j++);    
	}    
	void  delay_ms(u32 n)    
	{    
	   while(n--)    
	   delay_us(1000);    
	}    
	void PWM_Config()    
	{    
	   uint16_t PrescalerValue = 0;    
	   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    
	 TIM_OCInitTypeDef  TIM_OCInitStructure;    
	   /* TIM2 clock enable */    
	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    
	 /* GPIOA  enable */    
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    
	   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PWM&RGB- PA1 PA2 PA3    
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
	 GPIO_Init(GPIOA, &GPIO_InitStructure);    
	       TIM_Cmd(TIM2, ENABLE);    
	     /* Compute the prescaler value */    
	 PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;    
	 /* Time base configuration */    
	 TIM_TimeBaseStructure.TIM_Period = 0x07FF;    
	 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;    
	 TIM_TimeBaseStructure.TIM_ClockDivision = 0;    
	 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    
	 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);    
	 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    
	 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    
	 /* PWM1 Mode configuration: Channel2 ,PA1在通道2*/    
	 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    
	 TIM_OCInitStructure.TIM_Pulse = 0xFFFF;    
	 TIM_OC2Init(TIM2, &TIM_OCInitStructure);    
	   /* PWM1 Mode configuration: Channel3 PA2在通道3*/    
	 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    
	 TIM_OCInitStructure.TIM_Pulse = 0xFFFF;    
	 TIM_OC3Init(TIM2, &TIM_OCInitStructure);    
	   /* PWM1 Mode configuration: Channel4 PA3在通道4*/    
	 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    
	 TIM_OCInitStructure.TIM_Pulse = 0xFFFF;    
	 TIM_OC4Init(TIM2, &TIM_OCInitStructure);    
	 TIM_ARRPreloadConfig(TIM2, ENABLE);    
	}    
	void ADC_CONFIG(){    
	   ADC_InitTypeDef ADC_InitStructure;    
	   #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)    
	 /* ADCCLK = PCLK2/2 */    
	 RCC_ADCCLKConfig(RCC_PCLK2_Div2);    
	#else    
	 /* ADCCLK = PCLK2/4 */    
	 RCC_ADCCLKConfig(RCC_PCLK2_Div4);    
	#endif    
	ADC_DeInit(ADC1);    
	 /* Enable ADC1 and GPIOC clock */    
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB, ENABLE);    
	   /* Configure PB0 (ADC Channel14) as analog input -------------------------*/    
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//ADC所在端口PB0    
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入模式    
	 GPIO_Init(GPIOB, &GPIO_InitStructure);    
	 /* 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数据右对齐    
	 ADC_InitStructure.ADC_NbrOfChannel = 1;//ADC通道数为1    
	 ADC_Init(ADC1, &ADC_InitStructure);//初始化ADC1    
	 /* Enable ADC1 DMA */    
	 ADC_DMACmd(ADC1, ENABLE);    
	 /* Enable ADC1 */    
	 ADC_Cmd(ADC1, ENABLE);    
	}    
	   
	int Get_ADC(){    
	    /* ADC1 regular channel configuration */    
	 ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);//通道:8 ,采样时间    
	   /* Enable ADC1 reset calibration register */      
	 ADC_ResetCalibration(ADC1);//重置ADC1的校准寄存器    
	 /* Check the end of ADC1 reset calibration register */    
	 while(ADC_GetResetCalibrationStatus(ADC1));//确认重置完毕    
	 /* Start ADC1 calibration */    
	 ADC_StartCalibration(ADC1);    
	 /* Check the end of ADC1 calibration */    
	 while(ADC_GetCalibrationStatus(ADC1));    
	 /* Start ADC1 Software Conversion */    
	 ADC_SoftwareStartConvCmd(ADC1, ENABLE);  
	   return ADC_GetConversionValue(ADC1);    
	}    
	void PWM_TEST()    
	{    
	   
	   unsigned int temp0=volt,temp1=0,temp2=volt;    
	   printf("PWM-RGB TEST......\r\n");    
	  for(;(temp0>0)||(temp1<volt);temp0--,temp1++)    
	  {    
	      TIM_SetCompare2(TIM2, temp0);//temp0:volt~0    
	    TIM_SetCompare3(TIM2, temp1);//temp1:0~volt    
	      delay_us(1000);    
	  }    
	    for(;(temp0<volt)||(temp2>0);temp0++,temp2--)    
	    {    
	      TIM_SetCompare2(TIM2, temp0);//temp0:0~volt    
	      TIM_SetCompare4(TIM2, temp2);//temp2:volt~0    
	      delay_us(1000);    
	  }    
	  for(;(temp1>0)||(temp2<volt);temp1--,temp2++)  
	  {    
	      TIM_SetCompare4(TIM2, temp2);//temp2:0~volt    
	      TIM_SetCompare3(TIM2, temp1);//temp1:volt~0    
	      delay_us(1000);    
	  }    
	}    
	int main(void)    
	{    
	 float Volt=0.00;    
	   int ADValue = 0;    
	 RCC_Configuration();    
	 USART_int(115200);    
	   ADC_CONFIG();    
	   Get_ADC();    
	   PWM_Config();    
	   delay_ms(1000);    
	   printf(" config done...\r\n");    
	   while(1)    
	   {    
	       ADValue = Get_ADC();    
	       Volt = VREF*ADValue/4095;    
	       volt=Volt*1000;    
	       printf("===============================\r\n");    
	       printf("The ADC value is:%d\r\n",ADValue);    
	       printf("The Volt is:%f V\r\n",Volt);    
	       printf("The volt is:%d \r\n",volt);    
	       PWM_TEST();    
	       delay_ms(500);    
	   }    
	}    
	   
	#ifdef  USE_FULL_ASSERT    
	   
	void assert_failed(uint8_t* file, uint32_t line)    
	{    
	 while (1)    
	 {    
	 }    
	}    
	   
	#endif    
	   
	#ifdef __GNUC__    
	 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)    
	#else    
	 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)    
	#endif /* __GNUC__ */    
	     
	PUTCHAR_PROTOTYPE    
	{    
	   
	 USART_SendData(EVAL_COM1, (uint8_t) ch);    
	 while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)    
	 {}    
	   
	 return ch;    
	}    
	   
	#ifdef  USE_FULL_ASSERT    
	   
	void assert_failed(uint8_t* file, uint32_t line)    
	{    
	 while (1)    
	 {    
	 }    
	}