main.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  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) 2019 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "pdm2pcm.h"
  23. /* Private includes ----------------------------------------------------------*/
  24. /* USER CODE BEGIN Includes */
  25. /* USER CODE END Includes */
  26. /* Private typedef -----------------------------------------------------------*/
  27. /* USER CODE BEGIN PTD */
  28. /* USER CODE END PTD */
  29. /* Private define ------------------------------------------------------------*/
  30. /* USER CODE BEGIN PD */
  31. /* USER CODE END PD */
  32. /* Private macro -------------------------------------------------------------*/
  33. /* USER CODE BEGIN PM */
  34. /* USER CODE END PM */
  35. /* Private variables ---------------------------------------------------------*/
  36. CRC_HandleTypeDef hcrc;
  37. DMA2D_HandleTypeDef hdma2d;
  38. DSI_HandleTypeDef hdsi;
  39. I2S_HandleTypeDef hi2s3;
  40. LTDC_HandleTypeDef hltdc;
  41. QSPI_HandleTypeDef hqspi;
  42. SD_HandleTypeDef hsd;
  43. TIM_HandleTypeDef htim4;
  44. UART_HandleTypeDef huart3;
  45. PCD_HandleTypeDef hpcd_USB_OTG_FS;
  46. SDRAM_HandleTypeDef hsdram1;
  47. /* USER CODE BEGIN PV */
  48. /* USER CODE END PV */
  49. /* Private function prototypes -----------------------------------------------*/
  50. void SystemClock_Config(void);
  51. static void MX_GPIO_Init(void);
  52. static void MX_USART3_UART_Init(void);
  53. static void MX_FMC_Init(void);
  54. static void MX_QUADSPI_Init(void);
  55. static void MX_GFXSIMULATOR_Init(void);
  56. static void MX_CRC_Init(void);
  57. static void MX_I2S3_Init(void);
  58. static void MX_TIM4_Init(void);
  59. static void MX_USB_OTG_FS_PCD_Init(void);
  60. static void MX_LTDC_Init(void);
  61. static void MX_DMA2D_Init(void);
  62. static void MX_DSIHOST_DSI_Init(void);
  63. static void MX_SDIO_SD_Init(void);
  64. /* USER CODE BEGIN PFP */
  65. /* USER CODE END PFP */
  66. /* Private user code ---------------------------------------------------------*/
  67. /* USER CODE BEGIN 0 */
  68. /* USER CODE END 0 */
  69. /**
  70. * @brief The application entry point.
  71. * @retval int
  72. */
  73. int main(void)
  74. {
  75. /* USER CODE BEGIN 1 */
  76. /* USER CODE END 1 */
  77. /* MCU Configuration--------------------------------------------------------*/
  78. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  79. HAL_Init();
  80. /* USER CODE BEGIN Init */
  81. /* USER CODE END Init */
  82. /* Configure the system clock */
  83. SystemClock_Config();
  84. /* USER CODE BEGIN SysInit */
  85. /* USER CODE END SysInit */
  86. /* Initialize all configured peripherals */
  87. MX_GPIO_Init();
  88. MX_USART3_UART_Init();
  89. MX_FMC_Init();
  90. MX_QUADSPI_Init();
  91. MX_GFXSIMULATOR_Init();
  92. MX_CRC_Init();
  93. MX_I2S3_Init();
  94. MX_TIM4_Init();
  95. MX_PDM2PCM_Init();
  96. MX_USB_OTG_FS_PCD_Init();
  97. MX_LTDC_Init();
  98. MX_DMA2D_Init();
  99. MX_DSIHOST_DSI_Init();
  100. MX_SDIO_SD_Init();
  101. /* USER CODE BEGIN 2 */
  102. /* USER CODE END 2 */
  103. /* Infinite loop */
  104. /* USER CODE BEGIN WHILE */
  105. while (1)
  106. {
  107. // HAL_GPIO_WritePin(GPIOG, 6, GPIO_PIN_SET);
  108. HAL_GPIO_WritePin(GPIOG, 6, GPIO_PIN_RESET);
  109. /* USER CODE END WHILE */
  110. /* USER CODE BEGIN 3 */
  111. }
  112. /* USER CODE END 3 */
  113. }
  114. /**
  115. * @brief System Clock Configuration
  116. * @retval None
  117. */
  118. void SystemClock_Config(void)
  119. {
  120. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  121. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  122. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  123. /** Configure the main internal regulator output voltage
  124. */
  125. __HAL_RCC_PWR_CLK_ENABLE();
  126. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  127. /** Initializes the CPU, AHB and APB busses clocks
  128. */
  129. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  130. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  131. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  132. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  133. RCC_OscInitStruct.PLL.PLLM = 8;
  134. RCC_OscInitStruct.PLL.PLLN = 360;
  135. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  136. RCC_OscInitStruct.PLL.PLLQ = 9;
  137. RCC_OscInitStruct.PLL.PLLR = 6;
  138. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  139. {
  140. Error_Handler();
  141. }
  142. /** Activate the Over-Drive mode
  143. */
  144. if (HAL_PWREx_EnableOverDrive() != HAL_OK)
  145. {
  146. Error_Handler();
  147. }
  148. /** Initializes the CPU, AHB and APB busses clocks
  149. */
  150. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  151. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  152. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  153. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  154. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  155. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  156. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  157. {
  158. Error_Handler();
  159. }
  160. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S|RCC_PERIPHCLK_SDIO
  161. |RCC_PERIPHCLK_CLK48|RCC_PERIPHCLK_LTDC;
  162. PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
  163. PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
  164. PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
  165. PeriphClkInitStruct.PLLSAI.PLLSAIR = 2;
  166. PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV4;
  167. PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
  168. PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLSAIP;
  169. PeriphClkInitStruct.SdioClockSelection = RCC_SDIOCLKSOURCE_CLK48;
  170. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  171. {
  172. Error_Handler();
  173. }
  174. }
  175. /**
  176. * @brief CRC Initialization Function
  177. * @param None
  178. * @retval None
  179. */
  180. static void MX_CRC_Init(void)
  181. {
  182. /* USER CODE BEGIN CRC_Init 0 */
  183. /* USER CODE END CRC_Init 0 */
  184. /* USER CODE BEGIN CRC_Init 1 */
  185. /* USER CODE END CRC_Init 1 */
  186. hcrc.Instance = CRC;
  187. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  188. {
  189. Error_Handler();
  190. }
  191. __HAL_CRC_DR_RESET(&hcrc);
  192. /* USER CODE BEGIN CRC_Init 2 */
  193. /* USER CODE END CRC_Init 2 */
  194. }
  195. /**
  196. * @brief DMA2D Initialization Function
  197. * @param None
  198. * @retval None
  199. */
  200. static void MX_DMA2D_Init(void)
  201. {
  202. /* USER CODE BEGIN DMA2D_Init 0 */
  203. /* USER CODE END DMA2D_Init 0 */
  204. /* USER CODE BEGIN DMA2D_Init 1 */
  205. /* USER CODE END DMA2D_Init 1 */
  206. hdma2d.Instance = DMA2D;
  207. hdma2d.Init.Mode = DMA2D_M2M;
  208. hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
  209. hdma2d.Init.OutputOffset = 0;
  210. hdma2d.LayerCfg[1].InputOffset = 0;
  211. hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
  212. hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  213. hdma2d.LayerCfg[1].InputAlpha = 0;
  214. if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  215. {
  216. Error_Handler();
  217. }
  218. if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
  219. {
  220. Error_Handler();
  221. }
  222. /* USER CODE BEGIN DMA2D_Init 2 */
  223. /* USER CODE END DMA2D_Init 2 */
  224. }
  225. /**
  226. * @brief DSIHOST Initialization Function
  227. * @param None
  228. * @retval None
  229. */
  230. static void MX_DSIHOST_DSI_Init(void)
  231. {
  232. /* USER CODE BEGIN DSIHOST_Init 0 */
  233. /* USER CODE END DSIHOST_Init 0 */
  234. DSI_PLLInitTypeDef PLLInit = {0};
  235. DSI_HOST_TimeoutTypeDef HostTimeouts = {0};
  236. DSI_PHY_TimerTypeDef PhyTimings = {0};
  237. DSI_VidCfgTypeDef VidCfg = {0};
  238. /* USER CODE BEGIN DSIHOST_Init 1 */
  239. /* USER CODE END DSIHOST_Init 1 */
  240. hdsi.Instance = DSI;
  241. hdsi.Init.AutomaticClockLaneControl = DSI_AUTO_CLK_LANE_CTRL_DISABLE;
  242. hdsi.Init.TXEscapeCkdiv = 4;
  243. hdsi.Init.NumberOfLanes = DSI_ONE_DATA_LANE;
  244. PLLInit.PLLNDIV = 32;
  245. PLLInit.PLLIDF = DSI_PLL_IN_DIV1;
  246. PLLInit.PLLODF = DSI_PLL_OUT_DIV1;
  247. if (HAL_DSI_Init(&hdsi, &PLLInit) != HAL_OK)
  248. {
  249. Error_Handler();
  250. }
  251. HostTimeouts.TimeoutCkdiv = 1;
  252. HostTimeouts.HighSpeedTransmissionTimeout = 0;
  253. HostTimeouts.LowPowerReceptionTimeout = 0;
  254. HostTimeouts.HighSpeedReadTimeout = 0;
  255. HostTimeouts.LowPowerReadTimeout = 0;
  256. HostTimeouts.HighSpeedWriteTimeout = 0;
  257. HostTimeouts.HighSpeedWritePrespMode = DSI_HS_PM_DISABLE;
  258. HostTimeouts.LowPowerWriteTimeout = 0;
  259. HostTimeouts.BTATimeout = 0;
  260. if (HAL_DSI_ConfigHostTimeouts(&hdsi, &HostTimeouts) != HAL_OK)
  261. {
  262. Error_Handler();
  263. }
  264. PhyTimings.ClockLaneHS2LPTime = 20;
  265. PhyTimings.ClockLaneLP2HSTime = 18;
  266. PhyTimings.DataLaneHS2LPTime = 10;
  267. PhyTimings.DataLaneLP2HSTime = 13;
  268. PhyTimings.DataLaneMaxReadTime = 0;
  269. PhyTimings.StopWaitTime = 0;
  270. if (HAL_DSI_ConfigPhyTimer(&hdsi, &PhyTimings) != HAL_OK)
  271. {
  272. Error_Handler();
  273. }
  274. if (HAL_DSI_ConfigFlowControl(&hdsi, DSI_FLOW_CONTROL_BTA) != HAL_OK)
  275. {
  276. Error_Handler();
  277. }
  278. if (HAL_DSI_SetLowPowerRXFilter(&hdsi, 10000) != HAL_OK)
  279. {
  280. Error_Handler();
  281. }
  282. if (HAL_DSI_ConfigErrorMonitor(&hdsi, HAL_DSI_ERROR_NONE) != HAL_OK)
  283. {
  284. Error_Handler();
  285. }
  286. VidCfg.VirtualChannelID = 0;
  287. VidCfg.ColorCoding = DSI_RGB888;
  288. VidCfg.LooselyPacked = DSI_LOOSELY_PACKED_DISABLE;
  289. VidCfg.Mode = DSI_VID_MODE_NB_PULSES;
  290. VidCfg.PacketSize = 1;
  291. VidCfg.NumberOfChunks = 640;
  292. VidCfg.NullPacketSize = 0;
  293. VidCfg.HSPolarity = DSI_HSYNC_ACTIVE_LOW;
  294. VidCfg.VSPolarity = DSI_VSYNC_ACTIVE_LOW;
  295. VidCfg.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH;
  296. VidCfg.HorizontalSyncActive = 5;
  297. VidCfg.HorizontalBackPorch = 5;
  298. VidCfg.HorizontalLine = 441;
  299. VidCfg.VerticalSyncActive = 4;
  300. VidCfg.VerticalBackPorch = 2;
  301. VidCfg.VerticalFrontPorch = 2;
  302. VidCfg.VerticalActive = 480;
  303. VidCfg.LPCommandEnable = DSI_LP_COMMAND_DISABLE;
  304. VidCfg.LPLargestPacketSize = 0;
  305. VidCfg.LPVACTLargestPacketSize = 0;
  306. VidCfg.LPHorizontalFrontPorchEnable = DSI_LP_HFP_DISABLE;
  307. VidCfg.LPHorizontalBackPorchEnable = DSI_LP_HBP_DISABLE;
  308. VidCfg.LPVerticalActiveEnable = DSI_LP_VACT_DISABLE;
  309. VidCfg.LPVerticalFrontPorchEnable = DSI_LP_VFP_DISABLE;
  310. VidCfg.LPVerticalBackPorchEnable = DSI_LP_VBP_DISABLE;
  311. VidCfg.LPVerticalSyncActiveEnable = DSI_LP_VSYNC_DISABLE;
  312. VidCfg.FrameBTAAcknowledgeEnable = DSI_FBTAA_DISABLE;
  313. if (HAL_DSI_ConfigVideoMode(&hdsi, &VidCfg) != HAL_OK)
  314. {
  315. Error_Handler();
  316. }
  317. if (HAL_DSI_SetGenericVCID(&hdsi, 0) != HAL_OK)
  318. {
  319. Error_Handler();
  320. }
  321. /* USER CODE BEGIN DSIHOST_Init 2 */
  322. /* USER CODE END DSIHOST_Init 2 */
  323. }
  324. /**
  325. * @brief GFXSIMULATOR Initialization Function
  326. * @param None
  327. * @retval None
  328. */
  329. static void MX_GFXSIMULATOR_Init(void)
  330. {
  331. /* USER CODE BEGIN GFXSIMULATOR_Init 0 */
  332. /* USER CODE END GFXSIMULATOR_Init 0 */
  333. /* USER CODE BEGIN GFXSIMULATOR_Init 1 */
  334. /* USER CODE END GFXSIMULATOR_Init 1 */
  335. /* USER CODE BEGIN GFXSIMULATOR_Init 2 */
  336. /* USER CODE END GFXSIMULATOR_Init 2 */
  337. }
  338. /**
  339. * @brief I2S3 Initialization Function
  340. * @param None
  341. * @retval None
  342. */
  343. static void MX_I2S3_Init(void)
  344. {
  345. /* USER CODE BEGIN I2S3_Init 0 */
  346. /* USER CODE END I2S3_Init 0 */
  347. /* USER CODE BEGIN I2S3_Init 1 */
  348. /* USER CODE END I2S3_Init 1 */
  349. hi2s3.Instance = SPI3;
  350. hi2s3.Init.Mode = I2S_MODE_MASTER_RX;
  351. hi2s3.Init.Standard = I2S_STANDARD_LSB;
  352. hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B;
  353. hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
  354. hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_16K;
  355. hi2s3.Init.CPOL = I2S_CPOL_LOW;
  356. hi2s3.Init.ClockSource = I2S_CLOCK_PLL;
  357. hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
  358. if (HAL_I2S_Init(&hi2s3) != HAL_OK)
  359. {
  360. Error_Handler();
  361. }
  362. /* USER CODE BEGIN I2S3_Init 2 */
  363. /* USER CODE END I2S3_Init 2 */
  364. }
  365. /**
  366. * @brief LTDC Initialization Function
  367. * @param None
  368. * @retval None
  369. */
  370. static void MX_LTDC_Init(void)
  371. {
  372. /* USER CODE BEGIN LTDC_Init 0 */
  373. /* USER CODE END LTDC_Init 0 */
  374. LTDC_LayerCfgTypeDef pLayerCfg = {0};
  375. LTDC_LayerCfgTypeDef pLayerCfg1 = {0};
  376. /* USER CODE BEGIN LTDC_Init 1 */
  377. /* USER CODE END LTDC_Init 1 */
  378. hltdc.Instance = LTDC;
  379. hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  380. hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  381. hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  382. hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  383. hltdc.Init.HorizontalSync = 7;
  384. hltdc.Init.VerticalSync = 3;
  385. hltdc.Init.AccumulatedHBP = 14;
  386. hltdc.Init.AccumulatedVBP = 5;
  387. hltdc.Init.AccumulatedActiveW = 654;
  388. hltdc.Init.AccumulatedActiveH = 485;
  389. hltdc.Init.TotalWidth = 660;
  390. hltdc.Init.TotalHeigh = 487;
  391. hltdc.Init.Backcolor.Blue = 0;
  392. hltdc.Init.Backcolor.Green = 0;
  393. hltdc.Init.Backcolor.Red = 0;
  394. if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  395. {
  396. Error_Handler();
  397. }
  398. pLayerCfg.WindowX0 = 0;
  399. pLayerCfg.WindowX1 = 0;
  400. pLayerCfg.WindowY0 = 0;
  401. pLayerCfg.WindowY1 = 0;
  402. pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
  403. pLayerCfg.Alpha = 0;
  404. pLayerCfg.Alpha0 = 0;
  405. pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  406. pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  407. pLayerCfg.FBStartAdress = 0;
  408. pLayerCfg.ImageWidth = 0;
  409. pLayerCfg.ImageHeight = 0;
  410. pLayerCfg.Backcolor.Blue = 0;
  411. pLayerCfg.Backcolor.Green = 0;
  412. pLayerCfg.Backcolor.Red = 0;
  413. if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  414. {
  415. Error_Handler();
  416. }
  417. pLayerCfg1.WindowX0 = 0;
  418. pLayerCfg1.WindowX1 = 0;
  419. pLayerCfg1.WindowY0 = 0;
  420. pLayerCfg1.WindowY1 = 0;
  421. pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
  422. pLayerCfg1.Alpha = 0;
  423. pLayerCfg1.Alpha0 = 0;
  424. pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  425. pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  426. pLayerCfg1.FBStartAdress = 0;
  427. pLayerCfg1.ImageWidth = 0;
  428. pLayerCfg1.ImageHeight = 0;
  429. pLayerCfg1.Backcolor.Blue = 0;
  430. pLayerCfg1.Backcolor.Green = 0;
  431. pLayerCfg1.Backcolor.Red = 0;
  432. if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
  433. {
  434. Error_Handler();
  435. }
  436. /* USER CODE BEGIN LTDC_Init 2 */
  437. /* USER CODE END LTDC_Init 2 */
  438. }
  439. /**
  440. * @brief QUADSPI Initialization Function
  441. * @param None
  442. * @retval None
  443. */
  444. static void MX_QUADSPI_Init(void)
  445. {
  446. /* USER CODE BEGIN QUADSPI_Init 0 */
  447. /* USER CODE END QUADSPI_Init 0 */
  448. /* USER CODE BEGIN QUADSPI_Init 1 */
  449. /* USER CODE END QUADSPI_Init 1 */
  450. /* QUADSPI parameter configuration*/
  451. hqspi.Instance = QUADSPI;
  452. hqspi.Init.ClockPrescaler = 1;
  453. hqspi.Init.FifoThreshold = 4;
  454. hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
  455. hqspi.Init.FlashSize = 24;
  456. hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE;
  457. hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  458. hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  459. hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  460. if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  461. {
  462. Error_Handler();
  463. }
  464. /* USER CODE BEGIN QUADSPI_Init 2 */
  465. /* USER CODE END QUADSPI_Init 2 */
  466. }
  467. /**
  468. * @brief SDIO Initialization Function
  469. * @param None
  470. * @retval None
  471. */
  472. static void MX_SDIO_SD_Init(void)
  473. {
  474. /* USER CODE BEGIN SDIO_Init 0 */
  475. /* USER CODE END SDIO_Init 0 */
  476. /* USER CODE BEGIN SDIO_Init 1 */
  477. /* USER CODE END SDIO_Init 1 */
  478. hsd.Instance = SDIO;
  479. hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
  480. hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
  481. hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
  482. hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
  483. hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  484. hsd.Init.ClockDiv = 0;
  485. if (HAL_SD_Init(&hsd) != HAL_OK)
  486. {
  487. Error_Handler();
  488. }
  489. if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
  490. {
  491. Error_Handler();
  492. }
  493. /* USER CODE BEGIN SDIO_Init 2 */
  494. /* USER CODE END SDIO_Init 2 */
  495. }
  496. /**
  497. * @brief TIM4 Initialization Function
  498. * @param None
  499. * @retval None
  500. */
  501. static void MX_TIM4_Init(void)
  502. {
  503. /* USER CODE BEGIN TIM4_Init 0 */
  504. /* USER CODE END TIM4_Init 0 */
  505. TIM_SlaveConfigTypeDef sSlaveConfig = {0};
  506. TIM_MasterConfigTypeDef sMasterConfig = {0};
  507. TIM_OC_InitTypeDef sConfigOC = {0};
  508. /* USER CODE BEGIN TIM4_Init 1 */
  509. /* USER CODE END TIM4_Init 1 */
  510. htim4.Instance = TIM4;
  511. htim4.Init.Prescaler = 0;
  512. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  513. htim4.Init.Period = 1;
  514. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  515. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  516. if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  517. {
  518. Error_Handler();
  519. }
  520. if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  521. {
  522. Error_Handler();
  523. }
  524. sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
  525. sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
  526. sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_FALLING;
  527. sSlaveConfig.TriggerFilter = 0;
  528. if (HAL_TIM_SlaveConfigSynchro(&htim4, &sSlaveConfig) != HAL_OK)
  529. {
  530. Error_Handler();
  531. }
  532. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  533. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  534. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  535. {
  536. Error_Handler();
  537. }
  538. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  539. sConfigOC.Pulse = 1;
  540. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  541. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  542. if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  543. {
  544. Error_Handler();
  545. }
  546. /* USER CODE BEGIN TIM4_Init 2 */
  547. /* USER CODE END TIM4_Init 2 */
  548. HAL_TIM_MspPostInit(&htim4);
  549. }
  550. /**
  551. * @brief USART3 Initialization Function
  552. * @param None
  553. * @retval None
  554. */
  555. static void MX_USART3_UART_Init(void)
  556. {
  557. /* USER CODE BEGIN USART3_Init 0 */
  558. /* USER CODE END USART3_Init 0 */
  559. /* USER CODE BEGIN USART3_Init 1 */
  560. /* USER CODE END USART3_Init 1 */
  561. huart3.Instance = USART3;
  562. huart3.Init.BaudRate = 115200;
  563. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  564. huart3.Init.StopBits = UART_STOPBITS_1;
  565. huart3.Init.Parity = UART_PARITY_NONE;
  566. huart3.Init.Mode = UART_MODE_TX_RX;
  567. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  568. huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  569. if (HAL_UART_Init(&huart3) != HAL_OK)
  570. {
  571. Error_Handler();
  572. }
  573. /* USER CODE BEGIN USART3_Init 2 */
  574. /* USER CODE END USART3_Init 2 */
  575. }
  576. /**
  577. * @brief USB_OTG_FS Initialization Function
  578. * @param None
  579. * @retval None
  580. */
  581. static void MX_USB_OTG_FS_PCD_Init(void)
  582. {
  583. /* USER CODE BEGIN USB_OTG_FS_Init 0 */
  584. /* USER CODE END USB_OTG_FS_Init 0 */
  585. /* USER CODE BEGIN USB_OTG_FS_Init 1 */
  586. /* USER CODE END USB_OTG_FS_Init 1 */
  587. hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
  588. hpcd_USB_OTG_FS.Init.dev_endpoints = 6;
  589. hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
  590. hpcd_USB_OTG_FS.Init.dma_enable = DISABLE;
  591. hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
  592. hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE;
  593. hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
  594. hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
  595. hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE;
  596. hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
  597. if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK)
  598. {
  599. Error_Handler();
  600. }
  601. /* USER CODE BEGIN USB_OTG_FS_Init 2 */
  602. /* USER CODE END USB_OTG_FS_Init 2 */
  603. }
  604. /* FMC initialization function */
  605. static void MX_FMC_Init(void)
  606. {
  607. FMC_SDRAM_TimingTypeDef SdramTiming;
  608. /** Perform the SDRAM1 memory initialization sequence
  609. */
  610. hsdram1.Instance = FMC_SDRAM_DEVICE;
  611. /* hsdram1.Init */
  612. hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
  613. hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
  614. hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
  615. hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32;
  616. hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
  617. hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
  618. hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
  619. hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
  620. hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
  621. hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
  622. /* SdramTiming */
  623. SdramTiming.LoadToActiveDelay = 2;
  624. SdramTiming.ExitSelfRefreshDelay = 7;
  625. SdramTiming.SelfRefreshTime = 4;
  626. SdramTiming.RowCycleDelay = 7;
  627. SdramTiming.WriteRecoveryTime = 3;
  628. SdramTiming.RPDelay = 2;
  629. SdramTiming.RCDDelay = 2;
  630. if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  631. {
  632. Error_Handler( );
  633. }
  634. }
  635. /**
  636. * @brief GPIO Initialization Function
  637. * @param None
  638. * @retval None
  639. */
  640. static void MX_GPIO_Init(void)
  641. {
  642. /* GPIO Ports Clock Enable */
  643. __HAL_RCC_GPIOE_CLK_ENABLE();
  644. __HAL_RCC_GPIOB_CLK_ENABLE();
  645. __HAL_RCC_GPIOC_CLK_ENABLE();
  646. __HAL_RCC_GPIOA_CLK_ENABLE();
  647. __HAL_RCC_GPIOG_CLK_ENABLE();
  648. __HAL_RCC_GPIOD_CLK_ENABLE();
  649. __HAL_RCC_GPIOI_CLK_ENABLE();
  650. __HAL_RCC_GPIOF_CLK_ENABLE();
  651. __HAL_RCC_GPIOH_CLK_ENABLE();
  652. }
  653. /* USER CODE BEGIN 4 */
  654. /* USER CODE END 4 */
  655. /**
  656. * @brief This function is executed in case of error occurrence.
  657. * @retval None
  658. */
  659. void Error_Handler(void)
  660. {
  661. /* USER CODE BEGIN Error_Handler_Debug */
  662. /* User can add his own implementation to report the HAL error return state */
  663. /* USER CODE END Error_Handler_Debug */
  664. }
  665. #ifdef USE_FULL_ASSERT
  666. /**
  667. * @brief Reports the name of the source file and the source line number
  668. * where the assert_param error has occurred.
  669. * @param file: pointer to the source file name
  670. * @param line: assert_param error line source number
  671. * @retval None
  672. */
  673. void assert_failed(uint8_t *file, uint32_t line)
  674. {
  675. /* USER CODE BEGIN 6 */
  676. /* User can add his own implementation to report the file name and line number,
  677. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  678. /* USER CODE END 6 */
  679. }
  680. #endif /* USE_FULL_ASSERT */
  681. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/