2022-06-06 9:00 AM
But when I add calling a fall algorithm task after reading each sample and try to simulate a fall (the rapid moment) causing program not causing interrupt.
Any help regarding why interrupt is not set would be of great help.
//code
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t status;
uint16_t watermark;
uint8_t tag;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
MX_APPE_Config();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* Configure the peripherals common clocks */
PeriphCommonClock_Config();
/* IPCC initialisation */
MX_IPCC_Init();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_RF_Init();
MX_RTC_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Init code for STM32_WPAN */
MX_APPE_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/* Initializing the LSM6DSOX sensor */
MY_MOTION_SENSOR_CUSTOM();
/* Register my_task to sequencer */
UTIL_SEQ_RegTask(1 << CFG_TASK_MY_TASK_ID, UTIL_SEQ_RFU, my_task);
status = 1;
watermark = 10;
CUSTOM_MOTION_SENSOR_FIFO_Set_Watermark_Level(CUSTOM_LSM6DSOX_0, watermark);
uint8_t regVal = 0;
CUSTOM_MOTION_SENSOR_FIFO_Set_Mode(CUSTOM_LSM6DSOX_0, LSM6DSOX_BYPASS_MODE);
CUSTOM_MOTION_SENSOR_Write_Register(CUSTOM_LSM6DSOX_0, LSM6DSOX_FIFO_CTRL3, 0x44);
CUSTOM_MOTION_SENSOR_FIFO_Set_Mode(CUSTOM_LSM6DSOX_0, LSM6DSOX_STREAM_MODE);
CUSTOM_MOTION_SENSOR_FIFO_Set_INT2_FIFO_Watermark(CUSTOM_LSM6DSOX_0, status);
uint8_t buff[6];
axis3bit16_t data_raw_acceleration;
float acceleration_mg[3];
while (1)
{
//Declaring local variables
uint8_t wmflag = 0;
uint16_t numberSamples = 0;
axis3bit16_t dummy;
CUSTOM_MOTION_SENSOR_FIFO_Get_WMFlag(CUSTOM_LSM6DSOX_0, &wmflag);
if (Get_Read_Flag()) {
Set_Read_Flag(0);
numberSamples = 0;
/* Read Number Samples */
CUSTOM_MOTION_SENSOR_FIFO_Get_Num_Samples(CUSTOM_LSM6DSOX_0, &numberSamples);
snprintf(dataOut, MAX_BUF_SIZE, "BEG Num Samples %d\r\n", numberSamples);
printf("%s", dataOut);
while (numberSamples--)
{
CUSTOM_MOTION_SENSOR_FIFO_Get_Tag(CUSTOM_LSM6DSOX_0, &tag);
switch (tag) {
case LSM6DSOX_XL_NC_TAG:
memset(data_raw_acceleration.u8bit, 0x00, 3 * sizeof(int16_t));
CUSTOM_MOTION_SENSOR_Read_raw_FIFO_data(CUSTOM_LSM6DSOX_0, data_raw_acceleration.u8bit);
// call fall detection algorithm here
fall_detection();
break;
default:
/* Flush unused samples */
memset(dummy.u8bit, 0x00, 3 * sizeof(int16_t));
CUSTOM_MOTION_SENSOR_Read_raw_FIFO_data(CUSTOM_LSM6DSOX_0, dummy.u8bit);
break;
}
}
}
HAL_Delay(400);
}
while(1)
/* USER CODE END WHILE */
{
MX_APPE_Process();
/* USER CODE BEGIN 3 */
UTIL_SEQ_SetTask(1 << CFG_TASK_MY_TASK_ID, CFG_SCH_PRIO_0);
}
}
// Code to set interrupt
/**
* @brief Set the LSM6DSOX FIFO watermark on INT2 pin
* @param pObj the device pObj
* @param Status FIFO watermark interrupt on INT2 pin status
* @retval 0 in case of success, an error code otherwise
*/
int32_t LSM6DSOX_FIFO_Set_INT2_FIFO_Watermark(LSM6DSOX_Object_t *pObj, uint8_t Status)
{
// lsm6dsox_reg_t reg;
lsm6dsox_int2_ctrl_t reg;
// if (lsm6dsox_read_reg(&(pObj->Ctx), LSM6DSOX_INT2_CTRL, ®.byte, 1) != LSM6DSOX_OK)
if (lsm6dsox_read_reg(&(pObj->Ctx), LSM6DSOX_INT2_CTRL, (uint8_t*)®, 1) != LSM6DSOX_OK)
{
return LSM6DSOX_ERROR;
}
reg.int2_fifo_th = 1;
if (lsm6dsox_write_reg(&(pObj->Ctx), LSM6DSOX_INT2_CTRL, (uint8_t*)®, 1) != LSM6DSOX_OK)
{
return LSM6DSOX_ERROR;
}
return LSM6DSOX_OK;
}
// External interrupt callback.
/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
void HAL_GPIO_EXTI_Callback( uint16_t GPIO_Pin )
{
//printf("GPIO_Pin %d\n\r",GPIO_Pin);
switch (GPIO_Pin)
{
case BUTTON_SW1_PIN:
APP_BLE_Key_Button1_Action();
break;
case BUTTON_SW2_PIN:
APP_BLE_Key_Button2_Action();
break;
case BUTTON_SW3_PIN:
APP_BLE_Key_Button3_Action();
break;
default:
break;
}
if (GPIO_Pin == 64) {
readFlag = 1;
}
return;
}
2022-06-06 3:53 PM
@vtall.1 "LSMDSOX sensor"
Do you mean LSM6DSOX ?
"try to simulate a fall (the rapid moment) causing program not causing interrupt."
Do you mean the accelerometer doesn't generate an interrupt, or the STM32 doesn't see the interrupt?
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.