diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 82ce8a0..b9f7703 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -96,10 +96,21 @@ void MX_TOF_Init(void); #define TOF_C_INT_Pin GPIO_PIN_10 #define TOF_C_INT_GPIO_Port GPIOA #define TOF_C_INT_EXTI_IRQn EXTI15_10_IRQn - #define TOF_C_XSHUT_Pin GPIO_PIN_3 #define TOF_C_XSHUT_GPIO_Port GPIOB +#define TOF_L_INT_Pin GPIO_PIN_7 +#define TOF_L_INT_GPIO_Port GPIOC +#define TOF_L_INT_EXTI_IRQn EXTI9_5_IRQn +#define TOF_L_XSHUT_Pin GPIO_PIN_10 +#define TOF_L_XSHUT_GPIO_Port GPIOB + +#define TOF_R_INT_Pin GPIO_PIN_10 +#define TOF_R_INT_GPIO_Port GPIOA +#define TOF_R_INT_EXTI_IRQn EXTI15_10_IRQn +#define TOF_R_XSHUT_Pin GPIO_PIN_5 +#define TOF_R_XSHUT_GPIO_Port GPIOB + #define STS_SERVICE_MASK_L0 (0) // Service normal , no mask off #define STS_SERVICE_MASK_L1 (1) // service mask level 1, sensing data upload in silence mode, node appearance silence (no LED, No display, no sound, no vibration) #define STS_SERVICE_MASK_L2 (2) // service mask level 2, NO sensing data upload (event or periodicity) diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 89e3434..2c0ddb1 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -93,18 +93,41 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(BUT1_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : TOF_C_INT_Pin TOF_R_INT_Pin */ + /*Configure GPIO pins : TOF_C_INT_Pin */ GPIO_InitStruct.Pin = TOF_C_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(TOF_C_INT_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pins : TOF_L_INT_Pin */ + GPIO_InitStruct.Pin = TOF_L_INT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(TOF_L_INT_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pins : TOF_R_INT_Pin */ + GPIO_InitStruct.Pin = TOF_R_INT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(TOF_R_INT_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : TOF_C_XSHUT_Pin */ + /*Configure GPIO pins : TOF_C_XSHUT_Pin */ GPIO_InitStruct.Pin = TOF_C_XSHUT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(TOF_C_XSHUT_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pins : TOF_L_XSHUT_Pin */ + GPIO_InitStruct.Pin = TOF_L_XSHUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(TOF_L_XSHUT_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pins : TOF_R_XSHUT_Pin */ + GPIO_InitStruct.Pin = TOF_R_XSHUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(TOF_R_XSHUT_GPIO_Port, &GPIO_InitStruct); + /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); @@ -115,7 +138,10 @@ void MX_GPIO_Init(void) HAL_NVIC_SetPriority(TOF_C_INT_EXTI_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TOF_C_INT_EXTI_IRQn); - + HAL_NVIC_SetPriority(TOF_L_INT_EXTI_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TOF_L_INT_EXTI_IRQn); + HAL_NVIC_SetPriority(TOF_R_INT_EXTI_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TOF_R_INT_EXTI_IRQn); } /* USER CODE BEGIN 2 */ diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index dd3778c..1a71aeb 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -270,7 +270,7 @@ void STS_YunhornSTSEventP3_Process(void) void STS_YunhornSTSEventP4_Process(void) { STS_SENSOR_Power_ON(0); - STS_SENSOR_Power_OFF(0); + APP_LOG(TS_OFF, VLEVEL_L, "\r\n P4 Testing Process\r\n"); STS_TOF_VL53L0X_Range_Process(); @@ -450,9 +450,9 @@ void STS_SENSOR_Power_ON(uint8_t cnt) case 1: case 2: #if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED)) - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET); -#endif HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET); +#endif + break; default: @@ -469,7 +469,7 @@ void STS_SENSOR_Power_OFF(uint8_t cnt) #if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED)) HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET); #endif - HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET); + break; default: break; diff --git a/TOF/App/X-WL55_WLE5_53L0X.c b/TOF/App/X-WL55_WLE5_53L0X.c index 6350539..9d41538 100644 --- a/TOF/App/X-WL55_WLE5_53L0X.c +++ b/TOF/App/X-WL55_WLE5_53L0X.c @@ -196,13 +196,23 @@ int XWL55_WLE5_53L0X_Init(void) } -void XWL55_WLE5_53L0X_Reset(void) +void XWL55_WLE5_53L0X_ResetId(uint8_t DevNo, int state) { - HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_RESET); - HAL_Delay(30); - HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_SET); - HAL_Delay(30); + switch(DevNo) { + case XNUCLEO53L0X_LEFT: + HAL_GPIO_WritePin(TOF_L_XSHUT_GPIO_Port, TOF_L_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET)); + break; + + case XNUCLEO53L0X_CENTER: + HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET)); break; + + case XNUCLEO53L0X_RIGHT: + HAL_GPIO_WritePin(TOF_R_XSHUT_GPIO_Port, TOF_R_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET)); break; + default: + + break; + } } diff --git a/TOF/App/X-WL55_WLE5_53L0X.h b/TOF/App/X-WL55_WLE5_53L0X.h index 329c26c..340a94e 100644 --- a/TOF/App/X-WL55_WLE5_53L0X.h +++ b/TOF/App/X-WL55_WLE5_53L0X.h @@ -47,7 +47,7 @@ * * require @a VL53L0X_HAVE_UART */ -# define VL53L0X_UART_DMA_RX 0 +#define VL53L0X_UART_DMA_RX 0 #endif //VL53L0X_UART_DMA_RX #ifndef VL53L0X_UART_DMA_TX @@ -57,7 +57,7 @@ * * require @a VL53L0X_HAVE_UART */ -# define VL53L0X_UART_DMA_TX 1 +#define VL53L0X_UART_DMA_TX 1 #endif //VL53L0X_UART_DMA_RX @@ -77,7 +77,7 @@ * @warning only F401 */ -# define VL53L0X_UART_DMA_TX_IRQ_PRI 0 +#define VL53L0X_UART_DMA_TX_IRQ_PRI 0 #endif #ifndef VL53L0X_UART_IRQ_PRI @@ -85,7 +85,7 @@ * User override default uart irq priority 0 to fit application needs * @warning only supported for f401 */ -# define VL53L0X_UART_IRQ_PRI 0 +#define VL53L0X_UART_IRQ_PRI 0 #endif /* provided by MSP part */ @@ -119,7 +119,7 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void); * Must be set to non 0 for shared interrupt line * see @sa VL53L0X_GPIO1_C_OPTION */ -# define VL53L0X_GPIO1_SHARED 0 +#define VL53L0X_GPIO1_SHARED 0 #endif @@ -132,15 +132,15 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void); * @li not defined or 0 : U14=On and U17=off => GPIO1_C = PA4 * @li defined and not 0 : U14=Off and U17=on => GPIO1_C = PC1 */ -# define VL53L0X_GPIO1_C_OPTION 1 +#define VL53L0X_GPIO1_C_OPTION 1 #endif -# define VL53L0X_GPIO1_C_GPIO_PORT GPIOA -# define VL53L0X_GPIO1_C_CLK_ENABLE __GPIOA_CLK_ENABLE -# define VL53L0X_GPIO1_C_GPIO_PIN GPIO_PIN_10 +#define VL53L0X_GPIO1_C_GPIO_PORT GPIOA +#define VL53L0X_GPIO1_C_CLK_ENABLE __GPIOA_CLK_ENABLE +#define VL53L0X_GPIO1_C_GPIO_PIN GPIO_PIN_10 -# define VL53L0X_GPIO1_C_INTx EXTI15_10_IRQn +#define VL53L0X_GPIO1_C_INTx EXTI15_10_IRQn /** @} */ /* defgroup L53L1A1_GPIO1_MAP */ @@ -154,7 +154,7 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void); * * Traces formating and output is end user defined via #trace_printf */ -# define XNUCLEO53L1A1_TRACE TRACE_UART +#define XNUCLEO53L1A1_TRACE TRACE_UART #endif // XNUCLEO53L1A1_TRACE @@ -228,10 +228,8 @@ int XWL55_WLE5_53L0X_Init(void); * @param state State of the device reset (xsdn) pin @warning reset pin is active low * @return 0 on success */ -int XNUCLEO53L1A1_ResetId(int DevNo, int state ); - -void XWL55_WLE5_53L0X_Reset(void); +void XWL55_WLE5_53L0X_ResetId(uint8_t DevNo, int state); /** * Enable Disable interrupt at MCU level (MSP) @@ -254,6 +252,7 @@ void XWL55_WLE5_53L0X_Reset(void); * >0 interrupt configured but with potential sharing on EXTI groups see @ref VL53L0X_GPIO1_MAP */ int XNUCLEO53L1A1_SetIntrStateId(int EnableIntr, int DevNo); +int XWL55_WLE5_53L0X_SetIntrStateId(int EnableIntr, int DevNo); int sts_tof_vl53l0x_DetectSensors(void); #endif /* _X_WL55_WLE5_53L0X_H_ */ diff --git a/TOF/App/app_tof_vl53l0x_range.c b/TOF/App/app_tof_vl53l0x_range.c index 657b79d..bbd76cf 100644 --- a/TOF/App/app_tof_vl53l0x_range.c +++ b/TOF/App/app_tof_vl53l0x_range.c @@ -131,68 +131,73 @@ int sts_tof_vl53l0x_DetectSensors(void) int FinalAddress; nDevPresent = 0; - XWL55_WLE5_53L0X_Reset(); - //HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_SET); - //HAL_Delay(100); + for (i=0; i < MAX_TOF_COUNT; i++) { + XWL55_WLE5_53L0X_ResetId(i,0); + } + + //XWL55_WLE5_53L0X_SetIntrStateId(0,0); /* detect all sensors (even on-board)*/ for (i=0; i < MAX_TOF_COUNT; i++) { - VL53L0X_Dev_t *pDev; - pDev = &VL53L0XDevs[i]; - pDev->I2cDevAddr = 0x52;//+(i*2); - pDev->Present = 0; - //status = XNUCLEO53L0A1_ResetId(pDev->Id, 1); - //HAL_Delay(2); - FinalAddress=0x52 +(i+1)*2; + VL53L0X_Dev_t *pDev; + pDev = &VL53L0XDevs[i]; + pDev->I2cDevAddr = 0x52; + pDev->Present = 0; + XWL55_WLE5_53L0X_ResetId(pDev->Id, 1); + HAL_Delay(2); + FinalAddress = 0x52+(i+1)*2; - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Detect TOF sensors #%u with I2CDevAddr=0x%02x \r\n", i, pDev->I2cDevAddr); + APP_LOG(TS_OFF, VLEVEL_L, "\r\n Detect TOF sensors #%u with I2CDevAddr=0x%02x \r\n", i, pDev->I2cDevAddr); - do { - /* Set I2C standard mode (400 KHz) before doing the first register access */ - //if (status == VL53L0X_ERROR_NONE) - status = VL53L0X_WrByte(pDev, 0x88, 0x00); - - /* Try to read one register using default 0x52 address */ - status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); - APP_LOG(TS_OFF, VLEVEL_L, "#%u read id = %04x I2C ADDR=0x%2X\r\n",i, Id, pDev->I2cDevAddr); - if (status) { - APP_LOG(TS_OFF, VLEVEL_L, "# Read id fail\n"); - break; - } - if (Id == 0xEEAA) { - /* Sensor is found => Change its I2C address to final one */ - status = VL53L0X_SetDeviceAddress(pDev,FinalAddress); - if (status != 0) { - APP_LOG(TS_OFF, VLEVEL_L, "#i VL53L0X_SetDeviceAddress fail\n"); - break; - } - pDev->I2cDevAddr = FinalAddress; - /* Check all is OK with the new I2C address and initialize the sensor */ - status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); - status = VL53L0X_DataInit(pDev); - if( status == 0 ){ - pDev->Present = 1; - APP_LOG(TS_OFF, VLEVEL_L, "#%u VL53L0X_SetDeviceAddress to 0x%02x\r\n",i, pDev->I2cDevAddr); + do { + /* Set I2C standard mode (400 KHz) before doing the first register access */ + //if (status == VL53L0X_ERROR_NONE) + status = VL53L0X_WrByte(pDev, 0x88, 0x00); - nDevPresent++; - nDevMask |= 1 << i; - pDev->Present = 1; - APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X %d Present and initiated to final 0x%2x, Position Mask=0x%02x\r\n", pDev->Id, pDev->I2cDevAddr, nDevMask); + /* Try to read one register using default 0x52 address */ + status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); + APP_LOG(TS_OFF, VLEVEL_L, "#%u read id = %04x I2C ADDR=0x%2X\r\n",i, Id, pDev->I2cDevAddr); + if (status) { + APP_LOG(TS_OFF, VLEVEL_L, "# Read id fail\n"); + break; + } + if (Id == 0xEEAA) { + /* Sensor is found => Change its I2C address to final one */ + status = VL53L0X_SetDeviceAddress(pDev,FinalAddress); + if (status != 0) { + APP_LOG(TS_OFF, VLEVEL_L, "#i VL53L0X_SetDeviceAddress fail\n"); + break; + } + pDev->I2cDevAddr = FinalAddress; + /* Check all is OK with the new I2C address and initialize the sensor */ + status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id); + status = VL53L0X_DataInit(pDev); + if( status == 0 ){ + pDev->Present = 1; + APP_LOG(TS_OFF, VLEVEL_L, "#%u VL53L0X_SetDeviceAddress to 0x%02x\r\n",i, pDev->I2cDevAddr); - } - else{ - APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X_DataInit %d fail\n"); - break; - } + nDevPresent++; + nDevMask |= 1 << i; + pDev->Present = 1; + APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X %d Present and initiated to final 0x%2x, Position Mask=0x%02x\r\n", pDev->Id, pDev->I2cDevAddr, nDevMask); - } else { - APP_LOG(TS_OFF, VLEVEL_L, "# unknown ID %x\n", Id); - status = 1; - } - } while(0); - /* Display detected sensor(s) */ - } + } + else{ + APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X_DataInit %d fail\n"); + break; + } + + } else { + APP_LOG(TS_OFF, VLEVEL_L, "# unknown ID %x\n", Id); + status = 1; + } + } while(0); + /* Display detected sensor(s) */ + if (status) { + XWL55_WLE5_53L0X_ResetId(i,0); + } + } return nDevPresent; }