From e3d28cbb2bbf0c65af4d3d57e649f7ef0a6cbdb6 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期六, 13 八月 2022 21:50:01 +0800 Subject: [PATCH] 1 --- Src/main.c | 462 ++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 290 insertions(+), 172 deletions(-) diff --git a/Src/main.c b/Src/main.c index 30e5b35..5211bb2 100644 --- a/Src/main.c +++ b/Src/main.c @@ -17,7 +17,6 @@ ****************************************************************************** */ /* USER CODE END Header */ - /* Includes ------------------------------------------------------------------*/ #include "main.h" @@ -29,6 +28,9 @@ #include "global_param.h" #include "TrackingDiff.h" #include "dw_app.h" + +#define NSH1 0x0001 +#define GP 0x0002 //#define DEBUG_MODE /* USER CODE END Includes */ @@ -40,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 -------------------------------------------------------------*/ @@ -55,6 +56,8 @@ LPTIM_HandleTypeDef hlptim1; SPI_HandleTypeDef hspi1; + +TIM_HandleTypeDef htim21; UART_HandleTypeDef huart1; DMA_HandleTypeDef hdma_usart1_rx; @@ -72,6 +75,7 @@ static void MX_SPI1_Init(void); static void MX_ADC_Init(void); static void MX_DMA_Init(void); +static void MX_TIM21_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -88,6 +92,7 @@ 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) { @@ -96,7 +101,7 @@ } void UsartInit(void) { - waitusart_timer = tag_frequency*USART_KEEPWAKE_TIME; +// 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)) @@ -104,9 +109,11 @@ Error_Handler(); } } +uint16_t hardware_version,hardware_pici,hardware_type; +u16 current_time,currentcount,beepcount; uint8_t state5v; void IdleTask(void) -{u16 current_time; +{ UART_CheckReceive(); UART_CheckSend(); @@ -121,31 +128,64 @@ // LED_TB_OFF; //}else{ // LED_TR_OFF; - current_time=GetLPTime(); + //motor_state=2; -if(g_com_map[MOTOR_ENABLE]) -{ - 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; - } -} +//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; @@ -154,7 +194,7 @@ state5v=1; UsartInit(); } - if(bat_percent>99) + if(HAL_GPIO_ReadPin(PWR_ON_GPIO_Port,PWR_ON_Pin)) { LED_LR_OFF; LED_LG_ON; @@ -177,7 +217,7 @@ if(result) result = FLASH_Write(0x8004A38, (const uint8_t*)&tmp, 2); __enable_irq(); - printf("进入升级模式\r\n"); + //printf("进入升级模式\r\n"); g_com_map[CNT_UPDATE]=0; save_com_map_to_flash(); delay_ms(100); @@ -211,68 +251,15 @@ u16 current_slotnum; extern int32_t offsettimeus; //#define FIXSLOT -#define FIXSLOTPOS 0 +#define FIXSLOTPOS 4 u16 slotpos_intoatl; uint16_t bigslot_num; -uint8_t fix_slotpos =FIXSLOTPOS; -int32_t lpcount,lptime,target_time; -void SetNextPollTime(u16 slotpos) + + + +void ErrorConfig_Handler(void) { - -#ifdef FIXSLOT - slotpos = fix_slotpos; -#endif - - if(current_slotnum>=tag_frequency) - current_slotnum-=tag_frequency; - slotpos_intoatl = current_slotnum*bigslot_num+slotpos; - - if(current_slotnum==19) - {slotpos_intoatl = current_slotnum*bigslot_num+slotpos;} - target_time=(slotpos_intoatl*SLOTTIME_MS+100)*100; - - //if(target_time<90000) - { - lptime=target_time-offsettimeus-10000; - lpcount = lptime/LPTIMER_LSB; - if(lpcount>LPTIMER_1S_COUNT) - lpcount-=LPTIMER_1S_COUNT; - if(lpcount<0) - { - lpcount+=LPTIMER_1S_COUNT; - } - __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount); -} -} -u8 active_flag=0; -void Program_Init(void) -{ float temp; - uint16_t temp2; - uint16_t i; - Usart1ParseDataCallback = UsartParseDataHandler; - parameter_init(); - //deca_sleep(1000); - g_com_map[VERSION] = 0x020d; -#ifdef DEBUG_MODE -// g_com_map[DEV_ROLE]=1; - // g_com_map[DEV_ID]=0x11; -// g_com_map[COM_INTERVAL]=100; -// 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[NOMOVESLEEP_TIME]=10; -// g_com_map[IMU_ENABLE]=0; -// g_com_map[COM_INTERVAL]=50; - 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; - } - if(g_com_map[COM_INTERVAL]==0) + if(g_com_map[COM_INTERVAL]==0||g_com_map[COM_INTERVAL]>1000) { g_com_map[COM_INTERVAL]=100; } @@ -282,6 +269,43 @@ {g_com_map[POWER]=MAX_RFPOWER;} if(g_com_map[POWER]<0) {g_com_map[POWER]=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)|53; + +// g_com_map[DEV_ID]=0x7; +#ifdef DEBUG_MODE +// 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[NOMOVESLEEP_TIME]=10; +// g_com_map[IMU_ENABLE]=0; +// g_com_map[COM_INTERVAL]=50; + 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]; @@ -289,7 +313,7 @@ group_id=g_com_map[GROUP_ID]; dev_id = g_com_map[DEV_ID]; //slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]*SLOT_SCALE)+3; - slottime = 5; + 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; @@ -303,9 +327,9 @@ Error_Handler(); } //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("标签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]); @@ -325,13 +349,31 @@ 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(GPIOA, GPIO_PIN_11, GPIO_PIN_SET); +// GPIO_InitStruct.Pin = GPIO_PIN_11; +// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; +// GPIO_InitStruct.Pull = GPIO_NOPULL; +// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; +// HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); +// //motor_keeptime = 10; +// break; +// case 2: +// MX_TIM2_Init(); +// break; +// } +} void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { //SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader @@ -347,7 +389,6 @@ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ - /* MCU Configuration--------------------------------------------------------*/ @@ -362,31 +403,34 @@ SystemClock_Config(); /* USER CODE BEGIN SysInit */ - + MX_DMA_Init(); /* USER CODE END SysInit */ /* 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_TIM21_Init(); /* USER CODE BEGIN 2 */ LED_LG_ON; Program_Init(); LIS3DH_Data_Init(); + // BarInit(); 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;; + 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(); } +// LIS3DH_Check(); // HAL_Delay(2000); // mcu_sleep(); //LED0_BLINK; @@ -405,11 +449,17 @@ // { // MODBUS_Poll(); // } +if(m_bEUARTTxEn==0&&(motor_keeptime==0)) + { +#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; - 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); @@ -417,8 +467,7 @@ // HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_RESET); // } // LED_TR_BLINK; - - bat_percent=Get_Battary(); + __disable_irq(); if(bat_percent>15) { LED_TB_ON; Tag_App(); @@ -428,21 +477,14 @@ Tag_App(); LED_TR_OFF; } + __enable_irq(); //LED0_BLINK; - IdleTask(); + IdleTask(); if(waitusart_timer>0) { waitusart_timer--; } - if(m_bEUARTTxEn==0&&waitusart_timer==0) - { -#ifndef DEBUG_MODE - if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); -#endif - } - - + }else{ IdleTask(); } @@ -465,14 +507,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; @@ -486,7 +529,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; @@ -526,7 +569,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; @@ -549,7 +592,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; @@ -637,6 +680,65 @@ } /** + * @brief TIM21 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM21_Init(void) +{ + + /* USER CODE BEGIN TIM21_Init 0 */ + + /* USER CODE END TIM21_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM21_Init 1 */ + + /* USER CODE END TIM21_Init 1 */ + htim21.Instance = TIM21; + htim21.Init.Prescaler = 9; + htim21.Init.CounterMode = TIM_COUNTERMODE_UP; + htim21.Init.Period = 1171; + htim21.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim21.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim21) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim21, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim21) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim21, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 585; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim21, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM21_Init 2 */ + + /* USER CODE END TIM21_Init 2 */ + HAL_TIM_MspPostInit(&htim21); + +} + +/** * @brief USART1 Initialization Function * @param None * @retval None @@ -683,10 +785,10 @@ } -/** +/** * Enable DMA controller clock */ -static void MX_DMA_Init(void) +static void MX_DMA_Init(void) { /* DMA controller clock enable */ @@ -715,10 +817,10 @@ __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, SCL_Pin|SDA_Pin|SPI_CS_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOA, SPI_CS_Pin|SCL_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|MOTOR_Pin|PWR_CTL_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|SDA_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); @@ -732,19 +834,6 @@ 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; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /*Configure GPIO pin : SPI_CS_Pin */ GPIO_InitStruct.Pin = SPI_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -752,12 +841,12 @@ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(SPI_CS_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pin : BAT_MEAS_GND_Pin */ - GPIO_InitStruct.Pin = BAT_MEAS_GND_Pin; + /*Configure GPIO pins : BAT_MEAS_GND_Pin SDA_Pin */ + GPIO_InitStruct.Pin = BAT_MEAS_GND_Pin|SDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(BAT_MEAS_GND_GPIO_Port, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : USER_KEY_Pin */ GPIO_InitStruct.Pin = USER_KEY_Pin; @@ -765,20 +854,12 @@ 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 - PWR_CTL_Pin */ - GPIO_InitStruct.Pin = MOTOR_Pin|LED1_G_Pin|LED1_R_Pin|LED2_R_Pin - |PWR_CTL_Pin; + /*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 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 : DW_WKUP_Pin DW_CTRL_Pin LED2_G_Pin */ GPIO_InitStruct.Pin = DW_WKUP_Pin|DW_CTRL_Pin|LED2_G_Pin; @@ -786,6 +867,19 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin : SCL_Pin */ + GPIO_InitStruct.Pin = SCL_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : INPUT_5V_Pin */ + GPIO_InitStruct.Pin = INPUT_5V_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(INPUT_5V_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : PWR_ON_Pin */ GPIO_InitStruct.Pin = PWR_ON_Pin; @@ -806,6 +900,7 @@ } void mcu_sleep(void) { + LIS3DH_Check(); HAL_LPTIM_DeInit(&hlptim1); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_All; @@ -828,20 +923,42 @@ extern uint8_t tx_near_msg[80],stationary_flag,gotosleep_flag; float key_keeptime; extern float motor_ontime; +void BeeperTask(void) +{ static u8 beeper_state = 0; + if(g_com_map[MOTOR_ENABLE]) +{ + if(motor_keeptime>0) + { + motor_keeptime-=1/(float)tag_frequency; + } + if(motor_keeptime>0&&beeper_state==0) + { + + HAL_TIM_PWM_Start(&htim21, TIM_CHANNEL_2); + beeper_state = 1; + } + if(motor_keeptime<=0&&beeper_state==1) + { + beeper_state = 0; + motor_keeptime = 0; + HAL_TIM_PWM_Stop(&htim21, TIM_CHANNEL_2); + } +}} void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { static uint8_t i=0; - i++; + SystemClock_Config(); g_start_send_flag=1; - current_slotnum++; - SetNextPollTime(tagslotpos); - nomove_count+=(float)g_com_map[COM_INTERVAL]/1000; +// current_slotnum++; +// SetNextPollTime(tagslotpos); + nomove_count+=1/(float)tag_frequency; + BeeperTask(); if(active_flag==0) { if(!GET_USERKEY) { LED_LG_ON; - key_keeptime+=(float)g_com_map[COM_INTERVAL]/1000; + key_keeptime+=1/(float)tag_frequency; if(key_keeptime>3) { u8 i=250,keystate=1; @@ -870,16 +987,10 @@ } } - if(motor_ontime>0) - { - motor_ontime-=(float)1/tag_frequency; - motor_state = 2; - }else{ - motor_state = 0; - } + if(!GET_USERKEY) { - key_keeptime+=(float)g_com_map[COM_INTERVAL]/1000; + key_keeptime+=1/(float)tag_frequency; if(key_keeptime>=KEY_KEEPRESET_TIME) { SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; @@ -887,7 +998,7 @@ }else{ key_keeptime=0; } - if(nomove_count>STATIONARY_TIME) + if(nomove_count>g_com_map[STATIONARY_TIME]) { stationary_flag = 1; }else{ @@ -899,10 +1010,12 @@ }else{ gotosleep_flag=0; } +#ifndef DEBUG_MODE if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&imu_enable) { mcu_sleep(); } +#endif } /* USER CODE END 4 */ @@ -914,7 +1027,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 */ } @@ -927,7 +1045,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