STM32F303 - VL53L1X - STSW-IMG009 ULD API

Gast #5768706
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****/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren