STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1/* USER CODE BEGIN Header */
2/**
3 ******************************************************************************
4 * @file : main.c
5 * @brief : Main program body
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2026 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18/* USER CODE END Header */
19/* Includes ------------------------------------------------------------------*/
20#include "main.h"
21#include "FreeRTOS.h"
22#include "cmsis_os2.h"
23#include "usb_device.h"
24
25/* Private includes ----------------------------------------------------------*/
26/* USER CODE BEGIN Includes */
27#include "board.h"
28#include "bringup_task.h"
29#include "usbd_cdc_if.h"
30/* USER CODE END Includes */
31
32/* Private typedef -----------------------------------------------------------*/
33/* USER CODE BEGIN PTD */
34
35/* USER CODE END PTD */
36
37/* Private define ------------------------------------------------------------*/
38/* USER CODE BEGIN PD */
39
40/* USER CODE END PD */
41
42/* Private macro -------------------------------------------------------------*/
43/* USER CODE BEGIN PM */
44
45/* USER CODE END PM */
46
47/* Private variables ---------------------------------------------------------*/
49
51
53
54MMC_HandleTypeDef hmmc1;
55
60
64
66
67/* Definitions for defaultTask */
70 .name = "defaultTask",
71 .stack_size = 512 * 4,
72 .priority = (osPriority_t) osPriorityNormal,
73};
74/* USER CODE BEGIN PV */
75
76/* USER CODE END PV */
77
78/* Private function prototypes -----------------------------------------------*/
79void SystemClock_Config(void);
80static void MPU_Config(void);
81static void MX_GPIO_Init(void);
82static void MX_ADC1_Init(void);
83static void MX_SPI1_Init(void);
84static void MX_SPI2_Init(void);
85static void MX_SPI3_Init(void);
86static void MX_SPI4_Init(void);
87static void MX_TIM2_Init(void);
88static void MX_TIM3_Init(void);
89static void MX_UART9_Init(void);
90static void MX_I2C4_Init(void);
91static void MX_TIM1_Init(void);
92static void MX_RTC_Init(void);
93void StartDefaultTask(void *argument);
94
95/* USER CODE BEGIN PFP */
96
97/* USER CODE END PFP */
98
99/* Private user code ---------------------------------------------------------*/
100/* USER CODE BEGIN 0 */
101
102/* USER CODE END 0 */
103
104/**
105 * @brief The application entry point.
106 * @retval int
107 */
108int main(void)
109{
110
111 /* USER CODE BEGIN 1 */
113 /* USER CODE END 1 */
114
115 /* MPU Configuration--------------------------------------------------------*/
116 MPU_Config();
117
118 /* MCU Configuration--------------------------------------------------------*/
119
120 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
121 HAL_Init();
122
123 /* USER CODE BEGIN Init */
124
125 /* USER CODE END Init */
126
127 /* Configure the system clock */
129
130 /* USER CODE BEGIN SysInit */
131
132 /* USER CODE END SysInit */
133
134 /* Initialize all configured peripherals */
135 MX_GPIO_Init();
136 MX_ADC1_Init();
137 MX_SPI1_Init();
138 MX_SPI2_Init();
139 MX_SPI3_Init();
140 MX_SPI4_Init();
141 MX_TIM2_Init();
142 MX_TIM3_Init();
144 MX_I2C4_Init();
145 MX_TIM1_Init();
146 MX_RTC_Init();
147 /* USER CODE BEGIN 2 */
148
149 /* USER CODE END 2 */
150
151 /* Init scheduler */
153
154 /* USER CODE BEGIN RTOS_MUTEX */
155 /* add mutexes, ... */
156 /* USER CODE END RTOS_MUTEX */
157
158 /* USER CODE BEGIN RTOS_SEMAPHORES */
159 /* add semaphores, ... */
160 /* USER CODE END RTOS_SEMAPHORES */
161
162 /* USER CODE BEGIN RTOS_TIMERS */
163 /* start timers, add new ones, ... */
164 /* USER CODE END RTOS_TIMERS */
165
166 /* USER CODE BEGIN RTOS_QUEUES */
167 /* add queues, ... */
168 /* USER CODE END RTOS_QUEUES */
169
170 /* Create the thread(s) */
171 /* creation of defaultTask */
173
174 /* USER CODE BEGIN RTOS_THREADS */
175 /* Bring-up: power/reset sequencing + self-test of every chip. */
177 /* USER CODE END RTOS_THREADS */
178
179 /* USER CODE BEGIN RTOS_EVENTS */
180 /* add events, ... */
181 /* USER CODE END RTOS_EVENTS */
182
183 /* Start scheduler */
185
186 /* We should never get here as control is now taken by the scheduler */
187
188 /* Infinite loop */
189 /* USER CODE BEGIN WHILE */
190 while (1)
191 {
192 /* USER CODE END WHILE */
193
194 /* USER CODE BEGIN 3 */
195 }
196 /* USER CODE END 3 */
197}
198
199/**
200 * @brief System Clock Configuration
201 * @retval None
202 */
204{
205 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
206 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
207
208 /** Supply configuration update enable
209 */
211
212 /** Configure the main internal regulator output voltage
213 */
215
217
218 /** Initializes the RCC Oscillators according to the specified parameters
219 * in the RCC_OscInitTypeDef structure.
220 */
223 RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;
224 RCC_OscInitStruct.HSICalibrationValue = 64;
225 RCC_OscInitStruct.LSIState = RCC_LSI_ON;
226 RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
227 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
228 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
229 RCC_OscInitStruct.PLL.PLLM = 32;
230 RCC_OscInitStruct.PLL.PLLN = 129;
231 RCC_OscInitStruct.PLL.PLLP = 2;
232 RCC_OscInitStruct.PLL.PLLQ = 2;
233 RCC_OscInitStruct.PLL.PLLR = 2;
234 RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_1;
235 RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
236 RCC_OscInitStruct.PLL.PLLFRACN = 0;
237 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
238 {
240 }
241
242 /** Initializes the CPU, AHB and APB buses clocks
243 */
247 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
248 RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
249 RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
250 RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1;
251 RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
252 RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
253 RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
254
255 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
256 {
258 }
259}
260
261/**
262 * @brief ADC1 Initialization Function
263 * @param None
264 * @retval None
265 */
266static void MX_ADC1_Init(void)
267{
268
269 /* USER CODE BEGIN ADC1_Init 0 */
270
271 /* USER CODE END ADC1_Init 0 */
272
273 ADC_MultiModeTypeDef multimode = {0};
274 ADC_ChannelConfTypeDef sConfig = {0};
275
276 /* USER CODE BEGIN ADC1_Init 1 */
277
278 /* USER CODE END ADC1_Init 1 */
279
280 /** Common config
281 */
282 hadc1.Instance = ADC1;
283 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
284 hadc1.Init.Resolution = ADC_RESOLUTION_16B;
285 hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
286 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
287 hadc1.Init.LowPowerAutoWait = DISABLE;
288 hadc1.Init.ContinuousConvMode = DISABLE;
289 hadc1.Init.NbrOfConversion = 1;
290 hadc1.Init.DiscontinuousConvMode = DISABLE;
291 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
292 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
293 hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
294 hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
295 hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
296 hadc1.Init.OversamplingMode = DISABLE;
297 hadc1.Init.Oversampling.Ratio = 1;
298 if (HAL_ADC_Init(&hadc1) != HAL_OK)
299 {
301 }
302
303 /** Configure the ADC multi-mode
304 */
305 multimode.Mode = ADC_MODE_INDEPENDENT;
306 if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
307 {
309 }
310
311 /** Configure Regular Channel
312 */
313 sConfig.Channel = ADC_CHANNEL_16;
314 sConfig.Rank = ADC_REGULAR_RANK_1;
318 sConfig.Offset = 0;
320 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
321 {
323 }
324 /* USER CODE BEGIN ADC1_Init 2 */
325
326 /* USER CODE END ADC1_Init 2 */
327
328}
329
330/**
331 * @brief I2C4 Initialization Function
332 * @param None
333 * @retval None
334 */
335static void MX_I2C4_Init(void)
336{
337
338 /* USER CODE BEGIN I2C4_Init 0 */
339
340 /* USER CODE END I2C4_Init 0 */
341
342 /* USER CODE BEGIN I2C4_Init 1 */
343
344 /* USER CODE END I2C4_Init 1 */
345 hi2c4.Instance = I2C4;
346 hi2c4.Init.Timing = 0x10707DBC;
347 hi2c4.Init.OwnAddress1 = 0;
348 hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
349 hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
350 hi2c4.Init.OwnAddress2 = 0;
351 hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
352 hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
353 hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
354 if (HAL_I2C_Init(&hi2c4) != HAL_OK)
355 {
357 }
358
359 /** Configure Analogue filter
360 */
362 {
364 }
365
366 /** Configure Digital filter
367 */
369 {
371 }
372 /* USER CODE BEGIN I2C4_Init 2 */
373
374 /* USER CODE END I2C4_Init 2 */
375
376}
377
378/**
379 * @brief RTC Initialization Function
380 * @param None
381 * @retval None
382 */
383static void MX_RTC_Init(void)
384{
385
386 /* USER CODE BEGIN RTC_Init 0 */
387
388 /* USER CODE END RTC_Init 0 */
389
390 RTC_TimeTypeDef sTime = {0};
391 RTC_DateTypeDef sDate = {0};
392
393 /* USER CODE BEGIN RTC_Init 1 */
394
395 /* USER CODE END RTC_Init 1 */
396
397 /** Initialize RTC Only
398 */
399 hrtc.Instance = RTC;
400 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
401 hrtc.Init.AsynchPrediv = 127;
402 hrtc.Init.SynchPrediv = 249;
403 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
404 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
405 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
406 hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
407 if (HAL_RTC_Init(&hrtc) != HAL_OK)
408 {
410 }
411
412 /* USER CODE BEGIN Check_RTC_BKUP */
413
414 /* USER CODE END Check_RTC_BKUP */
415
416 /** Initialize RTC and set the Time and Date
417 */
418 sTime.Hours = 0x0;
419 sTime.Minutes = 0x0;
420 sTime.Seconds = 0x0;
423 if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
424 {
426 }
428 sDate.Month = RTC_MONTH_JANUARY;
429 sDate.Date = 0x1;
430 sDate.Year = 0x0;
431
432 if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
433 {
435 }
436
437 /** Enable the WakeUp
438 */
440 {
442 }
443 /* USER CODE BEGIN RTC_Init 2 */
444 /* CubeMX just started the wakeup timer at counter 0: an interrupt every
445 * 16 / 32 kHz = 0.5 ms. Stop it; board_sleep arms it for each sleep. */
447 /* USER CODE END RTC_Init 2 */
448
449}
450
451/**
452 * @brief SDMMC1 Initialization Function
453 * @param None
454 * @retval None
455 */
457{
458
459 /* USER CODE BEGIN SDMMC1_Init 0 */
460
461 /* USER CODE END SDMMC1_Init 0 */
462
463 /* USER CODE BEGIN SDMMC1_Init 1 */
464
465 /* USER CODE END SDMMC1_Init 1 */
466 hmmc1.Instance = SDMMC1;
467 hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
468 hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
469 hmmc1.Init.BusWide = SDMMC_BUS_WIDE_4B;
470 hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
471 hmmc1.Init.ClockDiv = 3;
472 if (HAL_MMC_Init(&hmmc1) != HAL_OK)
473 {
475 }
476 /* USER CODE BEGIN SDMMC1_Init 2 */
477
478 /* USER CODE END SDMMC1_Init 2 */
479
480}
481
482/**
483 * @brief SPI1 Initialization Function
484 * @param None
485 * @retval None
486 */
487static void MX_SPI1_Init(void)
488{
489
490 /* USER CODE BEGIN SPI1_Init 0 */
491
492 /* USER CODE END SPI1_Init 0 */
493
494 /* USER CODE BEGIN SPI1_Init 1 */
495
496 /* USER CODE END SPI1_Init 1 */
497 /* SPI1 parameter configuration*/
498 hspi1.Instance = SPI1;
499 hspi1.Init.Mode = SPI_MODE_MASTER;
500 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
501 hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
502 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
503 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
504 hspi1.Init.NSS = SPI_NSS_SOFT;
505 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
506 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
507 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
508 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
509 hspi1.Init.CRCPolynomial = 0x0;
510 hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
511 hspi1.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
512 hspi1.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
513 hspi1.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
514 hspi1.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
515 hspi1.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
516 hspi1.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
517 hspi1.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_ENABLE;
518 hspi1.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
519 hspi1.Init.IOSwap = SPI_IO_SWAP_DISABLE;
520 if (HAL_SPI_Init(&hspi1) != HAL_OK)
521 {
523 }
524 /* USER CODE BEGIN SPI1_Init 2 */
525
526 /* USER CODE END SPI1_Init 2 */
527
528}
529
530/**
531 * @brief SPI2 Initialization Function
532 * @param None
533 * @retval None
534 */
535static void MX_SPI2_Init(void)
536{
537
538 /* USER CODE BEGIN SPI2_Init 0 */
539
540 /* USER CODE END SPI2_Init 0 */
541
542 /* USER CODE BEGIN SPI2_Init 1 */
543
544 /* USER CODE END SPI2_Init 1 */
545 /* SPI2 parameter configuration*/
546 hspi2.Instance = SPI2;
547 hspi2.Init.Mode = SPI_MODE_MASTER;
548 hspi2.Init.Direction = SPI_DIRECTION_2LINES;
549 hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
550 hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
551 hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
552 hspi2.Init.NSS = SPI_NSS_SOFT;
553 hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
554 hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
555 hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
556 hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
557 hspi2.Init.CRCPolynomial = 0x0;
558 hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
559 hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
560 hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
561 hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
562 hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
563 hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
564 hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
565 hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_ENABLE;
566 hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
567 hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
568 if (HAL_SPI_Init(&hspi2) != HAL_OK)
569 {
571 }
572 /* USER CODE BEGIN SPI2_Init 2 */
573
574 /* USER CODE END SPI2_Init 2 */
575
576}
577
578/**
579 * @brief SPI3 Initialization Function
580 * @param None
581 * @retval None
582 */
583static void MX_SPI3_Init(void)
584{
585
586 /* USER CODE BEGIN SPI3_Init 0 */
587
588 /* USER CODE END SPI3_Init 0 */
589
590 /* USER CODE BEGIN SPI3_Init 1 */
591
592 /* USER CODE END SPI3_Init 1 */
593 /* SPI3 parameter configuration*/
594 hspi3.Instance = SPI3;
595 hspi3.Init.Mode = SPI_MODE_MASTER;
596 hspi3.Init.Direction = SPI_DIRECTION_2LINES;
597 hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
598 hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH;
599 hspi3.Init.CLKPhase = SPI_PHASE_2EDGE;
600 hspi3.Init.NSS = SPI_NSS_SOFT;
601 hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
602 hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
603 hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
604 hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
605 hspi3.Init.CRCPolynomial = 0x0;
606 hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
607 hspi3.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
608 hspi3.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
609 hspi3.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
610 hspi3.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
611 hspi3.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
612 hspi3.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
613 hspi3.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_ENABLE;
614 hspi3.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
615 hspi3.Init.IOSwap = SPI_IO_SWAP_DISABLE;
616 if (HAL_SPI_Init(&hspi3) != HAL_OK)
617 {
619 }
620 /* USER CODE BEGIN SPI3_Init 2 */
621
622 /* USER CODE END SPI3_Init 2 */
623
624}
625
626/**
627 * @brief SPI4 Initialization Function
628 * @param None
629 * @retval None
630 */
631static void MX_SPI4_Init(void)
632{
633
634 /* USER CODE BEGIN SPI4_Init 0 */
635
636 /* USER CODE END SPI4_Init 0 */
637
638 /* USER CODE BEGIN SPI4_Init 1 */
639
640 /* USER CODE END SPI4_Init 1 */
641 /* SPI4 parameter configuration*/
642 hspi4.Instance = SPI4;
643 hspi4.Init.Mode = SPI_MODE_MASTER;
644 hspi4.Init.Direction = SPI_DIRECTION_2LINES;
645 hspi4.Init.DataSize = SPI_DATASIZE_8BIT;
646 hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
647 hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
648 hspi4.Init.NSS = SPI_NSS_SOFT;
649 hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
650 hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
651 hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
652 hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
653 hspi4.Init.CRCPolynomial = 0x0;
654 hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
655 hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
656 hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
657 hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
658 hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
659 hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
660 hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
661 hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_ENABLE;
662 hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
663 hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
664 if (HAL_SPI_Init(&hspi4) != HAL_OK)
665 {
667 }
668 /* USER CODE BEGIN SPI4_Init 2 */
669
670 /* USER CODE END SPI4_Init 2 */
671
672}
673
674/**
675 * @brief TIM1 Initialization Function
676 * @param None
677 * @retval None
678 */
679static void MX_TIM1_Init(void)
680{
681
682 /* USER CODE BEGIN TIM1_Init 0 */
683
684 /* USER CODE END TIM1_Init 0 */
685
686 TIM_MasterConfigTypeDef sMasterConfig = {0};
687 TIM_OC_InitTypeDef sConfigOC = {0};
688 TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
689
690 /* USER CODE BEGIN TIM1_Init 1 */
691
692 /* USER CODE END TIM1_Init 1 */
693 htim1.Instance = TIM1;
694 htim1.Init.Prescaler = 0;
695 htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
696 htim1.Init.Period = 65535;
697 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
698 htim1.Init.RepetitionCounter = 0;
699 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
701 {
703 }
704 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
707 if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
708 {
710 }
711 sConfigOC.OCMode = TIM_OCMODE_PWM1;
712 sConfigOC.Pulse = 0;
715 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
719 {
721 }
722 sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
723 sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
724 sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
725 sBreakDeadTimeConfig.DeadTime = 0;
726 sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
727 sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
728 sBreakDeadTimeConfig.BreakFilter = 0;
729 sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
730 sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
731 sBreakDeadTimeConfig.Break2Filter = 0;
732 sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
733 if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
734 {
736 }
737 /* USER CODE BEGIN TIM1_Init 2 */
738
739 /* USER CODE END TIM1_Init 2 */
741
742}
743
744/**
745 * @brief TIM2 Initialization Function
746 * @param None
747 * @retval None
748 */
749static void MX_TIM2_Init(void)
750{
751
752 /* USER CODE BEGIN TIM2_Init 0 */
753
754 /* USER CODE END TIM2_Init 0 */
755
756 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
757 TIM_MasterConfigTypeDef sMasterConfig = {0};
758 TIM_IC_InitTypeDef sConfigIC = {0};
759
760 /* USER CODE BEGIN TIM2_Init 1 */
761
762 /* USER CODE END TIM2_Init 1 */
763 htim2.Instance = TIM2;
764 htim2.Init.Prescaler = 63;
765 htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
766 htim2.Init.Period = 4294967295;
767 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
768 htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
770 {
772 }
773 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
774 if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
775 {
777 }
779 {
781 }
782 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
784 if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
785 {
787 }
790 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
791 sConfigIC.ICFilter = 0;
793 {
795 }
796 /* USER CODE BEGIN TIM2_Init 2 */
797
798 /* USER CODE END TIM2_Init 2 */
799
800}
801
802/**
803 * @brief TIM3 Initialization Function
804 * @param None
805 * @retval None
806 */
807static void MX_TIM3_Init(void)
808{
809
810 /* USER CODE BEGIN TIM3_Init 0 */
811
812 /* USER CODE END TIM3_Init 0 */
813
814 TIM_MasterConfigTypeDef sMasterConfig = {0};
815 TIM_OC_InitTypeDef sConfigOC = {0};
816
817 /* USER CODE BEGIN TIM3_Init 1 */
818
819 /* USER CODE END TIM3_Init 1 */
820 htim3.Instance = TIM3;
821 htim3.Init.Prescaler = 0;
822 htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
823 htim3.Init.Period = 65535;
824 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
825 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
827 {
829 }
830 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
832 if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
833 {
835 }
836 sConfigOC.OCMode = TIM_OCMODE_PWM1;
837 sConfigOC.Pulse = 0;
839 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
841 {
843 }
845 {
847 }
848 /* USER CODE BEGIN TIM3_Init 2 */
849
850 /* USER CODE END TIM3_Init 2 */
852
853}
854
855/**
856 * @brief UART9 Initialization Function
857 * @param None
858 * @retval None
859 */
860static void MX_UART9_Init(void)
861{
862
863 /* USER CODE BEGIN UART9_Init 0 */
864
865 /* USER CODE END UART9_Init 0 */
866
867 /* USER CODE BEGIN UART9_Init 1 */
868
869 /* USER CODE END UART9_Init 1 */
870 huart9.Instance = UART9;
871 huart9.Init.BaudRate = 38400;
872 huart9.Init.WordLength = UART_WORDLENGTH_8B;
873 huart9.Init.StopBits = UART_STOPBITS_1;
874 huart9.Init.Parity = UART_PARITY_NONE;
875 huart9.Init.Mode = UART_MODE_TX_RX;
876 huart9.Init.HwFlowCtl = UART_HWCONTROL_NONE;
877 huart9.Init.OverSampling = UART_OVERSAMPLING_16;
878 huart9.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
879 huart9.Init.ClockPrescaler = UART_PRESCALER_DIV1;
880 huart9.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
881 if (HAL_UART_Init(&huart9) != HAL_OK)
882 {
884 }
886 {
888 }
890 {
892 }
894 {
896 }
897 /* USER CODE BEGIN UART9_Init 2 */
898
899 /* USER CODE END UART9_Init 2 */
900
901}
902
903/**
904 * @brief GPIO Initialization Function
905 * @param None
906 * @retval None
907 */
908static void MX_GPIO_Init(void)
909{
910 GPIO_InitTypeDef GPIO_InitStruct = {0};
911 /* USER CODE BEGIN MX_GPIO_Init_1 */
912
913 /* USER CODE END MX_GPIO_Init_1 */
914
915 /* GPIO Ports Clock Enable */
922
923 /*Configure GPIO pin Output Level */
926
927 /*Configure GPIO pin Output Level */
929
930 /*Configure GPIO pin Output Level */
932
933 /*Configure GPIO pin Output Level */
935
936 /*Configure GPIO pin Output Level */
938
939 /*Configure GPIO pin Output Level */
941
942 /*Configure GPIO pin Output Level */
944
945 /*Configure GPIO pin Output Level */
947
948 /*Configure GPIO pins : PYRO_1_CTRL_Pin NAND_CS_Pin REG_3V6_EN_Pin ETH_RST_Pin
949 ETH_CS_Pin PYRO_2_CTRL_Pin */
952 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
953 GPIO_InitStruct.Pull = GPIO_NOPULL;
954 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
955 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
956
957 /*Configure GPIO pins : PYRO_2_EN_Pin PYRO_1_EN_Pin RADIO_CS_Pin */
959 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
960 GPIO_InitStruct.Pull = GPIO_NOPULL;
961 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
962 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
963
964 /*Configure GPIO pins : PYRO_1_PG_Pin RADIO_BUSY_Pin */
965 GPIO_InitStruct.Pin = PYRO_1_PG_Pin|RADIO_BUSY_Pin;
966 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
967 GPIO_InitStruct.Pull = GPIO_NOPULL;
968 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
969
970 /*Configure GPIO pins : RADIO_NRST_Pin RADIO_RF_SW_Pin ALT_ARM_SET_Pin ALT_ARM_RESET_Pin */
972 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
973 GPIO_InitStruct.Pull = GPIO_NOPULL;
974 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
975 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
976
977 /*Configure GPIO pin : RADIO_DIO1_Pin */
978 GPIO_InitStruct.Pin = RADIO_DIO1_Pin;
979 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
980 GPIO_InitStruct.Pull = GPIO_NOPULL;
981 HAL_GPIO_Init(RADIO_DIO1_GPIO_Port, &GPIO_InitStruct);
982
983 /*Configure GPIO pin : SW_ST_Pin */
984 GPIO_InitStruct.Pin = SW_ST_Pin;
985 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
986 GPIO_InitStruct.Pull = GPIO_NOPULL;
987 HAL_GPIO_Init(SW_ST_GPIO_Port, &GPIO_InitStruct);
988
989 /*Configure GPIO pin : ETH_INT_Pin */
990 GPIO_InitStruct.Pin = ETH_INT_Pin;
991 GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
992 GPIO_InitStruct.Pull = GPIO_NOPULL;
993 HAL_GPIO_Init(ETH_INT_GPIO_Port, &GPIO_InitStruct);
994
995 /*Configure GPIO pin : GPS_ANT_STATUS_Pin */
996 GPIO_InitStruct.Pin = GPS_ANT_STATUS_Pin;
997 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
998 GPIO_InitStruct.Pull = GPIO_NOPULL;
999 HAL_GPIO_Init(GPS_ANT_STATUS_GPIO_Port, &GPIO_InitStruct);
1000
1001 /*Configure GPIO pin : GPS_RST_Pin */
1002 GPIO_InitStruct.Pin = GPS_RST_Pin;
1003 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
1004 GPIO_InitStruct.Pull = GPIO_NOPULL;
1005 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1006 HAL_GPIO_Init(GPS_RST_GPIO_Port, &GPIO_InitStruct);
1007
1008 /*Configure GPIO pin : EMMC_RST_Pin */
1009 GPIO_InitStruct.Pin = EMMC_RST_Pin;
1010 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1011 GPIO_InitStruct.Pull = GPIO_NOPULL;
1012 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1013 HAL_GPIO_Init(EMMC_RST_GPIO_Port, &GPIO_InitStruct);
1014
1015 /*Configure GPIO pins : IMU_INT1_Pin IMU_INT2_Pin ACCEL_INT_1_Pin ACCEL_INT_2_Pin */
1017 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
1018 GPIO_InitStruct.Pull = GPIO_NOPULL;
1019 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
1020
1021 /*Configure GPIO pins : BARO_CS_Pin ACCEL_CS_Pin IMU_CS_Pin */
1022 GPIO_InitStruct.Pin = BARO_CS_Pin|ACCEL_CS_Pin|IMU_CS_Pin;
1023 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1024 GPIO_InitStruct.Pull = GPIO_NOPULL;
1025 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1026 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
1027
1028 /*Configure GPIO pin : PYRO_2_PG_Pin */
1029 GPIO_InitStruct.Pin = PYRO_2_PG_Pin;
1030 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
1031 GPIO_InitStruct.Pull = GPIO_NOPULL;
1032 HAL_GPIO_Init(PYRO_2_PG_GPIO_Port, &GPIO_InitStruct);
1033
1034 /*Configure GPIO pin : LED1_Pin */
1035 GPIO_InitStruct.Pin = LED1_Pin;
1036 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
1037 GPIO_InitStruct.Pull = GPIO_NOPULL;
1038 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1039 HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
1040
1041 /*Configure GPIO pin : LED2_Pin */
1042 GPIO_InitStruct.Pin = LED2_Pin;
1043 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
1044 GPIO_InitStruct.Pull = GPIO_NOPULL;
1045 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1046 HAL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
1047
1048 /* EXTI interrupt init*/
1051
1054
1057
1060
1061 /* USER CODE BEGIN MX_GPIO_Init_2 */
1062
1063 /* USER CODE END MX_GPIO_Init_2 */
1064}
1065
1066/* USER CODE BEGIN 4 */
1067
1068/* USER CODE END 4 */
1069
1070/* USER CODE BEGIN Header_StartDefaultTask */
1071/**
1072 * @brief Function implementing the defaultTask thread.
1073 * @param argument: Not used
1074 * @retval None
1075 */
1076/* USER CODE END Header_StartDefaultTask */
1077void StartDefaultTask(void *argument)
1078{
1079 /* init code for USB_DEVICE */
1081 /* USER CODE BEGIN 5 */
1082 /* Infinite loop */
1083 for(;;)
1084 {
1085 osDelay(1);
1086 }
1087 /* USER CODE END 5 */
1088}
1089
1090 /* MPU Configuration */
1091
1092void MPU_Config(void)
1093{
1094 MPU_Region_InitTypeDef MPU_InitStruct = {0};
1095
1096 /* Disables the MPU */
1097 HAL_MPU_Disable();
1098
1099 /** Initializes and configures the Region and the memory to be protected
1100 */
1101 MPU_InitStruct.Enable = MPU_REGION_ENABLE;
1102 MPU_InitStruct.Number = MPU_REGION_NUMBER0;
1103 MPU_InitStruct.BaseAddress = 0x0;
1104 MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
1105 MPU_InitStruct.SubRegionDisable = 0x87;
1106 MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
1107 MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
1108 MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
1109 MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
1110 MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
1111 MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
1112
1113 HAL_MPU_ConfigRegion(&MPU_InitStruct);
1114 /* Enables the MPU */
1115 HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
1116
1117}
1118
1119/**
1120 * @brief Period elapsed callback in non blocking mode
1121 * @note This function is called when TIM6 interrupt took place, inside
1122 * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
1123 * a global variable "uwTick" used as application time base.
1124 * @param htim : TIM handle
1125 * @retval None
1126 */
1128{
1129 /* USER CODE BEGIN Callback 0 */
1130
1131 /* USER CODE END Callback 0 */
1132 if (htim->Instance == TIM6)
1133 {
1134 HAL_IncTick();
1135 }
1136 /* USER CODE BEGIN Callback 1 */
1137
1138 /* USER CODE END Callback 1 */
1139}
1140
1141/**
1142 * @brief This function is executed in case of error occurrence.
1143 * @retval None
1144 */
1146{
1147 /* USER CODE BEGIN Error_Handler_Debug */
1148 /* Inside board_soft_init() (an init that talks to an external chip, e.g.
1149 * the eMMC) a failure is recorded and returned, not fatal. */
1150 if (board_error_is_soft())
1151 {
1152 return;
1153 }
1154 /* Fatal: LED2 on (active low) so a halted board is visible, then stop.
1155 * Pyro outputs keep their safe state: nothing here drives them. */
1157 __disable_irq();
1158 while (1)
1159 {
1160 }
1161 /* USER CODE END Error_Handler_Debug */
1162}
1163#ifdef USE_FULL_ASSERT
1164/**
1165 * @brief Reports the name of the source file and the source line number
1166 * where the assert_param error has occurred.
1167 * @param file: pointer to the source file name
1168 * @param line: assert_param error line source number
1169 * @retval None
1170 */
1171void assert_failed(uint8_t *file, uint32_t line)
1172{
1173 /* USER CODE BEGIN 6 */
1174 /* User can add his own implementation to report the file name and line number,
1175 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
1176 /* USER CODE END 6 */
1177}
1178#endif /* USE_FULL_ASSERT */
#define GPS_RST_GPIO_Port
Definition main.h:132
#define PYRO_2_PG_GPIO_Port
Definition main.h:192
#define LED1_GPIO_Port
Definition main.h:194
#define RADIO_NRST_Pin
Definition main.h:107
#define LED2_GPIO_Port
Definition main.h:196
#define PYRO_2_CTRL_Pin
Definition main.h:197
#define ETH_INT_GPIO_Port
Definition main.h:123
#define PYRO_1_EN_Pin
Definition main.h:75
#define ACCEL_INT_1_EXTI_IRQn
Definition main.h:172
#define ACCEL_INT_1_Pin
Definition main.h:170
#define LED2_Pin
Definition main.h:195
#define PYRO_2_PG_Pin
Definition main.h:191
#define LED1_Pin
Definition main.h:193
#define PYRO_1_CTRL_Pin
Definition main.h:65
#define RADIO_RF_SW_Pin
Definition main.h:109
#define PYRO_2_EN_Pin
Definition main.h:73
#define BARO_CS_Pin
Definition main.h:175
#define GPS_ANT_STATUS_GPIO_Port
Definition main.h:130
#define IMU_INT1_EXTI_IRQn
Definition main.h:165
#define IMU_INT1_Pin
Definition main.h:163
#define ACCEL_CS_Pin
Definition main.h:177
#define ETH_INT_EXTI_IRQn
Definition main.h:124
#define ETH_RST_Pin
Definition main.h:118
#define RADIO_BUSY_Pin
Definition main.h:105
#define SW_ST_GPIO_Port
Definition main.h:115
#define RADIO_DIO1_EXTI_IRQn
Definition main.h:113
#define ACCEL_INT_2_Pin
Definition main.h:173
#define RADIO_CS_Pin
Definition main.h:103
#define EMMC_RST_Pin
Definition main.h:145
#define RADIO_DIO1_GPIO_Port
Definition main.h:112
#define RADIO_DIO1_Pin
Definition main.h:111
#define IMU_CS_Pin
Definition main.h:179
#define GPS_ANT_STATUS_Pin
Definition main.h:129
#define REG_3V6_EN_Pin
Definition main.h:116
#define GPS_RST_Pin
Definition main.h:131
#define SW_ST_Pin
Definition main.h:114
#define PYRO_1_PG_Pin
Definition main.h:77
#define NAND_CS_Pin
Definition main.h:67
#define RADIO_CS_GPIO_Port
Definition main.h:104
#define EMMC_RST_GPIO_Port
Definition main.h:146
#define ALT_ARM_SET_Pin
Definition main.h:187
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim)
#define IMU_INT2_Pin
Definition main.h:166
#define ETH_CS_Pin
Definition main.h:120
#define ETH_INT_Pin
Definition main.h:122
#define ALT_ARM_RESET_Pin
Definition main.h:189
bool board_error_is_soft(void)
Definition board.c:8
void bringup_task_start(void)
osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)
Create a thread and add it to Active Threads.
Definition cmsis_os2.c:577
void * osThreadId_t
Definition cmsis_os2.h:211
osStatus_t osKernelStart(void)
Start the RTOS Kernel scheduler.
Definition cmsis_os2.c:353
osPriority_t
Priority values.
Definition cmsis_os2.h:104
@ osPriorityNormal
Priority: normal.
Definition cmsis_os2.h:123
osStatus_t osKernelInitialize(void)
Initialize the RTOS Kernel.
Definition cmsis_os2.c:264
osStatus_t osDelay(uint32_t ticks)
Wait for Timeout (Time Delay).
Definition cmsis_os2.c:1094
HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
#define ADC_LEFTBITSHIFT_NONE
ADC No bit shift.
#define ADC_CONVERSIONDATA_DR
Regular Conversion data stored in DR register only.
#define ADC_EOC_SINGLE_CONV
End of unitary conversion flag.
HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
#define ADC_SAMPLETIME_387CYCLES_5
Sampling time 387.5 ADC clock cycles, On devices STM32H72xx and STM32H73xx, parameter available only ...
#define ADC_SINGLE_ENDED
ADC channel ending set to single ended (literal also used to set calibration mode).
#define ADC_CHANNEL_16
ADC external channel (channel connected to GPIO pin) ADCx_IN16.
#define ADC_CLOCK_ASYNC_DIV4
ADC asynchronous clock with prescaler division by 4.
#define ADC_MODE_INDEPENDENT
ADC dual mode disabled (ADC independent mode).
#define ADC_OFFSET_NONE
ADC offset disabled: no offset correction for the selected ADC channel.
#define ADC_OVR_DATA_PRESERVED
ADC group regular behavior in case of overrun: data preserved.
#define ADC_REGULAR_RANK_1
ADC group regular sequencer rank 1.
#define ADC_RESOLUTION_16B
ADC resolution 16 bits, On devices STM32H72xx and STM32H73xx, parameter available only on ADC instanc...
#define ADC_SCAN_DISABLE
Scan mode disabled.
#define ADC_EXTERNALTRIGCONVEDGE_NONE
Regular conversions hardware trigger detection disabled.
#define ADC_SOFTWARE_START
ADC group regular conversion trigger internal: SW start.
#define __disable_irq
Disable IRQ Interrupts.
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
@ DISABLE
Definition stm32h7xx.h:188
#define FLASH_LATENCY_1
FLASH One Latency cycle.
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *GPIO_Init)
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
@ GPIO_PIN_SET
@ GPIO_PIN_RESET
#define GPIO_MODE_IT_RISING
External Interrupt Mode with Rising edge trigger detection.
#define GPIO_MODE_OUTPUT_PP
Output Push Pull Mode.
#define GPIO_MODE_OUTPUT_OD
Output Open Drain Mode.
#define GPIO_MODE_IT_FALLING
External Interrupt Mode with Falling edge trigger detection.
#define GPIO_MODE_INPUT
Input Floating Mode.
#define GPIO_NOPULL
No Pull-up or Pull-down activation.
#define GPIO_SPEED_FREQ_LOW
Low speed.
void HAL_IncTick(void)
This function is called to increment a global variable "uwTick" used as application time base.
HAL_StatusTypeDef HAL_Init(void)
This function is used to initialize the HAL Library; it must be the first instruction to be executed ...
#define I2C_ANALOGFILTER_ENABLE
HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter)
HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter)
#define I2C_ADDRESSINGMODE_7BIT
#define I2C_DUALADDRESS_DISABLE
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c)
#define I2C_GENERALCALL_DISABLE
#define I2C_NOSTRETCH_DISABLE
#define I2C_OA2_NOMASK
struct __I2C_HandleTypeDef I2C_HandleTypeDef
HAL_StatusTypeDef HAL_PWREx_ConfigSupply(uint32_t SupplySource)
#define PWR_LDO_SUPPLY
Core domains are supplied from the LDO.
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__)
Configure the main internal regulator output voltage.
#define __HAL_PWR_GET_FLAG(__FLAG__)
Check PWR flags are set or not.
#define PWR_FLAG_VOSRDY
#define PWR_REGULATOR_VOLTAGE_SCALE3
#define SDMMC1
#define SPI4
#define GPIOC
#define TIM1
#define TIM2
#define RTC
#define TIM3
#define GPIOB
#define I2C4
#define UART9
#define GPIOD
#define ADC1
#define SPI3
#define TIM6
#define SPI1
#define GPIOE
#define SPI2
#define RCC_APB1_DIV1
#define RCC_APB2_DIV1
#define RCC_APB3_DIV1
#define RCC_APB4_DIV1
HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *RCC_OscInitStruct)
HAL_StatusTypeDef HAL_RCC_ClockConfig(const RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
#define __HAL_RCC_GPIOH_CLK_ENABLE()
#define __HAL_RCC_GPIOA_CLK_ENABLE()
Enable or disable the AHB4 peripheral clock.
#define __HAL_RCC_GPIOE_CLK_ENABLE()
#define __HAL_RCC_GPIOB_CLK_ENABLE()
#define __HAL_RCC_GPIOC_CLK_ENABLE()
#define __HAL_RCC_GPIOD_CLK_ENABLE()
#define RCC_HCLK_DIV1
#define RCC_HSI48_ON
#define RCC_HSI_DIV1
HSI_DIV1 clock activation.
#define RCC_LSI_ON
#define RCC_OSCILLATORTYPE_HSI48
#define RCC_OSCILLATORTYPE_LSI
#define RCC_OSCILLATORTYPE_HSI
#define RCC_PLL1VCIRANGE_1
Clock range frequency between 2 and 4 MHz.
#define RCC_PLL1VCOWIDE
#define RCC_PLLSOURCE_HSI
#define RCC_PLL_ON
#define RCC_SYSCLK_DIV1
#define RCC_SYSCLKSOURCE_HSI
#define RCC_CLOCKTYPE_SYSCLK
#define RCC_CLOCKTYPE_D1PCLK1
#define RCC_CLOCKTYPE_HCLK
#define RCC_CLOCKTYPE_PCLK1
#define RCC_CLOCKTYPE_D3PCLK1
#define RCC_CLOCKTYPE_PCLK2
HAL_StatusTypeDef HAL_RTCEx_DeactivateWakeUpTimer(RTC_HandleTypeDef *hrtc)
HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
#define RTC_WAKEUPCLOCK_RTCCLK_DIV16
#define RTC_DAYLIGHTSAVING_NONE
HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc)
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
#define RTC_HOURFORMAT_24
#define RTC_FORMAT_BCD
#define RTC_MONTH_JANUARY
#define RTC_OUTPUT_REMAP_NONE
#define RTC_OUTPUT_POLARITY_HIGH
#define RTC_OUTPUT_TYPE_OPENDRAIN
#define RTC_OUTPUT_DISABLE
#define RTC_STOREOPERATION_RESET
#define RTC_WEEKDAY_MONDAY
#define SPI_BAUDRATEPRESCALER_8
#define SPI_BAUDRATEPRESCALER_256
#define SPI_BAUDRATEPRESCALER_16
#define SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN
#define SPI_CRCCALCULATION_DISABLE
#define SPI_PHASE_1EDGE
#define SPI_PHASE_2EDGE
#define SPI_POLARITY_HIGH
#define SPI_POLARITY_LOW
#define SPI_DATASIZE_8BIT
#define SPI_DIRECTION_2LINES
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
struct __SPI_HandleTypeDef SPI_HandleTypeDef
SPI handle Structure definition.
#define SPI_FIFO_THRESHOLD_01DATA
#define SPI_IO_SWAP_DISABLE
#define SPI_FIRSTBIT_MSB
#define SPI_MASTER_INTERDATA_IDLENESS_00CYCLE
#define SPI_MASTER_KEEP_IO_STATE_DISABLE
#define SPI_MASTER_RX_AUTOSUSP_ENABLE
#define SPI_MASTER_SS_IDLENESS_00CYCLE
#define SPI_MODE_MASTER
#define SPI_NSS_PULSE_ENABLE
#define SPI_NSS_POLARITY_LOW
#define SPI_NSS_SOFT
#define SPI_TIMODE_DISABLE
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig)
HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, const TIM_MasterConfigTypeDef *sMasterConfig)
#define TIM_AUTOMATICOUTPUT_DISABLE
MOE can be set only by software.
#define TIM_AUTORELOAD_PRELOAD_DISABLE
TIMx_ARR register is not buffered.
#define TIM_BREAK2_DISABLE
Break input BRK2 is disabled.
#define TIM_BREAK2POLARITY_HIGH
Break input BRK2 is active high.
#define TIM_BREAK_DISABLE
Break input BRK is disabled.
#define TIM_BREAKPOLARITY_HIGH
Break input BRK is active high.
#define TIM_CHANNEL_2
Capture/compare channel 2 identifier.
#define TIM_CHANNEL_1
Capture/compare channel 1 identifier.
#define TIM_CHANNEL_4
Capture/compare channel 4 identifier.
#define TIM_CLOCKDIVISION_DIV1
Clock division: tDTS=tCK_INT.
#define TIM_CLOCKSOURCE_INTERNAL
Internal clock source.
#define TIM_COUNTERMODE_UP
Counter used as up-counter.
HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel)
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, uint32_t Channel)
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
Period elapsed callback in non blocking mode.
Definition main.c:1127
#define TIM_ICPSC_DIV1
Capture performed each time an edge is detected on the capture input.
#define TIM_ICSELECTION_DIRECTTI
TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively.
#define TIM_INPUTCHANNELPOLARITY_RISING
Polarity for TIx source.
#define TIM_LOCKLEVEL_OFF
LOCK OFF.
#define TIM_TRGO2_RESET
TIMx_EGR.UG bit is used as trigger output (TRGO2).
#define TIM_TRGO_RESET
TIMx_EGR.UG bit is used as trigger output (TRGO).
#define TIM_MASTERSLAVEMODE_DISABLE
Master/slave mode is selected.
#define TIM_OSSI_DISABLE
When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer).
#define TIM_OSSR_DISABLE
When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer).
#define TIM_OCIDLESTATE_RESET
Output Idle state: OCx=0 when MOE=0.
#define TIM_OCNIDLESTATE_RESET
Complementary output Idle state: OCxN=0 when MOE=0.
#define TIM_OCNPOLARITY_HIGH
Capture/Compare complementary output polarity.
#define TIM_OCPOLARITY_HIGH
Capture/Compare output polarity.
#define TIM_OCMODE_PWM1
PWM mode 1.
#define TIM_OCFAST_DISABLE
Output Compare fast disable.
HAL_StatusTypeDef HAL_UARTEx_EnableFifoMode(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
#define UART_RXFIFO_THRESHOLD_1_2
RX FIFO reaches 1/2 of its depth.
#define UART_TXFIFO_THRESHOLD_1_8
TX FIFO reaches 1/8 of its depth.
#define UART_WORDLENGTH_8B
8-bit long UART frame
#define UART_ADVFEATURE_NO_INIT
No advanced feature initialization.
#define UART_PRESCALER_DIV1
fclk_pres = fclk
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
struct __UART_HandleTypeDef UART_HandleTypeDef
UART handle Structure definition.
#define UART_HWCONTROL_NONE
No hardware control.
#define UART_MODE_TX_RX
RX and TX mode.
#define UART_ONE_BIT_SAMPLE_DISABLE
One-bit sampling disable.
#define UART_OVERSAMPLING_16
Oversampling by 16.
#define UART_PARITY_NONE
No parity.
#define UART_STOPBITS_1
UART frame with 1 stop bit.
void usb_bootloader_check(void)
void MX_USB_DEVICE_Init(void)
Init USB device Library, add supported class and start the library.
Definition usb_device.c:64
#define NULL
Definition usbd_def.h:44
MMC_HandleTypeDef hmmc1
Definition main.c:54
void Error_Handler(void)
This function is executed in case of error occurrence.
Definition main.c:1145
static void MX_TIM1_Init(void)
TIM1 Initialization Function.
Definition main.c:679
ADC_HandleTypeDef hadc1
Definition main.c:48
const osThreadAttr_t defaultTask_attributes
Definition main.c:69
TIM_HandleTypeDef htim1
Definition main.c:61
static void MX_SPI1_Init(void)
SPI1 Initialization Function.
Definition main.c:487
TIM_HandleTypeDef htim2
Definition main.c:62
static void MX_UART9_Init(void)
UART9 Initialization Function.
Definition main.c:860
void MX_SDMMC1_MMC_Init(void)
SDMMC1 Initialization Function.
Definition main.c:456
static void MX_RTC_Init(void)
RTC Initialization Function.
Definition main.c:383
UART_HandleTypeDef huart9
Definition main.c:65
osThreadId_t defaultTaskHandle
Definition main.c:68
void SystemClock_Config(void)
System Clock Configuration.
Definition main.c:203
static void MX_TIM3_Init(void)
TIM3 Initialization Function.
Definition main.c:807
I2C_HandleTypeDef hi2c4
Definition main.c:50
static void MPU_Config(void)
Definition main.c:1092
void StartDefaultTask(void *argument)
Function implementing the defaultTask thread.
Definition main.c:1077
SPI_HandleTypeDef hspi1
Definition main.c:56
RTC_HandleTypeDef hrtc
Definition main.c:52
static void MX_ADC1_Init(void)
ADC1 Initialization Function.
Definition main.c:266
TIM_HandleTypeDef htim3
Definition main.c:63
SPI_HandleTypeDef hspi2
Definition main.c:57
SPI_HandleTypeDef hspi4
Definition main.c:59
static void MX_SPI3_Init(void)
SPI3 Initialization Function.
Definition main.c:583
static void MX_SPI2_Init(void)
SPI2 Initialization Function.
Definition main.c:535
static void MX_SPI4_Init(void)
SPI4 Initialization Function.
Definition main.c:631
static void MX_GPIO_Init(void)
GPIO Initialization Function.
Definition main.c:908
SPI_HandleTypeDef hspi3
Definition main.c:58
static void MX_I2C4_Init(void)
I2C4 Initialization Function.
Definition main.c:335
static void MX_TIM2_Init(void)
TIM2 Initialization Function.
Definition main.c:749
@ HAL_OK
Structure definition of ADC channel for regular group.
uint32_t Rank
Specify the rank in the regular group sequencer.
uint32_t SingleDiff
Select single-ended or differential input.
uint32_t Offset
Define the offset to be subtracted from the raw converted data.
uint32_t Channel
Specify the channel to configure into ADC regular group.
FunctionalState OffsetSignedSaturation
Specify whether the Signed saturation feature is used or not.
uint32_t SamplingTime
Sampling time value to be set for the selected channel.
uint32_t OffsetNumber
Select the offset number This parameter can be a value of ADC instance - Offset number Caution: Only ...
ADC handle Structure definition.
Structure definition of ADC multimode.
uint32_t Mode
Configures the ADC to operate in independent or multimode.
GPIO Init structure definition.
uint32_t Mode
Specifies the operating mode for the selected pins.
uint32_t Pull
Specifies the Pull-up or Pull-Down activation for the selected pins.
uint32_t Pin
Specifies the GPIO pins to be configured.
uint32_t Speed
Specifies the speed for the selected pins.
RCC System, AHB and APB busses clock configuration structure definition.
uint32_t APB1CLKDivider
The APB1 clock (PCLK1) divider.
uint32_t APB4CLKDivider
The APB4 clock (D3PCLK1) divider.
uint32_t SYSCLKSource
The clock source (SYSCLKS) used as system clock.
uint32_t ClockType
The clock to be configured.
uint32_t SYSCLKDivider
The system clock divider.
uint32_t APB2CLKDivider
The APB2 clock (PCLK2) divider.
uint32_t APB3CLKDivider
The APB3 clock (D1PCLK1) divider.
uint32_t AHBCLKDivider
The AHB clock (HCLK) divider.
RCC Internal/External Oscillator (HSE, HSI, CSI, LSE and LSI) configuration structure definition.
uint32_t HSIState
The new state of the HSI.
uint32_t HSI48State
The new state of the HSI48.
uint32_t LSIState
The new state of the LSI.
uint32_t HSICalibrationValue
The calibration trimming value.
RCC_PLLInitTypeDef PLL
PLL structure parameters.
uint32_t OscillatorType
The oscillators to be configured.
uint32_t PLLFRACN
PLLFRACN: Specifies Fractional Part Of The Multiplication Factor for PLL1 VCO It should be a value be...
uint32_t PLLN
PLLN: Multiplication factor for PLL VCO output clock.
uint32_t PLLQ
PLLQ: Division factor for peripheral clocks.
uint32_t PLLVCOSEL
PLLVCOSEL: PLL1 clock Output range This parameter must be a value of RCC PLL1 VCO Range.
uint32_t PLLR
PLLR: Division factor for peripheral clocks.
uint32_t PLLP
PLLP: Division factor for system clock.
uint32_t PLLState
The new state of the PLL.
uint32_t PLLSource
RCC_PLLSource: PLL entry clock source.
uint32_t PLLRGE
PLLRGE: PLL1 clock Input range This parameter must be a value of RCC PLL1 VCI Range.
uint32_t PLLM
PLLM: Division factor for PLL VCO input clock.
RTC Date structure definition.
uint8_t Year
Specifies the RTC Date Year.
uint8_t Month
Specifies the RTC Date Month (in BCD format).
uint8_t Date
Specifies the RTC Date.
uint8_t WeekDay
Specifies the RTC Date WeekDay.
RTC Handle Structure definition.
RTC Time structure definition.
uint8_t Seconds
Specifies the RTC Time Seconds.
uint8_t Minutes
Specifies the RTC Time Minutes.
uint32_t StoreOperation
Specifies RTC_StoreOperation value to be written in the BKP bit in CR register to store the operation...
uint32_t DayLightSaving
Specifies RTC_DayLightSaveOperation: the value of hour adjustment.
uint8_t Hours
Specifies the RTC Time Hour.
TIM Break input(s) and Dead time configuration Structure definition.
uint32_t Break2Filter
TIM break2 input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF.
uint32_t OffStateIDLEMode
TIM off state in IDLE mode, This parameter can be a value of TIM OSSI OffState Selection for Idle mod...
uint32_t DeadTime
TIM dead Time, This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF.
uint32_t OffStateRunMode
TIM off state in run mode, This parameter can be a value of TIM OSSR OffState Selection for Run mode ...
uint32_t BreakState
TIM Break State, This parameter can be a value of TIM Break Input Enable.
uint32_t BreakFilter
Specifies the break input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data =...
uint32_t LockLevel
TIM Lock level, This parameter can be a value of TIM Lock level.
uint32_t Break2State
TIM Break2 State, This parameter can be a value of TIM Break input 2 Enable.
uint32_t BreakPolarity
TIM Break input polarity, This parameter can be a value of TIM Break Input Polarity.
uint32_t AutomaticOutput
TIM Automatic Output Enable state, This parameter can be a value of TIM Automatic Output Enable.
uint32_t Break2Polarity
TIM Break2 input polarity, This parameter can be a value of TIM Break Input 2 Polarity.
Clock Configuration Handle Structure definition.
uint32_t ClockSource
TIM clock sources This parameter can be a value of TIM Clock Source.
TIM Time Base Handle Structure definition.
TIM_TypeDef * Instance
Register base address.
TIM Input Capture Configuration Structure definition.
uint32_t ICPrescaler
Specifies the Input Capture Prescaler.
uint32_t ICSelection
Specifies the input.
uint32_t ICPolarity
Specifies the active edge of the input signal.
uint32_t ICFilter
Specifies the input capture filter.
TIM Master configuration Structure definition.
uint32_t MasterSlaveMode
Master/slave mode selection This parameter can be a value of TIM Master/Slave Mode.
uint32_t MasterOutputTrigger2
Trigger output2 (TRGO2) selection This parameter can be a value of TIM Master Mode Selection 2 (TRGO2...
uint32_t MasterOutputTrigger
Trigger output (TRGO) selection This parameter can be a value of TIM Master Mode Selection.
TIM Output Compare Configuration Structure definition.
uint32_t OCNIdleState
Specifies the TIM Output Compare pin state during Idle state.
uint32_t OCNPolarity
Specifies the complementary output polarity.
uint32_t OCFastMode
Specifies the Fast mode state.
uint32_t OCPolarity
Specifies the output polarity.
uint32_t Pulse
Specifies the pulse value to be loaded into the Capture Compare Register.
uint32_t OCIdleState
Specifies the TIM Output Compare pin state during Idle state.
uint32_t OCMode
Specifies the TIM mode.
Attributes structure for thread.
Definition cmsis_os2.h:240
int main()
: Header for usb_device.c file.
: Header for usbd_cdc_if.c file.