From 5e7b2ec568c4fd0497564e6f45a482a4e0f33b33 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 23 七月 2025 11:12:51 +0800 Subject: [PATCH] 1.1,加入灯跟宏定义控制1hz 5hz --- keil/include/main/main.c | 457 ++++++++++++++++++++------------------------------------ 1 files changed, 164 insertions(+), 293 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 3c2af64..7c5518d 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -66,8 +66,9 @@ #include "dw_app_anchor.h" #include "ymodem.h" #include "mk_phy.h" +#include "mk_pwm.h" -#define DEBUG_MODE +//#define DEBUG_MODE extern int simple_main(void); extern int temp_main(void); void uart_change_check(uint16_t gpio_state); @@ -110,7 +111,14 @@ extern uint8_t pca9555writedata_polarity[10];//暂存输入极性反转寄存器所有配置的数组 uint8_t temp_pca9555writedata_input[10];//暂存上一次输入寄存器所有配置的数组 Operation_step UWB_work_state; - +struct PWM_CH_CFG_T usr_pwm_ch0_cfg = { + .prescale = 2, + .waveform = PWM_SEQUENTIAL, + .ratio = 50, + .phase = 0, + .pol_inv = 0, + .int_en = 0, +}; Commend_SendDate send_struct; struct ADC_CFG_T usr_adc_cfg = { @@ -158,8 +166,8 @@ uint32_t lock; trace_flush(); lock = int_lock(); - LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); - gps_air780_power_change(0,0);//关闭gps,4G +// LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); +// gps_air780_power_change(0,0);//关闭gps,4G sleep_timer_stop(); //adc_close(); power_enter_power_down_mode(1); @@ -202,94 +210,12 @@ PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//拉高 // LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent); } -//void UartInit(void) -//{ -//board_pins_config(); -//uart_open(UART_ID1, &test_uart_cfg); -//board_debug_console_open(TRACE_PORT_UART0); -//uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); -//} extern uint8_t gps_uwb_flag,gps_need_data_flag; uint8_t TCP_reconnect_timer,flag_TCP_reconnectting = 1,flag_alam_state = 0,userkey_state; uint8_t gps_enable_flag,motor_open_air_flag,moter_open_uwb_flag,flag_fenli_alarm = 0,fenli_alarm_count,delaysleep_count,enbale_blink_flag; int need_open_gps_count; uint32_t keystarttime,keystarttime2,keystarttime3; extern uint32_t get_in_num,get_out_num; -//void MotorPoll(void) -//{ -// if(UWB_work_state==UN_BIND) { -// gps_uwb_flag=0;//关闭GPS -// moter_open_uwb_flag=0;//关闭震动 -// need_open_gps_count=0;//清0计数gps -// } else { //绑定状态下 -// if(anchordata_num==1) { -// if(distance<g_com_map[ALARM_DISTANCE1]) { //小于预警距离 -// fenli_alarm_count = 0; -// if(flag_fenli_alarm) -// { -// flag_fenli_alarm = 0; -// fenli_alarm_count = 0; -// _4GAlarmUpload(2); -// } -// } -// } -// if(distance>g_com_map[ALARM_DISTANCE1]||anchordata_num==0) -// { -// if(fenli_alarm_count++>20) -// { -// if(!flag_fenli_alarm) -// { -// flag_fenli_alarm = 1; -// _4GAlarmUpload(1); -// } -// } -// } -// if(distance<g_com_map[ALARM_DISTANCE1]) { //小于预警距离 -// if(flag_alam_state) -// { -// flag_alam_state = 0; - -// } -// -// need_open_gps_count=0; -// moter_open_uwb_flag=0;//关闭震动 -// gps_uwb_flag=0;//关闭GPS -// } else if(g_com_map[ALARM_DISTANCE1]<=distance&&distance<=g_com_map[ALARM_DISTANCE2]) { //大于预警距离小于报警距离 -// need_open_gps_count++; -// moter_open_uwb_flag=1;//开启震动 -// if(need_open_gps_count>=20) { -// if(!flag_alam_state) -// { -// flag_alam_state = 1; -// } -// gps_uwb_flag=1;//开启gps测距流程 -// need_open_gps_count=0; -// } -// } else if(distance>=g_com_map[ALARM_DISTANCE2]) { //大于报警距离 -// need_open_gps_count++; -// moter_open_uwb_flag=1;//开启震动 -// if(need_open_gps_count>=20) { -// if(!flag_alam_state) -// { -// flag_alam_state = 1; -// } -// gps_uwb_flag=1;//开启gps测距流程 -// need_open_gps_count=0; -// } -// -// } -// if(anchordata_num==0) { -// if(!flag_alam_state) -// { -// flag_alam_state = 1; -// } -// distance = 0x1ffff; -// gps_uwb_flag=1;//开启gps测距流程 -// moter_open_uwb_flag=1;//开启震动 -// need_open_gps_count=0; -// } -// } -// } void IMUTask(void) { if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1) @@ -416,42 +342,30 @@ uint8_t Get_anchor_appdata_flag; uint8_t Get_anchor_appdata_num; extern uint8_t update_tag_time; +uint8_t sleep_limit_time=1; +uint8_t enable_sleep_count,sleep_flag; static void sleep_timer_callback(void *dev, uint32_t time) { -if(secondtask_count++%2==0) - { - flag_secondtask = 1; - PwtagTimeTask(); - if(update_tag_time>0) - { - update_tag_time--; - if(update_tag_time==0) - { - NVIC_SystemReset(); - } - } - if(Get_anchor_appdata_flag==1) - { - Get_anchor_appdata_num++; - if(Get_anchor_appdata_num>40) - { - g_com_map[YAOGEIANC_UPWENJIAN_FLAG]=0; - save_com_map_to_flash(); - delay_ms(300); - NVIC_SystemReset(); - } - } - }else{ - flag_secondtask = 0; + + flag_secondtask = 1; + enable_sleep_count++; + if(enable_sleep_count==sleep_limit_time) + { + enable_sleep_count=0; + sleep_flag=1; } - if(delaysleep_count>0) - delaysleep_count--; + + + g_start_send_flag=1; +// if(delaysleep_count>0) +// delaysleep_count--; //GPS工作逻辑 } static void move_handler(enum IO_PIN_T pin) { nomove_count=0; + Motion_Detection_callback(); } static void pca_handler(enum IO_PIN_T pin) { @@ -506,61 +420,95 @@ ip2 = (g_com_map[TCP_IP_2]>>12&0xf)*1000+(g_com_map[TCP_IP_2]>>8&0xf)*100+(g_com_map[TCP_IP_2]>>4&0xf)*10+(g_com_map[TCP_IP_2]&0xf); ip3 = (g_com_map[TCP_IP_3]>>12&0xf)*1000+(g_com_map[TCP_IP_3]>>8&0xf)*100+(g_com_map[TCP_IP_3]>>4&0xf)*10+(g_com_map[TCP_IP_3]&0xf); port = g_com_map[TCP_PORT]; - g_com_map[VERSION] = (1<<8)|0; + g_com_map[VERSION] = (1<<8)|1; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",ip0,ip1,ip2,ip3,port); } - - -void uart_change_check(uint16_t gpio_state) -{ - if(INPUT_5V_POSITION&gpio_state) - { - if(state5v==0) - { - state5v=1; - state5V_prase_flag=state5v; - gps_prase_flag=0;//解除gps解析 - uart1_change_from_gps_to_debug();//测试 - PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 - } - }else { - if(state5v==1) - { - g_com_map[MODBUS_MODE] = 0; - state5v=0; - state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 - PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS - } - } -} +extern uint8_t motor_state; +extern float motor_keeptime; +uint8_t test1; void IdleTask(void) { -//if(read_5v_input_pca()) -// { -// if(state5v==0) -// { -//// state5v=1; -//// state5V_prase_flag=state5v; -//// gps_prase_flag=0;//解除gps解析 -//// uart1_change_from_gps_to_debug();//测试 -//// PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 -// } -// }else { -// if(state5v==1) -// { -//// g_com_map[MODBUS_MODE] = 0; -//// state5v=0; -//// state5V_prase_flag=state5v; -//// gps_prase_flag=1;//恢复gps解析 -//// uart1_change_from_debug_to_gps();//测试 -//// PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS -// } -// } - UART0_CheckReceive(); + 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); +// } +// pwm_ch_enable(PWM_ID0, &usr_pwm_ch0_cfg); +// delay_ms(10000); + pwm_ch_disable(PWM_ID3); + 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); +// } +// } +// pwm_ch_enable(PWM_ID0, &usr_pwm_ch0_cfg); + break; + case 2: +// if(hardware_type==NSH1) +// {MOTOR_ON; +// }else if(hardware_type==GP) +// { +// HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); +// } + pwm_ch_enable(PWM_ID3, &usr_pwm_ch0_cfg); + break; + case 3: +// if(hardware_type==NSH1) +// {MOTOR_OFF; +// }else if(hardware_type==GP) +// { +// HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3); +// } + break; + } + } + UART0_CheckReceive(); + test1=gpio_pin_get_val(INPUT_5V_Pin); + if(gpio_pin_get_val(INPUT_5V_Pin)) + { + if(state5v==0) + { + state5v=1; + sleep_flag=0; + sleep_limit_time=30;//新增插入串口后30s不休眠 + enable_sleep_count=0;//重新插拔可以重置时间 + } + }else{ + if(state5v==1) + { + state5v=0; + sleep_limit_time=1;//新增插入串口后30s不休眠 + enable_sleep_count=0;//重新插拔可以重置时间 + } + + } } int bind_check(void) { @@ -599,7 +547,6 @@ uint8_t index1,index2,index3; int16_t Voltage_input; int tt2; -int test1,test3; uint32_t test4; void Chuanshuwenjian_Poll() { @@ -695,22 +642,28 @@ } // } } +static void pwm_callback(void *dev, uint32_t status) +{ +// uint8_t id = *(uint8_t *)dev; +// LOG_INFO(TRACE_MODULE_APP, "PWM %x interrupt callback\r\n", id); + +// gpio_pin_toggle(IO_PIN_7); +} +static void voltage_input_handler() +{ + +} extern uint8_t shengji_flag; int main(void) { board_clock_run(); boot_deinit(); board_pins_config(); - board_debug_console_open_baud(TRACE_PORT_UART0,BAUD_115200); + board_debug_console_open_baud(TRACE_PORT_UART0,BAUD_115200); // Reset reason reset_cause_get(); reset_cause_clear(); Program_Init(); - sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback); - sleep_timer_start(__MS_TO_32K_CNT(500));//测试 - Chuanshuwenjian_Poll(); -//注意串口一波特率改为9600了为了能和GPS通信上 - // Load calibration parameters from NVM uint32_t internal_flash = (REG_READ(0x40000018) >> 17) & 0x1; uint32_t external_flash = (REG_READ(0x40010030) >> 28) & 0x3; if (internal_flash || external_flash == 1) @@ -723,155 +676,73 @@ { board_calibration_params_default(); } - // Chip calibration calib_chip(); - // Disable watchdog timer wdt_close(WDT_ID0); LOG_INFO(TRACE_MODULE_APP, "UWB simple example\r\n"); - - // open system timer - //sys_timer_open(); - - // TODO 4G -// Uart_Register(UART_ID_4G, UART_ID0); -// Internet_Init(); -// TCPClient_Init(); - + + struct PWM_CFG_T usr_pwm_cfg = { + .general_prescale = 15, + .int_en = 1, + .callback = pwm_callback, + }; + pwm_open(&usr_pwm_cfg); +// pwm_ch_enable(PWM_ID0, &usr_pwm_ch0_cfg); gpio_open(); - LED_output_init();//配置adcGND引脚 -// battery_monitor_open(); -// Voltage_input=battery_monitor_get(); -// battery_monitor_close(); - + LED_output_init();//配置adcGND引脚 adc_open(&usr_adc_cfg); -// IIC2_Init(); - Accelerometer_Init(); -// PCA9555_init(); - if(!read_5v_input_pca()) - { - Set4LEDColor(BLUE,GREEN,WHITE,GREEN); - delay_ms(500); - Set4LEDColor(RED,WHITE,RED,WHITE); - delay_ms(500); - //Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); - } - //IO_control_init(); -// io_pin_mux_set(SCL_PIN, IO_FUNC0);//测试测距波形 -// gpio_pin_set_dir(SCL_PIN , GPIO_DIR_IN, 0); -// io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL4); - //gps_air780_power_change(0,1);//开启gps,4G -//加速度计初始化必须在IO_control_init之前因为复用SDA引脚 - gpio_pin_clr(ADC_GND_ENABLE); - Program_Init(); - //uart_open(UART_ID1, &test_uart_cfg); - // uart1_change_from_gps_to_debug(); - //Uart1GpsRecDebugSend(); + IIC2_Init(); + SC7A22H_Motion_Detection_Init(); + gpio_pin_clr(ADC_GND_ENABLE); + Program_Init(); uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); - -// Initialize low power mode power_init(); - //AIR780E_Reset(); //4G模块重启,耗时1.5秒,这个是无法同步的关键 sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback); - sleep_timer_start(__MS_TO_32K_CNT(500));//测试 - //sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试 - // board_5V_input_init(voltage_input_handler); -// PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 + + #ifdef _UWB_1HZ + sleep_timer_start(__MS_TO_32K_CNT(1000));//测试 + #else + sleep_timer_start(__MS_TO_32K_CNT(5000));//测试 + #endif + board_5V_input_init(voltage_input_handler); + adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 board_acceleration_detection_init(move_handler); - pca_input_detection_init(pca_handler);//pca检测输入 - Uwb_init(); - OpenUWB(); - LOG_INFO(TRACE_MODULE_APP,"初始化_uwb_rx打开\r\n"); - - //board_4GUsart_detection_init(_4gUsart_handler); + Uwb_init(); + Dw1000_App_Init(); while (1) { - if(!shengji_flag) - uwb_app_poll(); -// Lora_upanc_ing_Poll(); - //test4=gpio_pin_get_val(SCL_PIN); - //UWBPoll(); -// if(!power_low_flag)//确认是否休眠下才开启功能 -// { -// if(flag_TCP_reconnectting||IfTCPConnected()) -// { -// // LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n"); -// -//// if(flag_4guart_needinit) -//// { -//// flag_4guart_needinit = 0; -//// AIR780EUartInit(); -//// }//yuan -// if(flag_4G_recdata==1) -// { -// flag_4G_recdata = 2; -// -// //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2); -// Socket_RecvAll(); -// } -//// air780_led_on(); -// Internet_Poll(); -// HIDO_ATLitePoll(); -// HIDO_TimerPoll(); -// TCPClient_Poll(); -//// air780_led_off(); -// } -// } if(flag_secondtask) { flag_secondtask = 0; SecondTask(); - + } + if(g_start_send_flag) + { + g_start_send_flag = 0; + gpio_pin_set(IO_PIN_7);//亮 + SwitchTagState(); + gpio_pin_clr(IO_PIN_7);//灭 } // PowerTask(); -// IMUTask(); + IMUTask(); // UserKeyTask(); IdleTask(); #ifndef DEBUG_MODE -//if(flag_sleeptimer) -// if(!gps_need_data_flag&&!gpio_pin_get_val(INPUT_5V_Pin)&&((IfTCPConnected()&&Socket_IsSendQueueEmpty(0))||!flag_TCP_reconnectting&&!IfTCPConnected())) //进入休眠条件(与关系,全满足才进):1.没有5V输入 2 TCP已连接时发送队列为空||TCP无连接时不在重连状态。 -// { -// if(!flag_4guart_needinit) -// { -// LOG_INFO(TRACE_MODULE_APP, "4G RX 中断打开\r\n"); -// board_4GUsart_detection_init(_4gUsart_handler); - -// } -// flag_sleeptimer =0; - //LOG_INFO(TRACE_MODULE_APP, "进入休眠\r\n"); -// flag_4guart_needinit = 1; - -// trace_flush(); -// uint32_t lock = int_lock(); -// //LOG_INFO(TRACE_MODULE_APP, "进入低功耗"); -// power_enter_power_down_mode(0); -// int_unlock(lock); -// }//yuan - - if(delaysleep_count==0) - if(!gps_power_state&&!gpio_pin_get_val(INPUT_5V_Pin)&&((IfTCPConnected()&&AIR780E_IsIPIdle()&&Socket_IsSendQueueEmpty(0))||((!flag_TCP_reconnectting)&&!IfTCPConnected())||power_low_flag)) - { -// test1=gpio_pin_get_val(_4G_USART_RX_Pin); - uint32_t lock; - //flag_4guart_needinit = 1; -// Internet_Poll(); -// HIDO_ATLitePoll(); -// HIDO_TimerPoll(); -// TCPClient_Poll(); - - // delay_us(300000); - trace_flush(); - lock = int_lock(); + + if(sleep_flag&&state5v==0){//开始一段时间无休眠 + trace_flush(); + uint32_t lock = int_lock(); + //LOG_INFO(TRACE_MODULE_APP, "进入低功耗"); + //唤醒源设置MK8000修改 + //board_5V_input_init(voltage_input_handler); + //sleep_timer_start(g_com_map[COM_INTERVAL]); power_enter_power_down_mode(0); - uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); -// test3=gpio_pin_get_val(_4G_USART_RX_Pin); - //LOG_INFO(TRACE_MODULE_APP, "进入休眠\r\n"); + uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); + //LOG_INFO(TRACE_MODULE_APP, "进入低功耗"); int_unlock(lock); - } - + } #endif } } -- Gitblit v1.9.3