From 7742d3182f57e7aad7900e70314f53d761937c51 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 12 二月 2025 09:23:04 +0800 Subject: [PATCH] 1.27,加入了uwb初始化过了才会触发中断。uwb初始化的时候复位拉低1000ms --- Src/application/dw_app.c | 46 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c index 25c2388..8cbe3df 100644 --- a/Src/application/dw_app.c +++ b/Src/application/dw_app.c @@ -80,14 +80,14 @@ 5, #endif DWT_PRF_64M, /* Pulse repetition frequency. */ - DWT_PLEN_128, /* Preamble length. */ + DWT_PLEN_64, /* Preamble length. */ DWT_PAC8, /* Preamble acquisition chunk size. Used in RX only. */ 9, /* TX preamble code. Used in TX only. */ 9, /* RX preamble code. Used in RX only. */ 1, /* Use non-standard SFD (Boolean) */ DWT_BR_6M8, /* Data rate. */ DWT_PHRMODE_STD, /* PHY header mode. */ - (129 + 8 - 8) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */ + (65 + 8 - 8) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */ }; uint32_t uwbid=0; @@ -104,15 +104,15 @@ /* Configure DW1000. See NOTE 6 below. */ dwt_configure(&config);//配置DW1000 - dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1); +// dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1); /* Apply default antenna delay value. See NOTE 1 below. */ dwt_setrxantennadelay(RX_ANT_DLY); //设置接收天线延迟 dwt_settxantennadelay(TX_ANT_DLY); //设置发射天线延迟 - dwt_setrxtimeout(1000);//设定接收超时时间,0位没有超时时间 - dwt_rxenable(0);//打开接收 +// dwt_setrxtimeout(1000);//设定接收超时时间,0位没有超时时间 +// dwt_rxenable(0);//打开接收 // uwbid=dwt_readdevid(); /* Set expected response's delay and timeout. See NOTE 4 and 5 below. * As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */ @@ -140,19 +140,51 @@ u32 id; void UWB_Wkup(void) { - +u8 iderror_count = 0; SPIx_CS_GPIO->BRR = SPIx_CS; delay_us(600); SPIx_CS_GPIO->BSRR = SPIx_CS; id = dwt_readdevid() ; while (0xDECA0130!=id) { - u8 iderror_count = 0; + id = dwt_readdevid() ; if(iderror_count++>100) { + iderror_count=0; printf("UWB芯片ID错误\r\n"); break; } } } +uint8_t uwb_errorflag; +uint8_t uwbrxflag; +void UWB_RXON() +{ + if(!uwb_errorflag) + { + uwbrxflag=1; +// Dw1000_Init(); + UWB_Wkup(); +// dwt_forcetrxoff(); +// dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0); +// delay_ms(1); + + dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1); + dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间 + dwt_rxenable(0); +// HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); + } +} +void UWB_RXOFF() +{ + if(!uwb_errorflag) + { + uwbrxflag=0; + dwt_setinterrupt( DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0); + dwt_forcetrxoff(); + delay_ms(1); + dwt_entersleep(); +// HAL_NVIC_DisableIRQ(EXTI4_15_IRQn); + } +} \ No newline at end of file -- Gitblit v1.9.3