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****/
|