Fix DMA IRQ priorty to be less than the SDIO IRQ
[SCSI2SD-V6.git] / STM32CubeMX / 2020c / Src / main.c
1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file           : main.c
5   * @brief          : Main program body
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under Ultimate Liberty license
13   * SLA0044, the "License"; You may not use this file except in compliance with
14   * the License. You may obtain a copy of the License at:
15   *                             www.st.com/SLA0044
16   *
17   ******************************************************************************
18   */
19 /* USER CODE END Header */
20
21 /* Includes ------------------------------------------------------------------*/
22 #include "main.h"
23 #include "dma.h"
24 #include "sdio.h"
25 #include "spi.h"
26 #include "tim.h"
27 #include "usart.h"
28 #include "usb_device.h"
29 #include "gpio.h"
30 #include "fsmc.h"
31
32 /* Private includes ----------------------------------------------------------*/
33 /* USER CODE BEGIN Includes */
34
35 /* USER CODE END Includes */
36
37 /* Private typedef -----------------------------------------------------------*/
38 /* USER CODE BEGIN PTD */
39
40 /* USER CODE END PTD */
41
42 /* Private define ------------------------------------------------------------*/
43 /* USER CODE BEGIN PD */
44 /* USER CODE END PD */
45
46 /* Private macro -------------------------------------------------------------*/
47 /* USER CODE BEGIN PM */
48
49 /* USER CODE END PM */
50
51 /* Private variables ---------------------------------------------------------*/
52
53 /* USER CODE BEGIN PV */
54
55 /* USER CODE END PV */
56
57 /* Private function prototypes -----------------------------------------------*/
58 void SystemClock_Config(void);
59 /* USER CODE BEGIN PFP */
60 /* Private function prototypes -----------------------------------------------*/
61 void mainEarlyInit();
62 void mainInit();
63 void mainLoop();
64
65 /* USER CODE END PFP */
66
67 /* Private user code ---------------------------------------------------------*/
68 /* USER CODE BEGIN 0 */
69
70 /* USER CODE END 0 */
71
72 /**
73   * @brief  The application entry point.
74   * @retval int
75   */
76 int main(void)
77 {
78   /* USER CODE BEGIN 1 */
79   mainEarlyInit();
80
81   /* USER CODE END 1 */
82   
83
84   /* MCU Configuration--------------------------------------------------------*/
85
86   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
87   HAL_Init();
88
89   /* USER CODE BEGIN Init */
90
91   /* USER CODE END Init */
92
93   /* Configure the system clock */
94   SystemClock_Config();
95
96   /* USER CODE BEGIN SysInit */
97
98   /* USER CODE END SysInit */
99
100   /* Initialize all configured peripherals */
101   MX_GPIO_Init();
102   MX_DMA_Init();
103   MX_FSMC_Init();
104   MX_SDIO_SD_Init();
105   MX_SPI1_Init();
106   MX_UART4_Init();
107   /* USER CODE BEGIN 2 */
108   mainInit();
109   /* USER CODE END 2 */
110
111   /* Infinite loop */
112   /* USER CODE BEGIN WHILE */
113   while (1)
114   {
115     /* USER CODE END WHILE */
116
117     /* USER CODE BEGIN 3 */
118   mainLoop();
119   }
120   /* USER CODE END 3 */
121 }
122
123 /**
124   * @brief System Clock Configuration
125   * @retval None
126   */
127 void SystemClock_Config(void)
128 {
129   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
130   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
131
132   /** Initializes the CPU, AHB and APB busses clocks 
133   */
134   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
135   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
136   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
137   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
138   RCC_OscInitStruct.PLL.PLLM = 12;
139   RCC_OscInitStruct.PLL.PLLN = 432;
140   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
141   RCC_OscInitStruct.PLL.PLLQ = 9;
142   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
143   {
144     Error_Handler();
145   }
146   /** Initializes the CPU, AHB and APB busses clocks 
147   */
148   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
149                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
150   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
151   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
152   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
153   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
154
155   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
156   {
157     Error_Handler();
158   }
159   HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_PLLCLK, RCC_MCODIV_1);
160 }
161
162 /* USER CODE BEGIN 4 */
163
164 /* USER CODE END 4 */
165
166 /**
167   * @brief  This function is executed in case of error occurrence.
168   * @retval None
169   */
170 void Error_Handler(void)
171 {
172   /* USER CODE BEGIN Error_Handler_Debug */
173   /* User can add his own implementation to report the HAL error return state */
174
175   /* USER CODE END Error_Handler_Debug */
176 }
177
178 #ifdef  USE_FULL_ASSERT
179 /**
180   * @brief  Reports the name of the source file and the source line number
181   *         where the assert_param error has occurred.
182   * @param  file: pointer to the source file name
183   * @param  line: assert_param error line source number
184   * @retval None
185   */
186 void assert_failed(uint8_t *file, uint32_t line)
187
188   /* USER CODE BEGIN 6 */
189   /* User can add his own implementation to report the file name and line number,
190      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
191   /* USER CODE END 6 */
192 }
193 #endif /* USE_FULL_ASSERT */
194
195 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/