From df3db0b978b1cab3555d6878a274b0f382bf707c Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期一, 01 十月 2018 15:42:49 +0800
Subject: [PATCH] 标签开机死机bug改好,基站增加软件超时复位

---
 源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.c |  165 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 126 insertions(+), 39 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c"
index e021ee3..81873ad 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c"
@@ -1,46 +1,126 @@
 #include "Rcc_Nvic_Systick.h"
 
-void Rcc_Init(void)
+//void Rcc_Init(void)
+//{
+//	//----------使用内部RC晶振HSI 64MHz----------- 
+//	RCC_DeInit(); 										//将外设RCC寄存器重设为缺省值 
+//	RCC_HSICmd(ENABLE); 								//内部时钟使能
+//	while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);	//等待HSI就绪 
+//	
+//	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);	//选择FLASH预取指缓存的模,预取指缓存使能 
+//	FLASH_SetLatency(FLASH_Latency_2);   				//设置FLASH存储器延时时钟周期数FLASH_Latency_2  2延时周期   
+//	
+//	
+//	RCC_HCLKConfig(RCC_SYSCLK_Div1);   					//设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 
+//	RCC_PCLK2Config(RCC_HCLK_Div1);   					//设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK     
+//	RCC_PCLK1Config(RCC_HCLK_Div2); 					//设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK/2      
+//	RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);	//设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz    
+//	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作为系统时钟   
+
+////	//----------使用外部RC晶振 72MHz-----------  
+////    RCC_DeInit();           //初始化为缺省值  
+////    RCC_HSEConfig(RCC_HSE_ON);  //使能外部的高速时钟   
+////    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪  
+////      
+////    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //Enable Prefetch Buffer  
+////    FLASH_SetLatency(FLASH_Latency_2);      //Flash 2 wait state  
+////      
+////    RCC_HCLKConfig(RCC_SYSCLK_Div1);        //HCLK = SYSCLK  
+////    RCC_PCLK2Config(RCC_HCLK_Div1);         //PCLK2 =  HCLK  
+////    RCC_PCLK1Config(RCC_HCLK_Div2);         //PCLK1 = HCLK/2  
+////    RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ  
+////    RCC_PLLCmd(ENABLE);         //Enable PLLCLK  
+////  
+////    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready  
+////    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //Select PLL as system clock  
+////    while(RCC_GetSYSCLKSource()!=0x08);     //Wait till PLL is used as system clock source  
+//		
+//}
+int RCC_Configuration(void)
 {
-	//----------使用内部RC晶振HSI 64MHz----------- 
-	RCC_DeInit(); 										//将外设RCC寄存器重设为缺省值 
-	RCC_HSICmd(ENABLE); 								//内部时钟使能
-	while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);	//等待HSI就绪 
-	
-	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);	//选择FLASH预取指缓存的模,预取指缓存使能 
-	FLASH_SetLatency(FLASH_Latency_2);   				//设置FLASH存储器延时时钟周期数FLASH_Latency_2  2延时周期   
-	
-	
-	RCC_HCLKConfig(RCC_SYSCLK_Div1);   					//设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 
-	RCC_PCLK2Config(RCC_HCLK_Div1);   					//设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK     
-	RCC_PCLK1Config(RCC_HCLK_Div2); 					//设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK/2      
-	RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);	//设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz    
-	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作为系统时钟   
+	ErrorStatus HSEStartUpStatus;
+	RCC_ClocksTypeDef RCC_ClockFreq;
 
-//	//----------使用外部RC晶振 72MHz-----------  
-//    RCC_DeInit();           //初始化为缺省值  
-//    RCC_HSEConfig(RCC_HSE_ON);  //使能外部的高速时钟   
-//    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪  
-//      
-//    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //Enable Prefetch Buffer  
-//    FLASH_SetLatency(FLASH_Latency_2);      //Flash 2 wait state  
-//      
-//    RCC_HCLKConfig(RCC_SYSCLK_Div1);        //HCLK = SYSCLK  
-//    RCC_PCLK2Config(RCC_HCLK_Div1);         //PCLK2 =  HCLK  
-//    RCC_PCLK1Config(RCC_HCLK_Div2);         //PCLK1 = HCLK/2  
-//    RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ  
-//    RCC_PLLCmd(ENABLE);         //Enable PLLCLK  
-//  
-//    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready  
-//    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //Select PLL as system clock  
-//    while(RCC_GetSYSCLKSource()!=0x08);     //Wait till PLL is used as system clock source  
-		
+	/* RCC system reset(for debug purpose) */
+	RCC_DeInit();
+
+	/* Enable HSE */
+	RCC_HSEConfig(RCC_HSE_ON);
+
+	/* Wait till HSE is ready */
+	HSEStartUpStatus = RCC_WaitForHSEStartUp();
+
+	if(HSEStartUpStatus != ERROR)
+	{
+		SystemInit();
+		/* Enable Prefetch Buffer */
+		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
+
+		/****************************************************************/
+		/* HSE= up to 25MHz (on EVB1000 is 12MHz),
+		 * HCLK=72MHz, PCLK2=72MHz, PCLK1=36MHz 						*/
+		/****************************************************************/
+		/* Flash 2 wait state */
+		FLASH_SetLatency(FLASH_Latency_2);
+		/* HCLK = SYSCLK */
+		RCC_HCLKConfig(RCC_SYSCLK_Div1);
+		/* PCLK2 = HCLK */
+		RCC_PCLK2Config(RCC_HCLK_Div1);
+		/* PCLK1 = HCLK/2 */
+		RCC_PCLK1Config(RCC_HCLK_Div2);
+		/*  ADCCLK = PCLK2/4 */
+		RCC_ADCCLKConfig(RCC_PCLK2_Div6);
+	}
+//		/* Configure PLLs *********************************************************/
+//		/* PLL2 configuration: PLL2CLK = (HSE / 4) * 8 = 24 MHz */
+//		RCC_PREDIV2Config(RCC_PREDIV2_Div4);
+//		RCC_PLL2Config(RCC_PLL2Mul_8);
+
+//		/* Enable PLL2 */
+//		RCC_PLL2Cmd(ENABLE);
+
+//		/* Wait till PLL2 is ready */
+//		while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET){}
+
+//		/* PLL1 configuration: PLLCLK = (PLL2 / 3) * 9 = 72 MHz */
+//		RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div3);
+
+//		RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
+
+//		/* Enable PLL */
+//		RCC_PLLCmd(ENABLE);
+
+//		/* Wait till PLL is ready */
+//		while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}
+
+//		/* Select PLL as system clock source */
+//		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
+
+//		/* Wait till PLL is used as system clock source */
+//		while (RCC_GetSYSCLKSource() != 0x08){}
+//	}
+
+	RCC_GetClocksFreq(&RCC_ClockFreq);
+
+	/* Enable SPI1 clock */
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
+
+	/* Enable SPI2 clock */
+	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
+
+	/* Enable GPIOs clocks */
+	RCC_APB2PeriphClockCmd(
+						RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
+						RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
+						RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,
+						ENABLE);
+
+	return 0;
 }
-
 void Nvic_Init(void)
 {
 	NVIC_InitTypeDef NVIC_InitStructure;
@@ -53,13 +133,20 @@
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 
+	
+	
+		NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;
+    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+		NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
+	
     NVIC_Init(&NVIC_InitStructure);
 }
 
 int Systick_Init(void)
 {
 	int time_retry = 500;
-	if (SysTick_Config(64000))
+	if (SysTick_Config(72000))
 	{
         /* Capture error */
         while (time_retry--);

--
Gitblit v1.9.3