#include "dw_driver.h" #include "deca_sleep.h" void Reset_DW1000(void) { GPIO_InitTypeDef GPIO_InitStructure; // Enable GPIO used for DW1000 reset GPIO_InitStructure.GPIO_Pin = DW1000_RSTn; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure); //drive the RSTn pin low GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn); //put the pin back to tri-state ... as input GPIO_InitStructure.GPIO_Pin = DW1000_RSTn; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure); deca_sleep(2); } void DW_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable GPIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Enable GPIO used for DW1000 wakeup GPIO_InitStructure.GPIO_Pin = DW1000_WAKEUP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_WAKEUP_GPIO, &GPIO_InitStructure); // Enable GPIO used for DW1000 IRQ GPIO_InitStructure.GPIO_Pin = DW1000_IRQ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //IRQ pin should be Pull Down to prevent unnecessary EXT IRQ while DW1000 goes to sleep mode GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_IRQ_GPIO, &GPIO_InitStructure); // Connect EXTI Line to GPIO Pin GPIO_EXTILineConfig(DECAIRQ_EXTI_PORT, DECAIRQ_EXTI_PIN); // Configure EXTI line EXTI_InitStructure.EXTI_Line = DECAIRQ_EXTI; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //MPW3 IRQ polarity is high by default EXTI_InitStructure.EXTI_LineCmd = DISABLE; EXTI_Init(&EXTI_InitStructure); }