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/main.c                           |   12 +-
 源码/核心板/Src/stm32f10x_it.c                   |   13 ++
 源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.c |  156 +++++++++++++++++++++++++++++---------
 源码/核心板/Src/OnChipDevices/RTC.c              |    2 
 源码/核心板/Src/application/dw_app.c             |    7 +
 5 files changed, 139 insertions(+), 51 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/RTC.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/RTC.c"
index c952803..d1ac0de 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/RTC.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/RTC.c"
@@ -51,7 +51,7 @@
 	RTC_ITConfig(RTC_IT_ALR,ENABLE); //?? RTC ???  
 		RTC_WaitForLastTask();
 	/* Set RTC prescaler: set RTC period to 1sec */
-	RTC_SetPrescaler(40000); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
+	RTC_SetPrescaler(2000); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
 
 	/* Wait until last write operation on RTC registers has finished */
 	RTC_WaitForLastTask();
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 6e55e6b..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;
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index ef8d58c..2499fa3 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -263,7 +263,7 @@
 }
 void Dw1000_App_Init(void)
 {
-	g_com_map[DEV_ID]=0x00;
+	g_com_map[DEV_ID]=0x03;
 	tx_poll_msg[MESSAGE_TYPE_IDX]=POLL;
 	tx_resp_msg[MESSAGE_TYPE_IDX]=RESPONSE;
 	tx_final_msg[MESSAGE_TYPE_IDX]=FINAL;
@@ -284,7 +284,7 @@
 	uint32_t final_tx_time;
 	
 	GPIO_ResetBits(SPIx_GPIO, SPIx_CS);
-	delay_us(250);
+	delay_us(2500);
 	GPIO_SetBits(SPIx_GPIO, SPIx_CS);
 	
 	/* Write frame data to DW1000 and prepare transmission. See NOTE 7 below. */
@@ -372,7 +372,7 @@
 	dwt_entersleep();
 	
 }
-
+uint16_t g_Resttimer;
 void Anchor_App(void)
 {
 	uint32_t frame_len;
@@ -389,6 +389,7 @@
 	{ 
 		UART_CheckReceive();
 		UART_CheckSend();
+		g_Resttimer=0;
 	};
 
 	if (status_reg & SYS_STATUS_RXFCG)//成功接收
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
index 917fef0..c0f89a6 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
@@ -10,13 +10,13 @@
 #include "serial_at_cmd_app.h"
 #include "global_param.h"
 
-#define WORK_MODE_TAG
-//#define WORK_MODE_ANCHOR
+//#define WORK_MODE_TAG
+#define WORK_MODE_ANCHOR
 
 void Device_Init(void)
 {
-//	Rcc_Init();
-	SystemInit();
+	RCC_Configuration();
+	//SystemInit();
 	Nvic_Init();
 	Systick_Init();
 #ifdef WORK_MODE_TAG	
@@ -54,7 +54,7 @@
 
 int main(void)
 {
-
+delay_ms(1000);
 	Device_Init();
 	Program_Init();
 	Dw1000_Init();
@@ -64,6 +64,7 @@
 #endif
 	Dw1000_App_Init();
     /* Loop forever initiating ranging exchanges. */
+	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
 	while(1)
 	{
 #ifdef WORK_MODE_TAG
@@ -73,7 +74,6 @@
 		Tag_App();
 	}
 //	UART_CheckReceive();
-	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
 	PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);	
 #else 
 		Anchor_App();
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
index 69e2a34..1e15360 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c"
@@ -26,17 +26,21 @@
 #include "dw_app.h"
 #include "global_param.h"
 #include "beep_logic_app.h"
-
+#include "led.h"
 /* Tick timer count. */
 volatile uint32_t time32_incr;
 uint8_t tt=0;
 uint8_t g_start_send_flag = 0;
 uint16_t sysscal;
+extern uint16_t g_Resttimer;
 void SysTick_Handler(void)
 {uint16_t i;
   time32_incr++;
 	g_UWB_com_interval++;
-	
+	if(g_Resttimer++>1000)
+	{
+		NVIC_SystemReset();
+	}
 //	if(g_UWB_com_interval > 1000)
 //	{	
 //		dis_after_filter = DEFAULT_DISTANCE;
@@ -61,12 +65,15 @@
 
 void RTCAlarm_IRQHandler(void)
 {
+	//		LED0_BLINK;
+	RCC_Configuration();
+	//	LED0_BLINK;
 	EXTI_ClearITPendingBit(EXTI_Line17);
 	RTC_ClearITPendingBit(RTC_FLAG_ALR);
 	g_start_send_flag = 1;
 	RTC_SET_ALARM(1);
 	tt++;
-	//GPIO_Toggle(GPIOA,LED_PIN);
+	
 	
   //SYS.wake_id|=1<<17;
 }

--
Gitblit v1.9.3