From eddac77c8fa85acccbf6eeff48b1ff760c70843a Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期三, 01 十一月 2023 15:33:01 +0800
Subject: [PATCH] 版本v2.7,大包字节uwb传输测试成功。
---
Src/main.c | 510 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 380 insertions(+), 130 deletions(-)
diff --git a/Src/main.c b/Src/main.c
index 1e06eb4..a290b8a 100644
--- a/Src/main.c
+++ b/Src/main.c
@@ -17,7 +17,6 @@
******************************************************************************
*/
/* USER CODE END Header */
-
/* Includes ------------------------------------------------------------------*/
#include "main.h"
@@ -28,6 +27,11 @@
#include "deca_device_api.h"
#include "global_param.h"
#include "TrackingDiff.h"
+#include "dw_app.h"
+
+#define NSH1 0x0001
+#define GP 0x0002
+//#define DEBUG_MODE
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -38,8 +42,7 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
//#define DEBUG_MODE
-#define Period (uint32_t) 32768 - 1
-#define Timeout (uint32_t) 32768 - 1//(32768 - 1)
+
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@@ -53,6 +56,8 @@
LPTIM_HandleTypeDef hlptim1;
SPI_HandleTypeDef hspi1;
+
+TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
@@ -70,6 +75,7 @@
static void MX_SPI1_Init(void);
static void MX_ADC_Init(void);
static void MX_DMA_Init(void);
+static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@@ -85,22 +91,37 @@
uint16_t slottime,max_slotpos;
uint16_t lastpoll_count,interval_count,slot_startcount,tag_frequency,lastpoll_time,current_time;
extern uint8_t module_power;
+extern float nomove_count;
+float motor_keeptime;
uint8_t imu_enable,motor_enable;
u16 GetLPTime(void)
{
u16 count=HAL_LPTIM_ReadCounter(&hlptim1);
return count*LPTIMER_LSB/1000;
}
+void UsartInit(void)
+{
+// waitusart_timer = tag_frequency*USART_KEEPWAKE_TIME;
+ MX_DMA_Init();
+ MX_USART1_UART_Init();
+ if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE))
+ {
+ Error_Handler();
+ }
+}
+uint16_t hardware_version,hardware_pici,hardware_type;
+u16 current_time;
+uint8_t state5v;
void IdleTask(void)
-{u16 current_time;
+{
UART_CheckReceive();
UART_CheckSend();
-//if(huart1.Instance->ISR&USART_ISR_FE)
-// {
+if(huart1.Instance->ISR&USART_ISR_FE)
+ {
// SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
-// }
+ }
//if(!HAL_GPIO_ReadPin(PWR_ON_GPIO_Port,PWR_ON_Pin))
//{
// LED_TR_ON;
@@ -109,39 +130,28 @@
// LED_TR_OFF;
current_time=GetLPTime();
//motor_state=2;
- switch(motor_state)
- {case 0:
- MOTOR_OFF;
- break;
- case 1:
- if(current_time<MOTOR_ONTIME)
- {
- MOTOR_ON;
- }else{
- MOTOR_OFF;
- }
-
- break;
- case 2:
- MOTOR_ON;
- break;
- case 3:
- MOTOR_OFF;
- break;
- }
+
+ bat_percent=Get_Battary();
if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
{
- if(bat_percent>99)
+ nomove_count = 0;
+ if(state5v==0)
{
- LED_TR_OFF;
- LED_TB_ON;
+ state5v=1;
+ UsartInit();
+ }
+ if(HAL_GPIO_ReadPin(PWR_ON_GPIO_Port,PWR_ON_Pin))
+ {
+ LED_LR_OFF;
+ LED_LG_ON;
}else{
- LED_TR_ON;
- LED_TB_OFF;
+ LED_LR_ON;
+ LED_LG_OFF;
}
}else{
- LED_TR_OFF;
- LED_TB_OFF;
+ state5v=0;
+ LED_LR_OFF;
+ LED_LG_OFF;
// }
}
if(g_com_map[CNT_UPDATE]==1)
@@ -176,74 +186,108 @@
delay_ms(100);
SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
}
+ if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0)
+ {
+ SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
+ }
}
-u16 total_slotnum,current_slotnum;
+u16 current_slotnum;
extern int32_t offsettimeus;
+//#define FIXSLOT
+#define FIXSLOTPOS 4
+u16 slotpos_intoatl;
+uint16_t bigslot_num;
-void SetNextPollTime(u16 time)
+
+
+void ErrorConfig_Handler(void)
{
- int32_t lpcount,lptime,target_time;
-
- if(current_slotnum>=total_slotnum)
- current_slotnum-=total_slotnum;
-
- target_time=((current_slotnum*g_com_map[COM_INTERVAL])+time)*1000;
- //if(target_time<90000)
+ if(g_com_map[COM_INTERVAL]==0||g_com_map[COM_INTERVAL]>1000)
{
- lptime=target_time-offsettimeus;
- lpcount = lptime/LPTIMER_LSB;
- if(lpcount>LPTIMER_1S_COUNT)
- lpcount-=LPTIMER_1S_COUNT;
- if(lpcount<0)
- {
- lpcount+=LPTIMER_1S_COUNT;
+ g_com_map[COM_INTERVAL]=100;
}
- __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
+ if(g_com_map[IMU_THRES]>10)
+ {g_com_map[IMU_THRES]=2;}
+ if(g_com_map[POWER]>MAX_RFPOWER)
+ {g_com_map[POWER]=MAX_RFPOWER;}
+ if(g_com_map[POWER]<0)
+ {g_com_map[POWER]=0;}
+ if(g_com_map[STATIONARY_TIME]==0)
+ {
+ g_com_map[STATIONARY_TIME]=10;
+ }
+
}
-}
+uint8_t uwb_active_flag = 0;
+u8 active_flag=0;
+u16 nomovesleep_time=0,interval;
void Program_Init(void)
{ float temp;
uint16_t temp2;
uint16_t i;
Usart1ParseDataCallback = UsartParseDataHandler;
parameter_init();
+ hardware_version= STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP);
+ hardware_pici= STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+2);
+ hardware_type= STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+4);
//deca_sleep(1000);
- g_com_map[VERSION] = 0x010b;
+ g_com_map[VERSION] = (2<<8)|7;
+
+// g_com_map[DEV_ID]=0x7;
#ifdef DEBUG_MODE
// g_com_map[DEV_ROLE]=1;
-// g_com_map[DEV_ID]=1;
- g_com_map[COM_INTERVAL]=100;
+ // g_com_map[DEV_ID]=0x4009;
+// g_com_map[ACTIVE_INDEX]=1;
+// g_com_map[COM_INTERVAL]=50;
// g_com_map[MAX_REPORT_ANC_NUM]=1;
- g_com_map[NOMOVESLEEP_TIME]=10;
+// g_com_map[NOMOVESLEEP_TIME]=10;
+// g_com_map[IMU_ENABLE]=0;
+// g_com_map[COM_INTERVAL]=50;
#endif
-
-
+//g_com_map[NOMOVESLEEP_TIME]=10;
+// g_com_map[IMU_ENABLE]=0;
+// g_com_map[COM_INTERVAL]=50;
+ active_flag = g_com_map[ACTIVE_INDEX];
+
+//g_com_map[HEIGHTOFFEST_INDEX]=g_com_map[MAX_REPORT_ANC_NUM];
module_power = g_com_map[POWER];
imu_enable=g_com_map[IMU_ENABLE];
motor_enable=g_com_map[MOTOR_ENABLE];
-
+ uwb_active_flag = g_com_map[UWB_ACTIVE_FLAG_IDX];
group_id=g_com_map[GROUP_ID];
dev_id = g_com_map[DEV_ID];
- slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]*0.4)+2;
+ //slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]*SLOT_SCALE)+3;
+ slottime = 5;
max_slotpos=g_com_map[COM_INTERVAL]/slottime;
tyncpoll_time=(g_com_map[DEV_ID]%max_slotpos)*slottime;
slot_startcount=tyncpoll_time*1000/LPTIMER_LSB;
lastpoll_time=tyncpoll_time;
- tag_frequency = 1000/g_com_map[COM_INTERVAL];
- total_slotnum = 1000/g_com_map[COM_INTERVAL];
+
+ bigslot_num = TOTAL_SLOTNUM/tag_frequency;
current_slotnum=1;
current_time=GetLPTime();
+ nomovesleep_time = g_com_map[NOMOVESLEEP_TIME];
+ interval = g_com_map[COM_INTERVAL];
+// if(active_flag==0)
+// {
+// interval=1000;
+// imu_enable=1;
+// nomovesleep_time = 10;
+// motor_enable=0;
+// }
+ tag_frequency = 1000/interval;
if (HAL_LPTIM_TimeOut_Start_IT(&hlptim1, LPTIMER_1S_COUNT, slot_startcount) != HAL_OK) //system time is 1010ms 1 puls=30.518us
{
Error_Handler();
}
-
- printf("标签ID: %d .\r\n",dev_id);
- printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
- printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
+ printf("固件版本:SS双路定位标签-防撞基站 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
+//g_com_map[NOMOVESLEEP_TIME]=5;
+// printf("标签ID: %d .\r\n",dev_id);
+// printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
+// printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
// printf("DEVICE PAIRID: %d .\r\n",g_com_map[PAIR_ID]);
@@ -263,17 +307,55 @@
uint32_t temp;
extern uint8_t sleep_flag,m_bEUARTTxEn;
uint16_t waitusart_timer;
-//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
-//{
-// /* Set transmission flag: trasfer complete*/
-// waitusart_timer = tag_frequency*USART_KEEPWAKE_TIME;
-//
-//}
+void HardWareTypeDiffConfig(void)
+{
+// GPIO_InitTypeDef GPIO_InitStruct = {0};
+// if(g_com_map[MOTORBEEPER_INDEX]!=1&&g_com_map[MOTORBEEPER_INDEX]!=2)
+// {
+// g_com_map[MOTORBEEPER_INDEX] = 2;
+// }
+// hardware_type = g_com_map[MOTORBEEPER_INDEX];
+// switch(hardware_type)
+// {
+// case 1:
+// HAL_GPIO_WritePin(GPIOB, MOTOR_Pin, GPIO_PIN_SET);
+// GPIO_InitStruct.Pin = MOTOR_Pin;
+// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+// GPIO_InitStruct.Pull = GPIO_NOPULL;
+// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+// break;
+// case 2:
+// MX_TIM2_Init();
+// break;
+// }
+}
+
+void DoubleClickProcess(void)
+{ char temp[50];
+ uint8_t len;
+if(uwb_active_flag)
+{
+ uwb_active_flag = 0;
+ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
+ HAL_Delay(3000);
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
+}else{
+ uwb_active_flag = 1;
+ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
+ HAL_Delay(1000);
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
+}
+ g_com_map[UWB_ACTIVE_FLAG_IDX]= uwb_active_flag;
+save_com_map_to_flash();
+}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
//SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
}
+uint8_t i;
+uint8_t uwb_tx[300]={0,};
/* USER CODE END 0 */
/**
@@ -285,7 +367,6 @@
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
-
/* MCU Configuration--------------------------------------------------------*/
@@ -306,24 +387,36 @@
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LPTIM1_Init();
- MX_DMA_Init();
+ MX_DMA_Init();
MX_USART1_UART_Init();
MX_SPI1_Init();
MX_ADC_Init();
+
+ MX_TIM2_Init();
/* USER CODE BEGIN 2 */
+ LED_LG_ON;
Program_Init();
- LIS3DH_Data_Init();
+ Accelerometer_Init();
+ // BarInit();
Dw1000_Init();
Dw1000_App_Init();
-
- dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
- dwt_entersleep();
- waitusart_timer=tag_frequency*USART_KEEPWAKE_TIME;;
+ HardWareTypeDiffConfig();
+// dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
+// dwt_entersleep();
+// waitusart_timer=tag_frequency*USART_KEEPWAKE_TIME;;
+ dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
+ dwt_setrxtimeout(0);//设定接收超时时间,0位没有
+ dwt_rxenable(0);
DW_DISABLE;
if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE))
{
Error_Handler();
}
+ for(i=0;i<255;i++)
+ {
+ uwb_tx[i]=i;
+ }
+
// HAL_Delay(2000);
// mcu_sleep();
//LED0_BLINK;
@@ -338,11 +431,21 @@
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
+// while(1)
+// {
+// MODBUS_Poll();
+// }
+if(m_bEUARTTxEn==0&&(motor_state==0||motor_state==3))
+ {
+#ifndef DEBUG_MODE
+ if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
+ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
+#endif
+ }
if(g_start_send_flag)
{ static uint16_t blink_count=0;
- SystemClock_Config();
g_start_send_flag = 0;
-
+ // GetPressAndTemp();
// if(current_count>slot_startcount&¤t_count<slot_startcount+interval_count)
// {
// HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_SET);
@@ -350,30 +453,24 @@
// HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_RESET);
// }
// LED_TR_BLINK;
-
- bat_percent=Get_Battary();
+ __disable_irq();
if(bat_percent>15)
- { LED0_ON;
+ { LED_TB_ON;
Tag_App();
- LED0_OFF;
+ LED_TB_OFF;
}else{
- LED_LR_ON;
+ LED_TR_ON;
Tag_App();
- LED_LR_OFF;
+ LED_TR_OFF;
}
+ __enable_irq();
//LED0_BLINK;
IdleTask();
if(waitusart_timer>0)
{
waitusart_timer--;
}
- if(m_bEUARTTxEn==0&&waitusart_timer==0)
- {
-
- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
- }
-
-
+
}else{
IdleTask();
}
@@ -396,14 +493,15 @@
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
- /** Configure the main internal regulator output voltage
+ /** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
- /** Configure LSE Drive Capability
+ /** Configure LSE Drive Capability
*/
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
- /** Initializes the CPU, AHB and APB busses clocks
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
@@ -417,7 +515,7 @@
{
Error_Handler();
}
- /** Initializes the CPU, AHB and APB busses clocks
+ /** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
@@ -457,7 +555,7 @@
/* USER CODE BEGIN ADC_Init 1 */
/* USER CODE END ADC_Init 1 */
- /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
+ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc.Instance = ADC1;
hadc.Init.OversamplingMode = DISABLE;
@@ -480,7 +578,7 @@
{
Error_Handler();
}
- /** Configure for the selected ADC regular channel to be converted.
+ /** Configure for the selected ADC regular channel to be converted.
*/
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
@@ -568,6 +666,69 @@
}
/**
+ * @brief TIM2 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_TIM2_Init(void)
+{
+
+ /* USER CODE BEGIN TIM2_Init 0 */
+
+ /* USER CODE END TIM2_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+
+ /* USER CODE BEGIN TIM2_Init 1 */
+
+ /* USER CODE END TIM2_Init 1 */
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 9;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 1171;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 599;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM2_Init 2 */
+//if(HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3) != HAL_OK)
+// {
+// /* Starting Error */
+// Error_Handler();
+// }
+ /* USER CODE END TIM2_Init 2 */
+ HAL_TIM_MspPostInit(&htim2);
+
+}
+
+/**
* @brief USART1 Initialization Function
* @param None
* @retval None
@@ -599,12 +760,12 @@
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
- GPIO_InitStruct.Pin = GPIO_PIN_10;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+// GPIO_InitStruct.Pin = GPIO_PIN_9;
+// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+// GPIO_InitStruct.Pull = GPIO_PULLUP;
+// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+// GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
+// HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// if(HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1) != HAL_OK)
// {
// Error_Handler();
@@ -614,10 +775,10 @@
}
-/**
+/**
* Enable DMA controller clock
*/
-static void MX_DMA_Init(void)
+static void MX_DMA_Init(void)
{
/* DMA controller clock enable */
@@ -649,7 +810,7 @@
HAL_GPIO_WritePin(GPIOA, SCL_Pin|SDA_Pin|SPI_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|MOTOR_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|PWR_CTL_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, LED1_G_Pin|LED1_R_Pin|LED2_R_Pin, GPIO_PIN_RESET);
@@ -662,12 +823,6 @@
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /*Configure GPIO pin : BAT_MEAS_Pin */
- GPIO_InitStruct.Pin = BAT_MEAS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(BAT_MEAS_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : SCL_Pin SDA_Pin */
GPIO_InitStruct.Pin = SCL_Pin|SDA_Pin;
@@ -696,18 +851,18 @@
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(USER_KEY_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pins : MOTOR_Pin LED1_G_Pin LED1_R_Pin LED2_R_Pin */
- GPIO_InitStruct.Pin = MOTOR_Pin|LED1_G_Pin|LED1_R_Pin|LED2_R_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
/*Configure GPIO pin : INPUT_5V_Pin */
GPIO_InitStruct.Pin = INPUT_5V_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(INPUT_5V_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : LED1_G_Pin LED1_R_Pin LED2_R_Pin PWR_CTL_Pin */
+ GPIO_InitStruct.Pin = LED1_G_Pin|LED1_R_Pin|LED2_R_Pin|PWR_CTL_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : DW_WKUP_Pin DW_CTRL_Pin LED2_G_Pin */
GPIO_InitStruct.Pin = DW_WKUP_Pin|DW_CTRL_Pin|LED2_G_Pin;
@@ -722,9 +877,18 @@
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(PWR_ON_GPIO_Port, &GPIO_InitStruct);
+ /*Configure GPIO pin : PB8 */
+ GPIO_InitStruct.Pin = GPIO_PIN_8;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI0_1_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
+
+ HAL_NVIC_SetPriority(EXTI4_15_IRQn, 1, 0);
+ HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}
@@ -744,6 +908,8 @@
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
/*Clear all related wakeup flags*/
@@ -753,19 +919,84 @@
/*Enter the Standby mode*/
HAL_PWR_EnterSTANDBYMode();
}
-extern float nomove_count;
+extern u16 tagslotpos;
+extern uint8_t tx_near_msg[80],stationary_flag,gotosleep_flag;
float key_keeptime;
+extern float motor_ontime,button_delay;
+uint32_t tagdisterror_list[TAG_NUM_IN_SYS];
+extern uint16_t taglist_num;
+extern int32_t tagdist_list[TAG_NUM_IN_SYS];
+extern uint16_t tagid_list[TAG_NUM_IN_SYS];
+void Up_tagdisterror_list_Poll()
+{
+ static uint8_t r=0;
+ for(r=0;r<taglist_num;r++)
+ {
+ tagdisterror_list[r]++;
+ if(tagdisterror_list[r]>10)
+ {
+ tagdist_list[r]=0;
+ tagid_list[r]=0;
+ taglist_num=taglist_num-1;
+ tagdisterror_list[r]=0;
+ }
+ }
+}
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
static uint8_t i=0;
- i++;
+ SystemClock_Config();
g_start_send_flag=1;
- current_slotnum++;
- SetNextPollTime(tyncpoll_time);
- nomove_count+=(float)g_com_map[COM_INTERVAL]/1000;
+// current_slotnum++;
+// SetNextPollTime(tagslotpos);
+ if(button_delay<1)
+ button_delay+=1/(float)tag_frequency;
+ nomove_count+=1/(float)tag_frequency;
+Up_tagdisterror_list_Poll();
+ if(motor_keeptime>0)
+ {
+ motor_keeptime-=1/(float)tag_frequency;
+ }
+ if(motor_keeptime<0)
+ {motor_keeptime = 0;}
+ if(active_flag==0)
+ {
if(!GET_USERKEY)
{
- key_keeptime+=(float)g_com_map[COM_INTERVAL]/1000;
+ LED_LG_ON;
+ key_keeptime+=1/(float)tag_frequency;
+ if(key_keeptime>3)
+ {
+ u8 i=250,keystate=1;
+ while(i--)
+ {
+ if(i%10==0)
+ {
+ LED_LG_BLINK;
+ }
+ if(GET_USERKEY)
+ {keystate = 0;}
+ if(keystate==0&&!GET_USERKEY)
+ {
+ parameter_init();
+ g_com_map[ACTIVE_INDEX] = 1;
+ save_com_map_to_flash();
+ delay_ms(100);
+ SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
+ }
+ delay_ms(10);
+ }
+ }
+ }else{
+ LED_LG_OFF;
+ key_keeptime=0;
+ }
+
+ }
+
+ if(!GET_USERKEY)
+ {
+ key_keeptime+=1/(float)tag_frequency;
if(key_keeptime>=KEY_KEEPRESET_TIME)
{
SCB->AIRCR = 0X05FA0000|(unsigned int)0x04;
@@ -773,10 +1004,24 @@
}else{
key_keeptime=0;
}
+ if(nomove_count>g_com_map[STATIONARY_TIME])
+ {
+ stationary_flag = 1;
+ }else{
+ stationary_flag = 0;
+ }
+if(nomove_count>=nomovesleep_time-1&&imu_enable)
+ {
+ gotosleep_flag=1;
+ }else{
+ gotosleep_flag=0;
+ }
+#ifndef DEBUG_MODE
if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&imu_enable)
{
mcu_sleep();
}
+#endif
}
/* USER CODE END 4 */
@@ -788,7 +1033,12 @@
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
-
+// while (1)
+// {}
+// /* USER CODE BEGIN W1_HardFault_IRQn 0 */
+// //SCB->AIRCR = 0X05FA0000|(unsigned int)0x04;
+// /* USER CODE END W1_HardFault_IRQn 0 */
+// }
/* USER CODE END Error_Handler_Debug */
}
@@ -801,7 +1051,7 @@
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
-{
+{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
--
Gitblit v1.9.3