From d53db68d643026fc207af89dfb36f67f331852fe Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期四, 22 八月 2024 15:02:30 +0800
Subject: [PATCH] V2.1,去掉全部功能,只负责开机,配合urt进入高精度后自动关机的固件使用
---
Src/main.c | 721 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 607 insertions(+), 114 deletions(-)
diff --git a/Src/main.c b/Src/main.c
index 72c54d1..145d5a1 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 -----------------------------------------------------------*/
@@ -37,9 +41,8 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
-#define DEBUG_MODE
-#define Period (uint32_t) 32768
-#define Timeout (uint32_t) 32768 - 1//(32768 - 1)
+//#define DEBUG_MODE
+
/* 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 */
@@ -77,15 +83,161 @@
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint32_t dev_id;
-extern uint8_t g_start_sync_flag;
uint16_t heartbeat_timer,poll_timer,sync_timer;
+uint8_t aRxBuffer[1],group_id;
+uint8_t bat_percent=0,g_start_send_flag;
+extern u8 motor_state;
+uint16_t tyncpoll_time,lpsettime;
+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;
+}
+extern volatile int32_t m_EUART_DMA_RXPtr;
+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();
+ }
+ m_EUART_DMA_RXPtr = 0;
+}
+static void MX_DMA_DeInit(void)
+{
+ /* DMA controller clock enable */
+ __HAL_RCC_DMA1_CLK_DISABLE();
+
+ /* DMA interrupt init */
+ /* DMA1_Channel2_3_IRQn interrupt configuration */
+ // HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 1, 0);
+ HAL_NVIC_DisableIRQ(DMA1_Channel2_3_IRQn);
+
+}
+void UsartDeInit(void)
+{
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ waitusart_timer = 0;
+ MX_DMA_DeInit();
+ HAL_UART_DeInit(&huart1);
+ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+}
+uint16_t hardware_version,hardware_pici,hardware_type;
+u16 current_time;
+uint8_t state5v = 1;
void IdleTask(void)
{
- g_start_sync_flag=0;
- UART_CheckReceive();
+ if(state5v)
+ {
+ UART_CheckReceive();
UART_CheckSend();
-
+ }
+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;
+// LED_TB_OFF;
+//}else{
+// LED_TR_OFF;
+ current_time=GetLPTime();
+ //motor_state=2;
+if(g_com_map[MOTOR_ENABLE])
+{
+
+ if(motor_keeptime>0)
+ {
+ motor_state = 2;
+ }else{
+ motor_state = 0;
+ }
+ //motor_state=2;
+ switch(motor_state)
+ {case 0:
+ if(hardware_type==NSH1)
+ {MOTOR_OFF;
+ }else if(hardware_type==GP)
+ {
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
+ }
+ break;
+ case 1:
+ if(current_time<MOTOR_ONTIME)
+ {
+ if(hardware_type==NSH1)
+ {MOTOR_ON;
+ }else if(hardware_type==GP)
+ {
+ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
+ }
+ }else{
+ if(hardware_type==NSH1)
+ {MOTOR_OFF;
+ }else if(hardware_type==GP)
+ {
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
+ }
+ }
+ break;
+ case 2:
+ if(hardware_type==NSH1)
+ {MOTOR_ON;
+ }else if(hardware_type==GP)
+ {
+ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
+ }
+ break;
+ case 3:
+ if(hardware_type==NSH1)
+ {MOTOR_OFF;
+ }else if(hardware_type==GP)
+ {
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
+ }
+ break;
+ }
+}
+ bat_percent=Get_Battary();
+ if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
+ {
+ nomove_count = 0;
+ if(state5v==0)
+ {
+ state5v=1;
+ UsartInit();
+ }
+ if(HAL_GPIO_ReadPin(PWR_ON_GPIO_Port,PWR_ON_Pin))
+ {
+ LED_LR_OFF;
+ LED_LG_ON;
+ }else{
+ LED_LR_ON;
+ LED_LG_OFF;
+ }
+ }else{
+ if(state5v==1)
+ {
+ state5v=0;
+ UsartDeInit();
+ }
+ LED_LR_OFF;
+ LED_LG_OFF;
+// }
+}
if(g_com_map[CNT_UPDATE]==1)
{
uint32_t result = 0;
@@ -103,44 +255,125 @@
// Delay_ms(100);
SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
}
+ if(g_com_map[CNT_REBOOT]==1)
+ {
+ g_com_map[CNT_REBOOT]=0;
+ g_com_map[MAP_SIGN_INDEX]=0;
+ save_com_map_to_flash();
+ delay_ms(100);
+ SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
+ }
+ if(g_com_map[CNT_RESTART]==1)
+ {
+ g_com_map[CNT_RESTART]=0;
+ save_com_map_to_flash();
+ 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
+ }
}
-uint16_t tyncpoll_time,lpsettime;
-uint16_t slottime,max_slotpos;
+
+
+u16 current_slotnum;
+extern int32_t offsettimeus;
+//#define FIXSLOT
+#define FIXSLOTPOS 4
+u16 slotpos_intoatl;
+uint16_t bigslot_num;
+
+
+
+void CheckComMap(void)
+{
+ if(g_com_map[COM_INTERVAL]==0||g_com_map[COM_INTERVAL]>1000)
+ {
+ g_com_map[COM_INTERVAL]=100;
+ }
+ 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;
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] = (2<<8)|1;
+
+// 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[MAX_REPORT_ANC_NUM]=1;
+// g_com_map[DEV_ROLE]=1;
+ // 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[IMU_ENABLE]=0;
+// g_com_map[COM_INTERVAL]=50;
#endif
- g_com_map[VERSION] = 0x0107;
+//g_com_map[NOMOVESLEEP_TIME]=10;
+// g_com_map[IMU_ENABLE]=0;
+// g_com_map[COM_INTERVAL]=50;
+CheckComMap();
+ active_flag = g_com_map[ACTIVE_INDEX];
+ if(active_flag==0)
+ {
+ g_com_map[COM_INTERVAL]=1000;
+ g_com_map[IMU_ENABLE]=1;
+ g_com_map[NOMOVESLEEP_TIME]=10;
+ g_com_map[MOTOR_ENABLE]=0;
+ }
+//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]*4/3);
+ //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;
- lpsettime=g_com_map[COM_INTERVAL]*32.8;
- if (HAL_LPTIM_TimeOut_Start_IT(&hlptim1, lpsettime, lpsettime) != HAL_OK)
+ slot_startcount=tyncpoll_time*1000/LPTIMER_LSB;
+ lastpoll_time=tyncpoll_time;
+ tag_frequency = 1000/g_com_map[COM_INTERVAL];
+ bigslot_num = TOTAL_SLOTNUM/tag_frequency;
+ current_slotnum=1;
+ current_time=GetLPTime();
+ 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]);
+//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]);
// printf("DEVICE ALARM DISTANCE: 1.%d 2.%d 3.%d .\r\n",g_com_map[ALARM_DISTANCE1],g_com_map[ALARM_DISTANCE2],g_com_map[ALARM_DISTANCE3]);
}
+
static void SystemPower_Config(void)
{
/* Enable Ultra low power mode */
@@ -149,8 +382,57 @@
/* Enable the fast wake up from Ultra low power mode */
HAL_PWREx_EnableFastWakeUp();
}
+void mcu_sleep(void);
uint32_t temp;
-extern uint8_t sleep_flag;
+extern uint8_t sleep_flag,m_bEUARTTxEn;
+uint16_t waitusart_timer;
+
+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
+}
/* USER CODE END 0 */
/**
@@ -162,7 +444,6 @@
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
-
/* MCU Configuration--------------------------------------------------------*/
@@ -170,7 +451,7 @@
HAL_Init();
/* USER CODE BEGIN Init */
-
+//每次生成CUBE后需要注意,串口初始化要在DMA初始化后面,手动调整顺序**************
/* USER CODE END Init */
/* Configure the system clock */
@@ -183,22 +464,42 @@
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LPTIM1_Init();
+ MX_DMA_Init();
MX_USART1_UART_Init();
MX_SPI1_Init();
MX_ADC_Init();
- MX_DMA_Init();
+ //MX_TIM2_Init();
/* USER CODE BEGIN 2 */
- LIS3DH_Data_Init();
+ LED_LG_ON;
Program_Init();
- Dw1000_Init();
- Dw1000_App_Init();
- dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
- dwt_entersleep();
- if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE))
+ Accelerometer_Init();
+ // BarInit();
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ HAL_GPIO_WritePin(DW1000_RSTn_GPIO, DW1000_RSTn, GPIO_PIN_RESET);
+
+ GPIO_InitStruct.Pin = DW1000_RSTn;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStruct);
+// Dw1000_Init();
+// Dw1000_App_Init();
+// 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;;
+ DW_DISABLE;
+ if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE))
{
Error_Handler();
}
- SystemPower_Config();
+
+
+// HAL_Delay(2000);
+// mcu_sleep();
+ //LED0_BLINK;
+// SystemPower_Config();
//HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* USER CODE END 2 */
@@ -209,23 +510,50 @@
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
-
-// if(sleep_flag)
+// while(1)
// {
-// HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
+// MODBUS_Poll();
// }
- if(g_start_send_flag)
- {
- SystemClock_Config();
- g_start_send_flag = 0;
- LED0_BLINK;
- Tag_App();
- IdleTask();
- // HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
- }else{
+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&&active_flag)
+// { static uint16_t blink_count=0;
+// 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);
+//// }else{
+//// HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_RESET);
+//// }
+//// LED_TR_BLINK;
+// __disable_irq();
+// if(bat_percent>15)
+// { LED_TB_ON;
+// Tag_App();
+// LED_TB_OFF;
+// }else{
+// LED_TR_ON;
+// Tag_App();
+// LED_TR_OFF;
+// }
+// __enable_irq();
+// //LED0_BLINK;
+// IdleTask();
+// if(waitusart_timer>0)
+// {
+// waitusart_timer--;
+// }
+//
+// }else{
IdleTask();
- }
- //HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
+// }
+
// HAL_Delay(100);
// Get_Battary();
@@ -244,14 +572,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
+ __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
+ /** 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;
@@ -265,7 +594,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;
@@ -305,7 +634,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;
@@ -328,7 +657,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;
@@ -369,10 +698,10 @@
Error_Handler();
}
/* USER CODE BEGIN LPTIM1_Init 2 */
- if (HAL_LPTIM_TimeOut_Start_IT(&hlptim1, Period, Timeout) != HAL_OK)
- {
- Error_Handler();
- }
+// if (HAL_LPTIM_TimeOut_Start_IT(&hlptim1, Period, Timeout) != HAL_OK)
+// {
+// Error_Handler();
+// }
/* USER CODE END LPTIM1_Init 2 */
}
@@ -416,6 +745,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
@@ -424,7 +816,7 @@
{
/* USER CODE BEGIN USART1_Init 0 */
-
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
@@ -439,23 +831,33 @@
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
+ huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
+ huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
+ huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
-// __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);//??idle??
+// 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();
+// }
Usart1InitVariables();
- LED0_BLINK;
/* USER CODE END USART1_Init 2 */
}
-/**
+/**
* Enable DMA controller clock
*/
-static void MX_DMA_Init(void)
+static void MX_DMA_Init(void)
{
/* DMA controller clock enable */
@@ -487,25 +889,19 @@
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|LED1_G_Pin|LED1_R_Pin|LED2_R_Pin, GPIO_PIN_RESET);
+ HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|PWR_CTL_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(GPIOB, LED1_G_Pin|LED1_R_Pin|LED2_R_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOA, DW_WKUP_Pin|LED2_G_Pin, GPIO_PIN_RESET);
+ HAL_GPIO_WritePin(GPIOA, DW_WKUP_Pin|DW_CTRL_Pin|LED2_G_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
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;
@@ -534,15 +930,21 @@
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;
+ /*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 LED2_G_Pin */
- GPIO_InitStruct.Pin = DW_WKUP_Pin|LED2_G_Pin;
+ /*Configure GPIO pins : DW_WKUP_Pin DW_CTRL_Pin LED2_G_Pin */
+ GPIO_InitStruct.Pin = DW_WKUP_Pin|DW_CTRL_Pin|LED2_G_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@@ -565,45 +967,131 @@
{
HAL_GPIO_TogglePin(GPIOx, GPIO_Pin);
}
+void mcu_sleep(void)
+{
+ HAL_LPTIM_DeInit(&hlptim1);
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ GPIO_InitStruct.Pin = GPIO_PIN_All;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ 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*/
+ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
+ /*Re-enable all used wakeup sources: Pin1(PA.0)*/
+ HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
+ /*Enter the Standby mode*/
+ HAL_PWR_EnterSTANDBYMode();
+}
+extern u16 tagslotpos;
+extern uint8_t tx_near_msg[80],stationary_flag,gotosleep_flag;
+float key_keeptime;
+extern float motor_ontime,button_delay;
+u32 kongzhi_f4_kaiji_time;
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
static uint8_t i=0;
- i++;
+ SystemClock_Config();
g_start_send_flag=1;
-// switch(i)
-// {
-// case 1:
-// GPIO_Toggle(GPIOB,LED1_G_Pin);
-// break;
-// case 2:
-// GPIO_Toggle(GPIOB,LED1_G_Pin);
-// break;
-// case 3:
-// GPIO_Toggle(GPIOB,LED1_R_Pin);
-// break;
-// case 4:
-// GPIO_Toggle(GPIOB,LED1_R_Pin);
-// break;
-// case 5:
-// GPIO_Toggle(GPIOA,LED2_G_Pin);
-// break;
-// case 6:
-// GPIO_Toggle(GPIOA,LED2_G_Pin);
-// break;
-// case 7:
-// GPIO_Toggle(GPIOB,LED2_R_Pin);
-// break;
-// case 8:
-// GPIO_Toggle(GPIOB,LED2_R_Pin);
-// break;
-// case 9:
-// i=0;
-// break;
-//
-//
-//
+// current_slotnum++;
+// SetNextPollTime(tagslotpos);
+// if(button_delay<1)
+ kongzhi_f4_kaiji_time++;
+ if(kongzhi_f4_kaiji_time>10800)
+ {
+ kongzhi_f4_kaiji_time=0;
+ HAL_GPIO_WritePin(DW1000_RSTn_GPIO, DW1000_RSTn, GPIO_PIN_SET);
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ GPIO_InitStruct.Pin = DW1000_RSTn;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStruct);
+
+ delay_ms(1000);
+
+GPIO_InitStruct.Pin = DW1000_RSTn;
+GPIO_InitStruct.Mode = GPIO_MODE_INPUT;// 设置为输入模式
+GPIO_InitStruct.Pull = GPIO_PULLUP;//不使用上拉或下拉
+HAL_GPIO_Init(DW1000_RSTn_GPIO,&GPIO_InitStruct); //初始化GPIO
+ }
+// button_delay+=1/(float)tag_frequency;
+// nomove_count+=1/(float)tag_frequency;
+// if(motor_keeptime>0)
+// {
+// motor_keeptime-=1/(float)tag_frequency;
// }
-
+// if(motor_keeptime<0)
+// {motor_keeptime = 0;}
+// if(active_flag==0)
+// {
+//// if(!GET_USERKEY)
+//// {
+//// 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;
+// }
+// }else{
+// key_keeptime=0;
+// }
+// if(nomove_count>g_com_map[STATIONARY_TIME])
+// {
+// stationary_flag = 1;
+// }else{
+// stationary_flag = 0;
+// }
+//if(nomove_count>=g_com_map[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 */
@@ -615,7 +1103,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 */
}
@@ -628,7 +1121,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