From 4cdc4b3d488e15b1d6572bdcd61a2ce92d0c8c9b Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 16 五月 2025 18:13:14 +0800 Subject: [PATCH] 成功分离2个测距功能 --- keil/include/main/main.c | 86 +++++++++++++++++----------- keil/include/components/app/src/ranging_fira.c | 15 +++- pin_config.c | 13 ++++ keil/include/drivers/mk_uwb.c | 16 ++-- keil/include/board/board.h | 1 keil/include/board/board.c | 8 +- user_config.h | 3 7 files changed, 91 insertions(+), 51 deletions(-) diff --git a/keil/include/board/board.c b/keil/include/board/board.c index 875e4af..9f59a21 100644 --- a/keil/include/board/board.c +++ b/keil/include/board/board.c @@ -408,10 +408,10 @@ void board_led_init(void) { - //灯 - io_pin_mux_set(LED_PIN, IO_FUNC0); - gpio_pin_set_dir( LED_PIN, GPIO_DIR_OUT, 0); - io_pull_set(LED_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL4); + // 判断是Airtag还是免布线模式 + io_pin_mux_set(MODE_CHANGE_PIN, IO_FUNC0); + gpio_pin_set_dir( MODE_CHANGE_PIN, GPIO_DIR_IN, 0); + io_pull_set(MODE_CHANGE_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL2); } void board_led_on(enum IO_PIN_T idx) diff --git a/keil/include/board/board.h b/keil/include/board/board.h index 640d879..c1f6482 100644 --- a/keil/include/board/board.h +++ b/keil/include/board/board.h @@ -143,6 +143,7 @@ */ void board_pins_config(void); +void boot_deinit(void); /** * @brief Configure debug trace port. * @param[in] port Trace port diff --git a/keil/include/components/app/src/ranging_fira.c b/keil/include/components/app/src/ranging_fira.c index 55e8933..beb9436 100644 --- a/keil/include/components/app/src/ranging_fira.c +++ b/keil/include/components/app/src/ranging_fira.c @@ -136,12 +136,14 @@ // This function will be called by uwbapi_session_init() void app_session_init(void) -{ - normal_uwb_change_to_fira();//变为fira配置的uwb +{ + #ifdef MY_MODE + normal_uwb_change_to_fira(); + #endif // register process handler for MAC TX done and RX done mac_register_process_handler(ranging_tx_process, ranging_rx_process); + uwbs_handler_init(&op); - uwbs_handler_init(&op); } void ranging_configure(void) @@ -309,10 +311,10 @@ .phy_cfg.rx_ant_id = UWB_RX_ANT_3, /* UWB RX antenna port */ }; #endif -uint8_t normal_flag=1; + void uwb_fira_init(void) { - uwb_open(); +// uwb_open(); // set advanced parameters struct PHY_ADV_CONFIG_T adv_config = @@ -340,6 +342,7 @@ 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); } +uint8_t normal_flag=0; void uwb_normal_init(void) { Uwb_init(); @@ -403,7 +406,9 @@ void ranging_stop(void) { ranging_env.enable = 0; + #ifdef MY_MODE fira_uwb_change_to_normal();//变为normal配置的uwb + #endif ranging_monitor_stop(); LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "Ranging stop\r\n"); } diff --git a/keil/include/drivers/mk_uwb.c b/keil/include/drivers/mk_uwb.c index 320fe04..d215f0e 100644 --- a/keil/include/drivers/mk_uwb.c +++ b/keil/include/drivers/mk_uwb.c @@ -402,22 +402,22 @@ { ranging_ant_delays_set(i, board_param.ant_delays[ch_idx][i]); } - LOG_INFO(TRACE_MODULE_DRIVER, "ToF ant delays %d %d %d %d\r\n", board_param.ant_delays[ch_idx][0], board_param.ant_delays[ch_idx][1], - board_param.ant_delays[ch_idx][2], board_param.ant_delays[ch_idx][3]); + //LOG_INFO(TRACE_MODULE_DRIVER, "ToF ant delays %d %d %d %d\r\n", board_param.ant_delays[ch_idx][0], board_param.ant_delays[ch_idx][1], + // board_param.ant_delays[ch_idx][2], board_param.ant_delays[ch_idx][3]); pdoa_ant_delays_set(&board_param.pdoa_delays[ch_idx][0], 4); - LOG_INFO(TRACE_MODULE_DRIVER, "PDoA delays %d %d %d %d\r\n", board_param.pdoa_delays[ch_idx][0], board_param.pdoa_delays[ch_idx][1], - board_param.pdoa_delays[ch_idx][2], board_param.pdoa_delays[ch_idx][3]); + //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA delays %d %d %d %d\r\n", board_param.pdoa_delays[ch_idx][0], board_param.pdoa_delays[ch_idx][1], + // board_param.pdoa_delays[ch_idx][2], board_param.pdoa_delays[ch_idx][3]); pdoa_gain_set(&board_param.pdoa_gains[ch_idx][0], 4); - LOG_INFO(TRACE_MODULE_DRIVER, "PDoA gains %d %d %d %d\r\n", board_param.pdoa_gains[ch_idx][0], board_param.pdoa_gains[ch_idx][1], - board_param.pdoa_gains[ch_idx][2], board_param.pdoa_gains[ch_idx][3]); + //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA gains %d %d %d %d\r\n", board_param.pdoa_gains[ch_idx][0], board_param.pdoa_gains[ch_idx][1], + // board_param.pdoa_gains[ch_idx][2], board_param.pdoa_gains[ch_idx][3]); pdoa_ant_space_set(board_param.pdoa_ant_space); - LOG_INFO(TRACE_MODULE_DRIVER, "PDoA ant space %d\r\n", board_param.pdoa_ant_space); + //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA ant space %d\r\n", board_param.pdoa_ant_space); pdoa_angle_offset_set(board_param.pdoa_offsets); - LOG_INFO(TRACE_MODULE_DRIVER, "PDoA angle offsets %d %d\r\n", board_param.pdoa_offsets[0], board_param.pdoa_offsets[1]); + //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA angle offsets %d %d\r\n", board_param.pdoa_offsets[0], board_param.pdoa_offsets[1]); } void *uwb_configure(uint8_t mode, uint8_t tx_power_level, const struct UWB_CONFIG_T *ppdu_params) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index b2df95a..6c9ab6b 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -158,6 +158,7 @@ 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); } + static void board_init(void) { uint32_t internal_flash = (REG_READ(0x40000018) >> 17) & 0x1; @@ -165,6 +166,7 @@ // Clock configuration board_clock_run(); + boot_deinit();//新加的 // Pin configuration board_pins_config(); // Trace configuration @@ -203,7 +205,7 @@ #else Program_Init(); // led - // board_led_init(); + board_led_init(); // board_led_on(BOARD_LED_1); #endif board_configure(); @@ -241,13 +243,15 @@ } int main(void) -{ - // Initialize MCU system +{ + // Initialize MCU system board_init(); - - // Disable watchdog timer + // Disable watchdog timer wdt_close(WDT_ID0); LOG_INFO(TRACE_MODULE_APP, "UCI FiRa example\r\n"); + if(gpio_pin_get_val(MODE_CHANGE_PIN)) + { + // Platform init for WSF PalSysInit(); @@ -288,35 +292,40 @@ uwb_test_init(handlerId); #endif +#ifndef MY_MODE 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); + // 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); + // 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); + 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); + +#elif defined MY_MODE Uwb_init();//默认为我们测距配置 OpenUWB(); + uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); +#endif // // Create UCI transmission layer task // @@ -335,19 +344,30 @@ // Enable sleep timer sleep_timer_open(true, SLEEP_TIMER_MODE_ONESHOT, sleep_timer_callback); - uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); + while (1) { wsfOsDispatcher(); +#ifdef MY_MODE if(normal_flag) { - + IdleTask(); + } +#endif + power_manage(); + } + }else{ +// adc_open(&usr_adc_cfg); + Uwb_init();//默认为我们测距配置 + OpenUWB(); + uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); + while (1) + { uwb_app_poll();//我们的测距逻辑 IdleTask(); } - power_manage(); - } - + } + } void app_restore_from_power_down(void) diff --git a/pin_config.c b/pin_config.c index 884c6cc..3b07f6c 100644 --- a/pin_config.c +++ b/pin_config.c @@ -40,6 +40,18 @@ #include "mk_io.h" #include "board.h" +void boot_deinit(void) +{ + //将boot中串口返回普通gpio +// UART0 TX/RX + io_pin_mux_set(IO_PIN_5, IO_FUNC0); + io_pin_mux_set(IO_PIN_6, IO_FUNC0); + // UART1 RX/TX + io_pin_mux_set(IO_PIN_10, IO_FUNC0); + io_pin_mux_set(IO_PIN_9, IO_FUNC0); + uart_close(UART_ID1);//解绑原来串口1 + uart_close(UART_ID0);//解绑原来串口0 +} void board_pins_config(void) { @@ -80,6 +92,7 @@ io_pin_mux_set(IO_PIN_0, IO_FUNC4); io_pin_mux_set(IO_PIN_1, IO_FUNC4); + #elif BOARD_TYPE == MK8000_DK // UART1 TX/RX diff --git a/user_config.h b/user_config.h index da1d376..bf92b71 100644 --- a/user_config.h +++ b/user_config.h @@ -305,7 +305,7 @@ /// Antenna pattern #define ANT_PATTERN (ANT_PATTERN_LINEAR) #endif - +//#define MY_MODE /** Enable load cap automatic tuning during ranging procedure */ #define XTAL_AUTO_TUNE_EN (1) @@ -328,6 +328,7 @@ #define UWB_RX_WINDOW (US_TO_PHY_TIMER_COUNT(750)) #define LED_PIN IO_PIN_4 #define INPUT_5V_Pin IO_PIN_11 +#define MODE_CHANGE_PIN IO_PIN_4 /* =========================================================================================================================== */ /* ================ End ================ */ /* =========================================================================================================================== */ -- Gitblit v1.9.3