Forum: Mikrocontroller und Digitale Elektronik STM32F303 - VL53L1X - STSW-IMG009 ULD API


von suprZ (Gast)


Lesenswert?

Guten Tag,

mein Setup besteht aus einem STM32F303K8 Nucleo Board und einem Pololu 
VL53L1X Sensor(Board).

Zunächst habe ich den  STSW-IMG007 Treiber von ST verwendet und bin nach 
folgender Anleitung vorgegangen. (Projekt mit CubeMX erstellt...)

[[https://www.digikey.com/eewiki/display/microcontroller/Adding+the+VL53L1X+Driver+to+an+STM32Cube+Project]]

Dies hat auch ohne nennenswerte Probleme funktioniert. Messdaten habe 
ich über das Terminal erhalten.

Allerdings ist das alles etwas verwirrend, da für das Bsp Example 
eigentlich ein ST X-CUBE-53L1A1 Erweierungsboard (i2c multiplexer...) 
verwendet wird.


Daher möchte ich STSW-IMG009 ULD API (UltraLightDrive) benutzen.
Ich bekomme die Treiber aber nicht zum laufen. Schon ab 
"VL53L1X_BootState(dev, &state);" bekomme ich als state=0 (=nicht 
erfolgreich gebootet).

VL53L1X /core und /platform Treiber sind fehlerlos eingebunden.
Muss ich die vl53l1_platform.h modifizieren? Falls ja, wie?

Meine main.c lautet:

Danke.
1
/* Includes ------------------------------------------------------------------*/
2
#include "main.h"
3
/* Private includes ----------------------------------------------------------*/
4
/* USER CODE BEGIN Includes */
5
#include "stm32f3xx_hal.h"
6
#include "vl53l1x_api.h"
7
8
9
10
/* USER CODE END Includes */
11
12
/* Private typedef -----------------------------------------------------------*/
13
/* USER CODE BEGIN PTD */
14
15
/* USER CODE END PTD */
16
17
/* Private define ------------------------------------------------------------*/
18
/* USER CODE BEGIN PD */
19
20
/* USER CODE END PD */
21
22
/* Private macro -------------------------------------------------------------*/
23
/* USER CODE BEGIN PM */
24
25
/* USER CODE END PM */
26
27
/* Private variables ---------------------------------------------------------*/
28
29
I2C_HandleTypeDef hi2c1;
30
UART_HandleTypeDef huart2;
31
CAN_HandleTypeDef hcan;
32
33
/* USER CODE BEGIN PV */
34
/* Private variables ---------------------------------------------------------*/
35
36
37
/* USER CODE END PV */
38
39
/* Private function prototypes -----------------------------------------------*/
40
void SystemClock_Config(void);
41
static void MX_GPIO_Init(void);
42
static void MX_I2C1_Init(void);
43
static void MX_USART2_UART_Init(void);
44
static void MX_CAN_Init(void);
45
/* USER CODE BEGIN PFP */
46
47
/* USER CODE END PFP */
48
/* Private user code ---------------------------------------------------------*/
49
/* USER CODE BEGIN 0 */
50
51
VL53L1_Dev_t                   dev;
52
VL53L1_DEV                     Dev = &dev;
53
54
55
uint8_t     state;
56
uint8_t   dataReady;
57
int16_t   OffsetValue;
58
uint16_t  InterMeasMs;
59
uint8_t   rangeStatus;
60
uint16_t  distance;
61
62
uint8_t   Status;
63
uint8_t   Distance;
64
65
uint8_t   buff[50];  //BSP..
66
67
/* USER CODE END 0 */
68
69
70
71
/**
72
  * @brief  The application entry point.
73
  * @retval int
74
  */
75
int main(void)
76
{
77
  /* USER CODE BEGIN 1 */
78
79
  /* USER CODE END 1 */
80
81
  /* MCU Configuration--------------------------------------------------------*/
82
83
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
84
  HAL_Init();
85
86
87
  /* USER CODE BEGIN Init */
88
89
  /* USER CODE END Init */
90
91
  /* Configure the system clock */
92
  SystemClock_Config();
93
94
  /* USER CODE BEGIN SysInit */
95
96
  /* USER CODE END SysInit */
97
98
  /* Initialize all configured peripherals */
99
  MX_GPIO_Init();
100
  MX_I2C1_Init();
101
  MX_USART2_UART_Init();
102
  MX_CAN_Init();
103
104
105
106
107
  while(state=0){
108
    VL53L1X_BootState(dev, &state);
109
    HAL_Delay(2);
110
  }
111
112
113
    sprintf( (char*)buff, "%d\n\r",state);
114
    HAL_UART_Transmit( &huart2, buff, strlen( (char*)buff ), 0xFFFF );
115
    HAL_Delay(200);
116
117
118
  /* Sensor Initialization */
119
    VL53L1X_SensorInit(dev);
120
121
  /* Modify the default configuration */
122
    VL53L1X_SetInterMeasurementInMs(dev, 100);
123
    VL53L1X_SetDistanceMode( dev, 1);
124
    VL53L1X_SetTimingBudgetInMs(dev, 200);
125
126
  /* enable the ranging*/
127
    VL53L1X_StartRanging(dev);
128
129
  /* USER CODE END 2 */
130
131
132
133
  /* Infinite loop */
134
  /* USER CODE BEGIN WHILE */
135
  while (1)
136
  {
137
138
139
    /* USER CODE END WHILE */
140
    while(dataReady==0){
141
    VL53L1X_CheckForDataReady(dev, &dataReady);
142
    }
143
144
    dataReady = 0;
145
    VL53L1X_GetRangeStatus(dev,&rangeStatus);// read range status
146
147
    VL53L1X_GetDistance(dev, &distance);
148
149
150
        sprintf( (char*)buff, "%d\n\r",distance);
151
        HAL_UART_Transmit( &huart2, buff, strlen( (char*)buff ), 0xFFFF );
152
        HAL_Delay(200);
153
154
155
    VL53L1X_ClearInterrupt(dev);
156
157
158
    HAL_Delay(100);
159
160
161
    /* USER CODE BEGIN 3 */
162
163
164
165
  }
166
167
  /* USER CODE END 3 */
168
}
169
170
/**
171
  * @brief System Clock Configuration
172
  * @retval None
173
  */
174
void SystemClock_Config(void)
175
{
176
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
177
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
178
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
179
180
  /**Initializes the CPU, AHB and APB busses clocks 
181
  */
182
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
183
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
184
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
185
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
186
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
187
  {
188
    Error_Handler();
189
  }
190
  /**Initializes the CPU, AHB and APB busses clocks 
191
  */
192
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
193
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
194
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
195
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
196
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
197
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
198
199
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
200
  {
201
    Error_Handler();
202
  }
203
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
204
  PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
205
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
206
  {
207
    Error_Handler();
208
  }
209
}
210
211
/**
212
  * @brief I2C1 Initialization Function
213
  * @param None
214
  * @retval None
215
  */
216
static void MX_I2C1_Init(void)
217
{
218
219
  /* USER CODE BEGIN I2C1_Init 0 */
220
221
  /* USER CODE END I2C1_Init 0 */
222
223
  /* USER CODE BEGIN I2C1_Init 1 */
224
225
  /* USER CODE END I2C1_Init 1 */
226
  hi2c1.Instance = I2C1;
227
  //hi2c1.Init.Timing = 0x2000090E;
228
  hi2c1.Init.Timing = 0x0000020B;
229
  hi2c1.Init.OwnAddress1 = 0;
230
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
231
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
232
  hi2c1.Init.OwnAddress2 = 0;
233
  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
234
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
235
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
236
  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
237
  {
238
    Error_Handler();
239
  }
240
  /**Configure Analogue filter 
241
  */
242
  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
243
  {
244
    Error_Handler();
245
  }
246
  /**Configure Digital filter 
247
  */
248
  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
249
  {
250
    Error_Handler();
251
  }
252
  /* USER CODE BEGIN I2C1_Init 2 */
253
254
  /* USER CODE END I2C1_Init 2 */
255
256
}
257
258
/**
259
  * @brief USART2 Initialization Function
260
  * @param None
261
  * @retval None
262
  */
263
static void MX_USART2_UART_Init(void)
264
{
265
266
  /* USER CODE BEGIN USART2_Init 0 */
267
268
  /* USER CODE END USART2_Init 0 */
269
270
  /* USER CODE BEGIN USART2_Init 1 */
271
272
  /* USER CODE END USART2_Init 1 */
273
  huart2.Instance = USART2;
274
  huart2.Init.BaudRate = 115200;
275
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
276
  huart2.Init.StopBits = UART_STOPBITS_1;
277
  huart2.Init.Parity = UART_PARITY_NONE;
278
  huart2.Init.Mode = UART_MODE_TX_RX;
279
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
280
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
281
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
282
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
283
  if (HAL_UART_Init(&huart2) != HAL_OK)
284
  {
285
    Error_Handler();
286
  }
287
  /* USER CODE BEGIN USART2_Init 2 */
288
289
  /* USER CODE END USART2_Init 2 */
290
291
}
292
293
294
/**
295
  * @brief CAN Initialization Function
296
  * @param None
297
  * @retval None
298
  */
299
static void MX_CAN_Init(void)
300
{
301
302
  /* USER CODE BEGIN CAN_Init 0 */
303
304
  /* USER CODE END CAN_Init 0 */
305
306
  /* USER CODE BEGIN CAN_Init 1 */
307
308
  /* USER CODE END CAN_Init 1 */
309
  hcan.Instance = CAN;
310
  hcan.Init.Prescaler = 16;
311
  hcan.Init.Mode = CAN_MODE_NORMAL;
312
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
313
  hcan.Init.TimeSeg1 = CAN_BS1_1TQ;
314
  hcan.Init.TimeSeg2 = CAN_BS2_1TQ;
315
  hcan.Init.TimeTriggeredMode = DISABLE;
316
  hcan.Init.AutoBusOff = DISABLE;
317
  hcan.Init.AutoWakeUp = DISABLE;
318
  hcan.Init.AutoRetransmission = DISABLE;
319
  hcan.Init.ReceiveFifoLocked = DISABLE;
320
  hcan.Init.TransmitFifoPriority = DISABLE;
321
  if (HAL_CAN_Init(&hcan) != HAL_OK)
322
  {
323
    Error_Handler();
324
  }
325
  /* USER CODE BEGIN CAN_Init 2 */
326
327
  /* USER CODE END CAN_Init 2 */
328
329
}
330
331
332
333
/**
334
  * @brief GPIO Initialization Function
335
  * @param None
336
  * @retval None
337
  */
338
static void MX_GPIO_Init(void)
339
{
340
  GPIO_InitTypeDef GPIO_InitStruct = {0};
341
342
  /* GPIO Ports Clock Enable */
343
  __HAL_RCC_GPIOF_CLK_ENABLE();
344
  __HAL_RCC_GPIOA_CLK_ENABLE();
345
  __HAL_RCC_GPIOB_CLK_ENABLE();
346
347
  /*Configure GPIO pin Output Level */
348
  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
349
350
  /*Configure GPIO pin Output Level */
351
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
352
353
  /*Configure GPIO pins : PF0 PF1 */
354
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
355
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
356
  GPIO_InitStruct.Pull = GPIO_NOPULL;
357
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
358
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
359
360
  /*Configure GPIO pin : PA8 */
361
  GPIO_InitStruct.Pin = GPIO_PIN_8;
362
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
363
  GPIO_InitStruct.Pull = GPIO_NOPULL;
364
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
365
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
366
367
}
368
369
/* USER CODE BEGIN 4 */
370
371
372
/* USER CODE END 4 */
373
374
/**
375
  * @brief  This function is executed in case of error occurrence.
376
  * @retval None
377
  */
378
void Error_Handler(void)
379
{
380
  /* USER CODE BEGIN Error_Handler_Debug */
381
  /* User can add his own implementation to report the HAL error return state */
382
383
  /* USER CODE END Error_Handler_Debug */
384
}
385
386
#ifdef  USE_FULL_ASSERT
387
/**
388
  * @brief  Reports the name of the source file and the source line number
389
  *         where the assert_param error has occurred.
390
  * @param  file: pointer to the source file name
391
  * @param  line: assert_param error line source number
392
  * @retval None
393
  */
394
void assert_failed(char *file, uint32_t line)
395
{ 
396
  /* USER CODE BEGIN 6 */
397
  /* User can add his own implementation to report the file name and line number,
398
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
399
  /* USER CODE END 6 */
400
}
401
#endif /* USE_FULL_ASSERT */
402
403
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ist zwar schon etwas her, aber das hier:

>while(state=0){
>  VL53L1X_BootState(dev, &state);
>  HAL_Delay(2);
>}

das "=" muss ein "==" sein.

Lol, gerade den Code kopiert ... Der Kompiler hatte mich aber davor 
gewarnt:

> warning: suggest parentheses around assignment used as truth value

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.