Getting data from VL53L8CX using vl53l8cx_api
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-03-28 3:43 AM - last edited on 2025-03-28 4:46 AM by Peter BENSCH
Hello everyone,
I started learning programming on the STM32 ecosystem a few weeks ago, and I'm currently trying to get data from the VL53L8CX sensor using the NUCLEO-F401RE expansion boards and the vl53l8cx_api. I wrote a small program based on what I have seen in other projects, but my code doesn't work at all. While debugging, I discovered that the program jumps to the HardFault_Handler() function at this line in vl53l8cx_init().
status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00);
Here is the essential part of my code maybe someone have any solution:
#include "vl53l8cx_api.h"
#include "main.h"
#include "stm32f4xx_hal.h"
#include <stdio.h>
// Private variables ---------------------------------------------------------
static VL53L8CX_Configuration tof_dev; // Sensor-Konfiguration
static VL53L8CX_ResultsData results; // Ergebnis der Messung
static int32_t status ; // Status für Fehlerbehandlung
static void MX_VL53L8CX_SimpleRanging_Process(void);
static void print_result(VL53L8CX_ResultsData *results) ;
static void MX_VL53L8CX_SimpleRanging_Init(void);
void ToF_EventDetected(void);
#define TIMING_BUDGET (30U) // Timing-Budget (ms)
#define RANGING_FREQUENCY (10U) // Messfrequenz (Hz)
#define POLLING_PERIOD (1) // Polling-Periode (ms)
// Initialisierungs-Funktion für VL53L8CX
void MX_TOF_Init(void)
{
// Initialisiere die Peripherie und den Sensor
MX_VL53L8CX_SimpleRanging_Init();
}
// Polling-Task für die Messungen
void MX_TOF_Process(void)
{
MX_VL53L8CX_SimpleRanging_Process();
}
// Funktion zur Initialisierung des Sensors
void MX_VL53L8CX_SimpleRanging_Init(void)
{
// Sensor-Reset (falls erforderlich)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // Beispiel für Reset-Pin
HAL_Delay(2);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Reset-Pin auf High setzen
HAL_Delay(2);
// Initialisierung des Sensors
printf("VL53L8CX Simple Ranging demo application\n");
printf("Sensor initialization...\n");
tof_dev.platform.address = VL53L8CX_DEFAULT_I2C_ADDRESS ;
status += vl53l8cx_init(&tof_dev);
status += vl53l8cx_set_ranging_mode(&tof_dev , VL53L8CX_RANGING_MODE_AUTONOMOUS );
status += vl53l8cx_set_resolution(&tof_dev ,VL53L8CX_RESOLUTION_8X8 );
// Sensor-Konfiguration
vl53l8cx_set_integration_time_ms(&tof_dev, TIMING_BUDGET);
vl53l8cx_set_ranging_frequency_hz(&tof_dev, RANGING_FREQUENCY);
vl53l8cx_start_ranging(&tof_dev); // Startet den kontinuierlichen Messmodus
}
// Funktion für den Messprozess
static void MX_VL53L8CX_SimpleRanging_Process(void)
{
status = vl53l8cx_get_ranging_data(&tof_dev, &results);
if (status != VL53L8CX_STATUS_ERROR)
{
print_result(&results);
}
HAL_Delay(POLLING_PERIOD);
}
// Ergebnis ausdrucken
static void print_result(VL53L8CX_ResultsData *results)
{
char buffer[128]; // Buffer für die serielle Ausgabe
for (int i = 0; i < 64; i++) // Sensor liefert 64 Werte (8x8 Matrix)
{
uint16_t distance = results->distance_mm[i]; // Korrekte Strukturzugriffsnotation
// Formatierte Ausgabe für jeden Wert
snprintf(buffer, sizeof(buffer), "Pixel %d: Distance = %d mm\n", i, distance);
HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}
// Falls nur der erste Wert gesendet werden soll:
snprintf(buffer, sizeof(buffer), "First Distance: %d mm\n", results->distance_mm[0]);
HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}
void ToF_EventDetected(void)
{
// optional: printf("Event detected\n");
}
#ifdef __cplusplus
}
#endif
View more
Labels:
- Labels:
-
Time of flight
0 REPLIES 0
