main.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. ** This notice applies to any and all portions of this file
  8. * that are not between comment pairs USER CODE BEGIN and
  9. * USER CODE END. Other portions of this file, whether
  10. * inserted by the user or by software development tools
  11. * are owned by their respective copyright owners.
  12. *
  13. * COPYRIGHT(c) 2019 STMicroelectronics
  14. *
  15. * Redistribution and use in source and binary forms, with or without modification,
  16. * are permitted provided that the following conditions are met:
  17. * 1. Redistributions of source code must retain the above copyright notice,
  18. * this list of conditions and the following disclaimer.
  19. * 2. Redistributions in binary form must reproduce the above copyright notice,
  20. * this list of conditions and the following disclaimer in the documentation
  21. * and/or other materials provided with the distribution.
  22. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  23. * may be used to endorse or promote products derived from this software
  24. * without specific prior written permission.
  25. *
  26. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  29. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  30. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  32. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  33. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  34. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  35. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. ******************************************************************************
  38. */
  39. /* USER CODE END Header */
  40. /* Includes ------------------------------------------------------------------*/
  41. #include "main.h"
  42. /* Private includes ----------------------------------------------------------*/
  43. /* USER CODE BEGIN Includes */
  44. /* USER CODE END Includes */
  45. /* Private typedef -----------------------------------------------------------*/
  46. /* USER CODE BEGIN PTD */
  47. /* USER CODE END PTD */
  48. /* Private define ------------------------------------------------------------*/
  49. /* USER CODE BEGIN PD */
  50. /* USER CODE END PD */
  51. /* Private macro -------------------------------------------------------------*/
  52. /* USER CODE BEGIN PM */
  53. /* USER CODE END PM */
  54. /* Private variables ---------------------------------------------------------*/
  55. DMA2D_HandleTypeDef hdma2d;
  56. IWDG_HandleTypeDef hiwdg1;
  57. LTDC_HandleTypeDef hltdc;
  58. QSPI_HandleTypeDef hqspi;
  59. RTC_HandleTypeDef hrtc;
  60. SD_HandleTypeDef hsd1;
  61. SPI_HandleTypeDef hspi2;
  62. UART_HandleTypeDef huart1;
  63. UART_HandleTypeDef huart2;
  64. SDRAM_HandleTypeDef hsdram1;
  65. /* USER CODE BEGIN PV */
  66. /* USER CODE END PV */
  67. /* Private function prototypes -----------------------------------------------*/
  68. void SystemClock_Config(void);
  69. static void MX_GPIO_Init(void);
  70. static void MX_USART1_UART_Init(void);
  71. static void MX_FMC_Init(void);
  72. static void MX_DMA2D_Init(void);
  73. static void MX_LTDC_Init(void);
  74. static void MX_RTC_Init(void);
  75. static void MX_IWDG1_Init(void);
  76. static void MX_QUADSPI_Init(void);
  77. static void MX_SPI2_Init(void);
  78. static void MX_USART2_UART_Init(void);
  79. static void MX_SDMMC1_SD_Init(void);
  80. /* USER CODE BEGIN PFP */
  81. /* USER CODE END PFP */
  82. /* Private user code ---------------------------------------------------------*/
  83. /* USER CODE BEGIN 0 */
  84. /* USER CODE END 0 */
  85. /**
  86. * @brief The application entry point.
  87. * @retval int
  88. */
  89. int main(void)
  90. {
  91. /* USER CODE BEGIN 1 */
  92. /* USER CODE END 1 */
  93. /* Enable I-Cache---------------------------------------------------------*/
  94. SCB_EnableICache();
  95. /* Enable D-Cache---------------------------------------------------------*/
  96. SCB_EnableDCache();
  97. /* MCU Configuration--------------------------------------------------------*/
  98. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  99. HAL_Init();
  100. /* USER CODE BEGIN Init */
  101. /* USER CODE END Init */
  102. /* Configure the system clock */
  103. SystemClock_Config();
  104. /* USER CODE BEGIN SysInit */
  105. /* USER CODE END SysInit */
  106. /* Initialize all configured peripherals */
  107. MX_GPIO_Init();
  108. MX_USART1_UART_Init();
  109. MX_FMC_Init();
  110. MX_DMA2D_Init();
  111. MX_LTDC_Init();
  112. MX_RTC_Init();
  113. MX_IWDG1_Init();
  114. MX_QUADSPI_Init();
  115. MX_SPI2_Init();
  116. MX_USART2_UART_Init();
  117. MX_SDMMC1_SD_Init();
  118. /* USER CODE BEGIN 2 */
  119. /* USER CODE END 2 */
  120. /* Infinite loop */
  121. /* USER CODE BEGIN WHILE */
  122. while (1)
  123. {
  124. /* USER CODE END WHILE */
  125. /* USER CODE BEGIN 3 */
  126. }
  127. /* USER CODE END 3 */
  128. }
  129. /**
  130. * @brief System Clock Configuration
  131. * @retval None
  132. */
  133. void SystemClock_Config(void)
  134. {
  135. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  136. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  137. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  138. /** Supply configuration update enable
  139. */
  140. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  141. /** Configure the main internal regulator output voltage
  142. */
  143. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  144. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  145. /** Configure LSE Drive Capability
  146. */
  147. HAL_PWR_EnableBkUpAccess();
  148. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  149. /** Macro to configure the PLL clock source
  150. */
  151. __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
  152. /** Initializes the CPU, AHB and APB busses clocks
  153. */
  154. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE
  155. |RCC_OSCILLATORTYPE_LSE;
  156. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  157. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  158. RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  159. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  160. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  161. RCC_OscInitStruct.PLL.PLLM = 5;
  162. RCC_OscInitStruct.PLL.PLLN = 160;
  163. RCC_OscInitStruct.PLL.PLLP = 2;
  164. RCC_OscInitStruct.PLL.PLLQ = 2;
  165. RCC_OscInitStruct.PLL.PLLR = 2;
  166. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  167. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  168. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  169. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  170. {
  171. Error_Handler();
  172. }
  173. /** Initializes the CPU, AHB and APB busses clocks
  174. */
  175. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  176. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  177. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  178. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  179. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  180. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  181. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  182. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  183. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  184. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  185. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  186. {
  187. Error_Handler();
  188. }
  189. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_LTDC
  190. |RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_USART1
  191. |RCC_PERIPHCLK_SPI2|RCC_PERIPHCLK_SDMMC
  192. |RCC_PERIPHCLK_QSPI|RCC_PERIPHCLK_FMC;
  193. PeriphClkInitStruct.PLL3.PLL3M = 5;
  194. PeriphClkInitStruct.PLL3.PLL3N = 160;
  195. PeriphClkInitStruct.PLL3.PLL3P = 2;
  196. PeriphClkInitStruct.PLL3.PLL3Q = 2;
  197. PeriphClkInitStruct.PLL3.PLL3R = 88;
  198. PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_2;
  199. PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;
  200. PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
  201. PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_D1HCLK;
  202. PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
  203. PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
  204. PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
  205. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  206. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  207. PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  208. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  209. {
  210. Error_Handler();
  211. }
  212. }
  213. /**
  214. * @brief DMA2D Initialization Function
  215. * @param None
  216. * @retval None
  217. */
  218. static void MX_DMA2D_Init(void)
  219. {
  220. /* USER CODE BEGIN DMA2D_Init 0 */
  221. /* USER CODE END DMA2D_Init 0 */
  222. /* USER CODE BEGIN DMA2D_Init 1 */
  223. /* USER CODE END DMA2D_Init 1 */
  224. hdma2d.Instance = DMA2D;
  225. hdma2d.Init.Mode = DMA2D_R2M;
  226. hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
  227. hdma2d.Init.OutputOffset = 0;
  228. hdma2d.Init.BytesSwap = DMA2D_BYTES_REGULAR;
  229. hdma2d.Init.LineOffsetMode = DMA2D_LOM_PIXELS;
  230. hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
  231. if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  232. {
  233. Error_Handler();
  234. }
  235. /* USER CODE BEGIN DMA2D_Init 2 */
  236. /* USER CODE END DMA2D_Init 2 */
  237. }
  238. /**
  239. * @brief IWDG1 Initialization Function
  240. * @param None
  241. * @retval None
  242. */
  243. static void MX_IWDG1_Init(void)
  244. {
  245. /* USER CODE BEGIN IWDG1_Init 0 */
  246. /* USER CODE END IWDG1_Init 0 */
  247. /* USER CODE BEGIN IWDG1_Init 1 */
  248. /* USER CODE END IWDG1_Init 1 */
  249. hiwdg1.Instance = IWDG1;
  250. hiwdg1.Init.Prescaler = IWDG_PRESCALER_4;
  251. hiwdg1.Init.Window = 4095;
  252. hiwdg1.Init.Reload = 4095;
  253. if (HAL_IWDG_Init(&hiwdg1) != HAL_OK)
  254. {
  255. Error_Handler();
  256. }
  257. /* USER CODE BEGIN IWDG1_Init 2 */
  258. /* USER CODE END IWDG1_Init 2 */
  259. }
  260. /**
  261. * @brief LTDC Initialization Function
  262. * @param None
  263. * @retval None
  264. */
  265. static void MX_LTDC_Init(void)
  266. {
  267. /* USER CODE BEGIN LTDC_Init 0 */
  268. /* USER CODE END LTDC_Init 0 */
  269. LTDC_LayerCfgTypeDef pLayerCfg = {0};
  270. LTDC_LayerCfgTypeDef pLayerCfg1 = {0};
  271. /* USER CODE BEGIN LTDC_Init 1 */
  272. /* USER CODE END LTDC_Init 1 */
  273. hltdc.Instance = LTDC;
  274. hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  275. hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  276. hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  277. hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  278. hltdc.Init.HorizontalSync = 7;
  279. hltdc.Init.VerticalSync = 3;
  280. hltdc.Init.AccumulatedHBP = 14;
  281. hltdc.Init.AccumulatedVBP = 5;
  282. hltdc.Init.AccumulatedActiveW = 654;
  283. hltdc.Init.AccumulatedActiveH = 485;
  284. hltdc.Init.TotalWidth = 660;
  285. hltdc.Init.TotalHeigh = 487;
  286. hltdc.Init.Backcolor.Blue = 0;
  287. hltdc.Init.Backcolor.Green = 0;
  288. hltdc.Init.Backcolor.Red = 0;
  289. if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  290. {
  291. Error_Handler();
  292. }
  293. pLayerCfg.WindowX0 = 0;
  294. pLayerCfg.WindowX1 = 0;
  295. pLayerCfg.WindowY0 = 0;
  296. pLayerCfg.WindowY1 = 0;
  297. pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
  298. pLayerCfg.Alpha = 0;
  299. pLayerCfg.Alpha0 = 0;
  300. pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  301. pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  302. pLayerCfg.FBStartAdress = 0;
  303. pLayerCfg.ImageWidth = 0;
  304. pLayerCfg.ImageHeight = 0;
  305. pLayerCfg.Backcolor.Blue = 0;
  306. pLayerCfg.Backcolor.Green = 0;
  307. pLayerCfg.Backcolor.Red = 0;
  308. if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  309. {
  310. Error_Handler();
  311. }
  312. pLayerCfg1.WindowX0 = 0;
  313. pLayerCfg1.WindowX1 = 0;
  314. pLayerCfg1.WindowY0 = 0;
  315. pLayerCfg1.WindowY1 = 0;
  316. pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
  317. pLayerCfg1.Alpha = 0;
  318. pLayerCfg1.Alpha0 = 0;
  319. pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  320. pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  321. pLayerCfg1.FBStartAdress = 0;
  322. pLayerCfg1.ImageWidth = 0;
  323. pLayerCfg1.ImageHeight = 0;
  324. pLayerCfg1.Backcolor.Blue = 0;
  325. pLayerCfg1.Backcolor.Green = 0;
  326. pLayerCfg1.Backcolor.Red = 0;
  327. if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
  328. {
  329. Error_Handler();
  330. }
  331. /* USER CODE BEGIN LTDC_Init 2 */
  332. /* USER CODE END LTDC_Init 2 */
  333. }
  334. /**
  335. * @brief QUADSPI Initialization Function
  336. * @param None
  337. * @retval None
  338. */
  339. static void MX_QUADSPI_Init(void)
  340. {
  341. /* USER CODE BEGIN QUADSPI_Init 0 */
  342. /* USER CODE END QUADSPI_Init 0 */
  343. /* USER CODE BEGIN QUADSPI_Init 1 */
  344. /* USER CODE END QUADSPI_Init 1 */
  345. /* QUADSPI parameter configuration*/
  346. hqspi.Instance = QUADSPI;
  347. hqspi.Init.ClockPrescaler = 255;
  348. hqspi.Init.FifoThreshold = 1;
  349. hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
  350. hqspi.Init.FlashSize = 1;
  351. hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
  352. hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  353. hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  354. hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  355. if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  356. {
  357. Error_Handler();
  358. }
  359. /* USER CODE BEGIN QUADSPI_Init 2 */
  360. /* USER CODE END QUADSPI_Init 2 */
  361. }
  362. /**
  363. * @brief RTC Initialization Function
  364. * @param None
  365. * @retval None
  366. */
  367. static void MX_RTC_Init(void)
  368. {
  369. /* USER CODE BEGIN RTC_Init 0 */
  370. /* USER CODE END RTC_Init 0 */
  371. /* USER CODE BEGIN RTC_Init 1 */
  372. /* USER CODE END RTC_Init 1 */
  373. /** Initialize RTC Only
  374. */
  375. hrtc.Instance = RTC;
  376. hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  377. hrtc.Init.AsynchPrediv = 127;
  378. hrtc.Init.SynchPrediv = 255;
  379. hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  380. hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  381. hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  382. hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  383. if (HAL_RTC_Init(&hrtc) != HAL_OK)
  384. {
  385. Error_Handler();
  386. }
  387. /** Enable Calibrartion
  388. */
  389. if (HAL_RTCEx_SetCalibrationOutPut(&hrtc, RTC_CALIBOUTPUT_1HZ) != HAL_OK)
  390. {
  391. Error_Handler();
  392. }
  393. /* USER CODE BEGIN RTC_Init 2 */
  394. /* USER CODE END RTC_Init 2 */
  395. }
  396. /**
  397. * @brief SDMMC1 Initialization Function
  398. * @param None
  399. * @retval None
  400. */
  401. static void MX_SDMMC1_SD_Init(void)
  402. {
  403. /* USER CODE BEGIN SDMMC1_Init 0 */
  404. /* USER CODE END SDMMC1_Init 0 */
  405. /* USER CODE BEGIN SDMMC1_Init 1 */
  406. /* USER CODE END SDMMC1_Init 1 */
  407. hsd1.Instance = SDMMC1;
  408. hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
  409. hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  410. hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
  411. hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
  412. hsd1.Init.ClockDiv = 0;
  413. hsd1.Init.TranceiverPresent = SDMMC_TRANSCEIVER_NOT_PRESENT;
  414. if (HAL_SD_Init(&hsd1) != HAL_OK)
  415. {
  416. Error_Handler();
  417. }
  418. /* USER CODE BEGIN SDMMC1_Init 2 */
  419. /* USER CODE END SDMMC1_Init 2 */
  420. }
  421. /**
  422. * @brief SPI2 Initialization Function
  423. * @param None
  424. * @retval None
  425. */
  426. static void MX_SPI2_Init(void)
  427. {
  428. /* USER CODE BEGIN SPI2_Init 0 */
  429. /* USER CODE END SPI2_Init 0 */
  430. /* USER CODE BEGIN SPI2_Init 1 */
  431. /* USER CODE END SPI2_Init 1 */
  432. /* SPI2 parameter configuration*/
  433. hspi2.Instance = SPI2;
  434. hspi2.Init.Mode = SPI_MODE_MASTER;
  435. hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  436. hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
  437. hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  438. hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  439. hspi2.Init.NSS = SPI_NSS_SOFT;
  440. hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  441. hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  442. hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  443. hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  444. hspi2.Init.CRCPolynomial = 0x0;
  445. hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  446. hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
  447. hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
  448. hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  449. hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  450. hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
  451. hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
  452. hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
  453. hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
  454. hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
  455. if (HAL_SPI_Init(&hspi2) != HAL_OK)
  456. {
  457. Error_Handler();
  458. }
  459. /* USER CODE BEGIN SPI2_Init 2 */
  460. /* USER CODE END SPI2_Init 2 */
  461. }
  462. /**
  463. * @brief USART1 Initialization Function
  464. * @param None
  465. * @retval None
  466. */
  467. static void MX_USART1_UART_Init(void)
  468. {
  469. /* USER CODE BEGIN USART1_Init 0 */
  470. /* USER CODE END USART1_Init 0 */
  471. /* USER CODE BEGIN USART1_Init 1 */
  472. /* USER CODE END USART1_Init 1 */
  473. huart1.Instance = USART1;
  474. huart1.Init.BaudRate = 115200;
  475. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  476. huart1.Init.StopBits = UART_STOPBITS_1;
  477. huart1.Init.Parity = UART_PARITY_NONE;
  478. huart1.Init.Mode = UART_MODE_TX_RX;
  479. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  480. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  481. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  482. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  483. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  484. if (HAL_UART_Init(&huart1) != HAL_OK)
  485. {
  486. Error_Handler();
  487. }
  488. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  489. {
  490. Error_Handler();
  491. }
  492. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  493. {
  494. Error_Handler();
  495. }
  496. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  497. {
  498. Error_Handler();
  499. }
  500. /* USER CODE BEGIN USART1_Init 2 */
  501. /* USER CODE END USART1_Init 2 */
  502. }
  503. /**
  504. * @brief USART2 Initialization Function
  505. * @param None
  506. * @retval None
  507. */
  508. static void MX_USART2_UART_Init(void)
  509. {
  510. /* USER CODE BEGIN USART2_Init 0 */
  511. /* USER CODE END USART2_Init 0 */
  512. /* USER CODE BEGIN USART2_Init 1 */
  513. /* USER CODE END USART2_Init 1 */
  514. huart2.Instance = USART2;
  515. huart2.Init.BaudRate = 115200;
  516. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  517. huart2.Init.StopBits = UART_STOPBITS_1;
  518. huart2.Init.Parity = UART_PARITY_NONE;
  519. huart2.Init.Mode = UART_MODE_TX_RX;
  520. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  521. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  522. huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  523. huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  524. huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  525. if (HAL_UART_Init(&huart2) != HAL_OK)
  526. {
  527. Error_Handler();
  528. }
  529. if (HAL_UARTEx_SetTxFifoThreshold(&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  530. {
  531. Error_Handler();
  532. }
  533. if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  534. {
  535. Error_Handler();
  536. }
  537. if (HAL_UARTEx_DisableFifoMode(&huart2) != HAL_OK)
  538. {
  539. Error_Handler();
  540. }
  541. /* USER CODE BEGIN USART2_Init 2 */
  542. /* USER CODE END USART2_Init 2 */
  543. }
  544. /* FMC initialization function */
  545. static void MX_FMC_Init(void)
  546. {
  547. /* USER CODE BEGIN FMC_Init 0 */
  548. /* USER CODE END FMC_Init 0 */
  549. FMC_SDRAM_TimingTypeDef SdramTiming = {0};
  550. /* USER CODE BEGIN FMC_Init 1 */
  551. /* USER CODE END FMC_Init 1 */
  552. /** Perform the SDRAM1 memory initialization sequence
  553. */
  554. hsdram1.Instance = FMC_SDRAM_DEVICE;
  555. /* hsdram1.Init */
  556. hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
  557. hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
  558. hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
  559. hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
  560. hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
  561. hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2;
  562. hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
  563. hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
  564. hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
  565. hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
  566. /* SdramTiming */
  567. SdramTiming.LoadToActiveDelay = 2;
  568. SdramTiming.ExitSelfRefreshDelay = 8;
  569. SdramTiming.SelfRefreshTime = 6;
  570. SdramTiming.RowCycleDelay = 6;
  571. SdramTiming.WriteRecoveryTime = 4;
  572. SdramTiming.RPDelay = 2;
  573. SdramTiming.RCDDelay = 2;
  574. if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  575. {
  576. Error_Handler( );
  577. }
  578. /* USER CODE BEGIN FMC_Init 2 */
  579. /* USER CODE END FMC_Init 2 */
  580. }
  581. /**
  582. * @brief GPIO Initialization Function
  583. * @param None
  584. * @retval None
  585. */
  586. static void MX_GPIO_Init(void)
  587. {
  588. /* GPIO Ports Clock Enable */
  589. __HAL_RCC_GPIOC_CLK_ENABLE();
  590. __HAL_RCC_GPIOI_CLK_ENABLE();
  591. __HAL_RCC_GPIOF_CLK_ENABLE();
  592. __HAL_RCC_GPIOH_CLK_ENABLE();
  593. __HAL_RCC_GPIOA_CLK_ENABLE();
  594. __HAL_RCC_GPIOB_CLK_ENABLE();
  595. __HAL_RCC_GPIOG_CLK_ENABLE();
  596. __HAL_RCC_GPIOE_CLK_ENABLE();
  597. __HAL_RCC_GPIOD_CLK_ENABLE();
  598. }
  599. /* USER CODE BEGIN 4 */
  600. /* USER CODE END 4 */
  601. /**
  602. * @brief This function is executed in case of error occurrence.
  603. * @retval None
  604. */
  605. void Error_Handler(void)
  606. {
  607. /* USER CODE BEGIN Error_Handler_Debug */
  608. /* User can add his own implementation to report the HAL error return state */
  609. /* USER CODE END Error_Handler_Debug */
  610. }
  611. #ifdef USE_FULL_ASSERT
  612. /**
  613. * @brief Reports the name of the source file and the source line number
  614. * where the assert_param error has occurred.
  615. * @param file: pointer to the source file name
  616. * @param line: assert_param error line source number
  617. * @retval None
  618. */
  619. void assert_failed(uint8_t *file, uint32_t line)
  620. {
  621. /* USER CODE BEGIN 6 */
  622. /* User can add his own implementation to report the file name and line number,
  623. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  624. /* USER CODE END 6 */
  625. }
  626. #endif /* USE_FULL_ASSERT */
  627. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/