From 31a18a379b5d7073705895dba364ca3b76d5d44e Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 13 八月 2025 09:54:25 +0800 Subject: [PATCH] 开发完成 --- keil/include/main/main.c | 325 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 224 insertions(+), 101 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 0f062ee..9567729 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -50,6 +50,9 @@ #include "mk_uart.h" #include "mk_spi.h" #include "mk_flash.h" +#include "Usart.h" +#include <serial_at_cmd_app.h> +#include <global_param.h> #include "board.h" @@ -110,6 +113,14 @@ //***************************************************************************** #define WSF_BUF_POOLS 5 void Fira_Change_Task(void); +extern uint8_t normal_flag,log_4g_enable_flag,lora_tx_flag; +extern uint16_t ip0,ip1,ip2,ip3,port; +uint8_t group_id,enable_sleep_count; +uint32_t dev_id; +uint16_t disoffset; +uint16_t set_mk_time; +uint8_t flag_sleeptimer,flag_secondtask,secondtask_count; +float nomove_count; // Default pool descriptor. static wsfBufPoolDesc_t poolDescriptors[WSF_BUF_POOLS] = { {32, 26}, {64, 24}, {128, 4}, {256 + 32, 4}, {1024 + 32, 2}, @@ -119,7 +130,143 @@ { // LOG_INFO(TRACE_MODULE_APP, "Wake up by sleep timer %d\r\n", time); } +extern uint8_t start_wait_flag; +extern int16_t end_count1; +static void sleep_timer_callback_normal(void *dev, uint32_t time) +{ + if(secondtask_count++%2==0) + { + flag_secondtask = 1; + }else{ + flag_secondtask = 0; + } + if(start_wait_flag)//lora升级等待超时标志 + { + if(end_count1--<=0) + start_wait_flag=0; + } +// if(delaysleep_count>0) +// delaysleep_count--; +} +void Program_Init(void) +{ + Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为 + + parameter_init_anchor();//g_com_map表初始化角色默认为基站 + dev_id=g_com_map[DEV_ID];//这里不太对 + group_id=(uint8_t)g_com_map[GROUP_ID];//组ID +// tag_frequency = 1000/g_com_map[COM_INTERVAL];//测距频率这个存的是测距时间 + memcpy(&disoffset,&g_com_map[DIST_OFFSET],2); +// g_com_map[ALARM_DISTANCE1] = 40; +// g_com_map[ALARM_DISTANCE2] = 40; +// warning_distance=g_com_map[ALARM_DISTANCE1]; +// prewarning_distance=g_com_map[ALARM_DISTANCE2]; + //g_com_map[SEND_4G_SECOND] +// if(g_com_map[SEND_4G_SECOND]<30) +// { +// gps_open_flag=0; +// }else{ +// gps_open_flag=1; +// } + g_com_map[MODBUS_MODE] = 0; + log_4g_enable_flag=g_com_map[LOG_4G_ENABLE]; + ip0 = (g_com_map[TCP_IP_0]>>12&0xf)*1000+(g_com_map[TCP_IP_0]>>8&0xf)*100+(g_com_map[TCP_IP_0]>>4&0xf)*10+(g_com_map[TCP_IP_0]&0xf); + ip1 = (g_com_map[TCP_IP_1]>>12&0xf)*1000+(g_com_map[TCP_IP_1]>>8&0xf)*100+(g_com_map[TCP_IP_1]>>4&0xf)*10+(g_com_map[TCP_IP_1]&0xf); + 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; + LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); +// if(gpio_pin_get_val(MODE_CHANGE_PIN)) +// LOG_INFO(TRACE_MODULE_APP,"固件版本:MK_Air_tag模式 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); +// else{ +// LOG_INFO(TRACE_MODULE_APP,"固件版本:MK_免布线模式 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 MinuteTask(void) +{ +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 +} +/********************************************************************************************************/ +static void Lora_irq_handler(enum IO_PIN_T pin) +{ + RadioIrqProcess(); +} +void SecondTask(void) +{static uint8_t second_count; + + if(second_count++>60) + { + second_count = 0; + MinuteTask(); + } + lora_tx_flag=1; + + //Lora_Tx_Poll(); +// //UWB状态检测 +//if(!power_low_flag)//低供电下不需要检测重连 +// { +// if(IfTCPConnected()) +// { +// TCP_reconnect_timer =0; +// flag_TCP_reconnectting = 0; +// } else { +// if(TCP_reconnect_timer<30)//如果TCP没有连接,每隔10分钟尝试连接30秒 +// { +// flag_TCP_reconnectting = 1; +// } else { +// flag_TCP_reconnectting = 0; +// } +// if(TCP_reconnect_timer++>600) +// { +// TCP_reconnect_timer = 0; +// } +// } +// } + + HIDO_TimerTick(); + if(nomove_count<=g_com_map[NOMOVESLEEP_TIME])//防止溢出 + nomove_count++; + else{ + nomove_count=g_com_map[NOMOVESLEEP_TIME]+1; + } +} +void spi_init(void) +{ + struct SPI_CFG_T usr_spi_cfg = + { + .bit_rate = 1000000, + .data_bits = 8, +//#if TEST_SPI_MASTER + .slave = 0, +//#else +// .slave = 1, +//#endif + .clk_phase = 0, + .clk_polarity = 0, + .ti_mode = 0, +//#if (TEST_SPI_MODE == TEST_SPI_POLL_MODE) + .dma_rx = false, + .dma_tx = false, + .int_rx = false, + .int_tx = false, +//#elif (TEST_SPI_MODE == TEST_SPI_INTERUPT_MODE) +// .dma_rx = false, +// .dma_tx = false, +// .int_rx = true, +// .int_tx = true, +//#elif (TEST_SPI_MODE == TEST_SPI_DMA_MODE) +// .dma_rx = true, +// .dma_tx = true, +// .int_rx = false, +// .int_tx = false, +//#endif + }; + + spi_open(SPI_ID0, &usr_spi_cfg); +} static void board_init(void) { uint32_t internal_flash = (REG_READ(0x40000018) >> 17) & 0x1; @@ -127,6 +274,7 @@ // Clock configuration board_clock_run(); + boot_deinit();//新加的 // Pin configuration board_pins_config(); // Trace configuration @@ -163,10 +311,14 @@ // Configure IO_04 for RF Switch gpio_pin_set_dir(IO_PIN_4, GPIO_DIR_OUT, 0); #else - // led - board_led_init(); -// board_led_on(BOARD_LED_1); + + spi_init(); +// // 模式判断脚和spi nrst脚初始化 + board_mode_pin_init(); + Program_Init(); + //board_led_on(BOARD_LED_1); #endif + Board_LORA_NVIC_Init(Lora_irq_handler); board_configure(); } @@ -195,109 +347,80 @@ void Fira_Change_Task(void) { } -extern uint8_t normal_flag; -int main(void) + +static void uart_receive_callback(void *dev, uint32_t err_code) { - // Initialize MCU system + uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); +} +void uart0_receive_callback(void *dev, uint32_t err_code) +{ + uart_receive(UART_ID0,m_EUART0_DMA_RXBuf,EUART0_RX_BUF_SIZE,uart0_receive_callback); +} +uint8_t bat_percent; +uint8_t stationary_flag; +extern uint8_t send_flag; +extern uint8_t txdone; +void mcu_deep_sleep(void) +{ + uint32_t lock; + trace_flush(); + + lock = int_lock(); + sleep_timer_stop(); + power_enter_power_down_mode(1); + int_unlock(lock); +} +uint8_t result11; +int main(void) +{ + // Initialize MCU system board_init(); - - // Disable watchdog timer wdt_close(WDT_ID0); - LOG_INFO(TRACE_MODULE_APP, "UCI FiRa example\r\n"); - - // Platform init for WSF - PalSysInit(); - - // Initialize os - - // - // Set up timers for the WSF scheduler. - // - WsfOsInit(); - WsfTimerInit(); - sys_tick_callback_set(WsfTimerUpdateTicks); - - // - // Initialize a buffer pool for WSF dynamic memory needs. - // - uint32_t wsfBufMemLen = WsfBufInit(WSF_BUF_POOLS, poolDescriptors); - - if (wsfBufMemLen > FREE_MEM_SIZE) { - LOG_INFO(TRACE_MODULE_APP, "Memory pool is not enough %d\r\n", wsfBufMemLen - FREE_MEM_SIZE); - } -// - // Create app task - // - wsfHandlerId_t handlerId = WsfOsSetNextHandler(app_handler); - app_init(handlerId); + LOG_INFO(TRACE_MODULE_APP,"固件版本:MK_lora升级模式 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); + uart0_Init_normal(); + Lora_1268_Init(); + //LOG_INFO(TRACE_MODULE_APP," 切换6\r\n"); + SwitchLoraSettings(0x1f4,7,22); +// Uwb_init();//默认为我们测距配置 +// OpenUWB(); + uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); + uart_receive(UART_ID0,m_EUART0_DMA_RXBuf,EUART0_RX_BUF_SIZE,uart0_receive_callback); + power_init(); + uint16_t tmp = 0xFFFF; + result11 = flash_open(FLASH_ID0,NULL); + if(!result11) + { + LOG_INFO(TRACE_MODULE_APP," 打开flash成功\r\n"); + } + result11 = flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APPFLAG + if(!result11) + { + LOG_INFO(TRACE_MODULE_APP," 擦除标志位成功\r\n"); + } + result11 = flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2); + if(!result11) + { + LOG_INFO(TRACE_MODULE_APP," 写入标志位FFFF成功\r\n"); + } + delay_ms(100); + sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback_normal); + sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试 + while (1) + { +// uwb_app_poll();//我们的测距逻辑 +// if(flag_secondtask) +// { +// flag_secondtask = 0; +// SecondTask(); +// //Lora_Tx_Poll(); +// } +// Lora_Tx_Poll(); + LoraUp_Poll();//网关升级 + IdleTask(); + } + } - // - // Create ranging task or test task - // - handlerId = WsfOsSetNextHandler(ranging_handler); - ranging_init(handlerId); - -#ifdef UWB_UCI_TEST_EN - // Create test task - handlerId = WsfOsSetNextHandler(uwb_test_handler); - uwb_test_init(handlerId); -#endif - - uwb_open(); - - // set advanced parameters - struct PHY_ADV_CONFIG_T adv_config = - { - // RPM0: 40, RPM3: 60 - .thres_fap_detect = 60, - // RPM0: 4, RPM3: 8 - .nth_scale_factor = 8, - // RFrame SP0: 0/1, Others: 0/1/2/3 - .ranging_performance_mode = 3, -#if RX_ANT_PORTS_NUM == 4 - .skip_weakest_port_en = 1, -#else - .skip_weakest_port_en = 0, -#endif - }; - phy_adv_params_configure(&adv_config); - - // which RX ports will be used for AoA/PDoA - phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION); - - uwbs_init(); - uwb_app_config.ranging_flow_mode = (uint8_t)(RANGING_FLOW_FIRA); - uwb_app_config.filter_en = (uint8_t)(FILTER_EN); - uwb_app_config.session_param.tx_power_level = board_param.tx_power_fcc[CALIB_CH(uwb_app_config.ppdu_params.ch_num)]; - uwb_app_config.ppdu_params.rx_ant_id = (uint8_t)(RX_MAIN_ANT_PORT); - - - // - // Create UCI transmission layer task - // - handlerId = WsfOsSetNextHandler(uci_tl_handler); - uci_tl_init(handlerId); - - // Initialize low power mode - power_init(); -#if LOW_POWER_EN - power_mode_request(POWER_UNIT_USER, POWER_MODE_POWER_DOWN); - uwb_app_config.low_power_en = 1; -#else - power_mode_request(POWER_UNIT_USER, POWER_MODE_SLEEP); - uwb_app_config.low_power_en = 0; -#endif - - // Enable sleep timer - sleep_timer_open(true, SLEEP_TIMER_MODE_ONESHOT, sleep_timer_callback); - - while (1) - { - wsfOsDispatcher(); - power_manage(); - } - } void app_restore_from_power_down(void) -- Gitblit v1.9.3