main.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2023 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 "usb_device.h"
  22. /* Private includes ----------------------------------------------------------*/
  23. /* USER CODE BEGIN Includes */
  24. /* USER CODE END Includes */
  25. /* Private typedef -----------------------------------------------------------*/
  26. /* USER CODE BEGIN PTD */
  27. /* USER CODE END PTD */
  28. /* Private define ------------------------------------------------------------*/
  29. /* USER CODE BEGIN PD */
  30. /* USER CODE END PD */
  31. /* Private macro -------------------------------------------------------------*/
  32. /* USER CODE BEGIN PM */
  33. /* USER CODE END PM */
  34. /* Private variables ---------------------------------------------------------*/
  35. ADC_HandleTypeDef hadc1;
  36. ADC_HandleTypeDef hadc2;
  37. ADC_HandleTypeDef hadc3;
  38. DCMI_HandleTypeDef hdcmi;
  39. DFSDM_Channel_HandleTypeDef hdfsdm1_channel1;
  40. DFSDM_Channel_HandleTypeDef hdfsdm1_channel2;
  41. I2C_HandleTypeDef hi2c1;
  42. I2C_HandleTypeDef hi2c2;
  43. UART_HandleTypeDef hlpuart1;
  44. UART_HandleTypeDef huart1;
  45. UART_HandleTypeDef huart2;
  46. QSPI_HandleTypeDef hqspi;
  47. SAI_HandleTypeDef hsai_BlockA1;
  48. SAI_HandleTypeDef hsai_BlockB1;
  49. SD_HandleTypeDef hsd1;
  50. SPI_HandleTypeDef hspi1;
  51. SPI_HandleTypeDef hspi2;
  52. SRAM_HandleTypeDef hsram1;
  53. SRAM_HandleTypeDef hsram2;
  54. /* USER CODE BEGIN PV */
  55. /* USER CODE END PV */
  56. /* Private function prototypes -----------------------------------------------*/
  57. void SystemClock_Config(void);
  58. void PeriphCommonClock_Config(void);
  59. static void MX_GPIO_Init(void);
  60. static void MX_ADC1_Init(void);
  61. static void MX_ADC2_Init(void);
  62. static void MX_ADC3_Init(void);
  63. static void MX_DCMI_Init(void);
  64. static void MX_DFSDM1_Init(void);
  65. static void MX_FMC_Init(void);
  66. static void MX_I2C1_Init(void);
  67. static void MX_I2C2_Init(void);
  68. static void MX_LPUART1_UART_Init(void);
  69. static void MX_USART1_UART_Init(void);
  70. static void MX_USART2_UART_Init(void);
  71. static void MX_QUADSPI_Init(void);
  72. static void MX_SAI1_Init(void);
  73. static void MX_SDMMC1_SD_Init(void);
  74. static void MX_SPI1_Init(void);
  75. static void MX_SPI2_Init(void);
  76. /* USER CODE BEGIN PFP */
  77. /* USER CODE END PFP */
  78. /* Private user code ---------------------------------------------------------*/
  79. /* USER CODE BEGIN 0 */
  80. /* USER CODE END 0 */
  81. /**
  82. * @brief The application entry point.
  83. * @retval int
  84. */
  85. int main(void)
  86. {
  87. /* USER CODE BEGIN 1 */
  88. /* USER CODE END 1 */
  89. /* MCU Configuration--------------------------------------------------------*/
  90. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  91. HAL_Init();
  92. /* USER CODE BEGIN Init */
  93. /* USER CODE END Init */
  94. /* Configure the system clock */
  95. SystemClock_Config();
  96. /* Configure the peripherals common clocks */
  97. PeriphCommonClock_Config();
  98. /* USER CODE BEGIN SysInit */
  99. /* USER CODE END SysInit */
  100. /* Initialize all configured peripherals */
  101. MX_GPIO_Init();
  102. MX_ADC1_Init();
  103. MX_ADC2_Init();
  104. MX_ADC3_Init();
  105. MX_DCMI_Init();
  106. MX_DFSDM1_Init();
  107. MX_FMC_Init();
  108. MX_I2C1_Init();
  109. MX_I2C2_Init();
  110. MX_LPUART1_UART_Init();
  111. MX_USART1_UART_Init();
  112. MX_USART2_UART_Init();
  113. MX_QUADSPI_Init();
  114. MX_SAI1_Init();
  115. MX_SDMMC1_SD_Init();
  116. MX_SPI1_Init();
  117. MX_SPI2_Init();
  118. MX_USB_DEVICE_Init();
  119. /* USER CODE BEGIN 2 */
  120. /* USER CODE END 2 */
  121. /* Infinite loop */
  122. /* USER CODE BEGIN WHILE */
  123. while (1)
  124. {
  125. /* USER CODE END WHILE */
  126. /* USER CODE BEGIN 3 */
  127. }
  128. /* USER CODE END 3 */
  129. }
  130. /**
  131. * @brief System Clock Configuration
  132. * @retval None
  133. */
  134. void SystemClock_Config(void)
  135. {
  136. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  137. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  138. /** Configure the main internal regulator output voltage
  139. */
  140. if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  141. {
  142. Error_Handler();
  143. }
  144. /** Configure LSE Drive Capability
  145. */
  146. HAL_PWR_EnableBkUpAccess();
  147. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  148. /** Initializes the RCC Oscillators according to the specified parameters
  149. * in the RCC_OscInitTypeDef structure.
  150. */
  151. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
  152. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  153. RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  154. RCC_OscInitStruct.MSICalibrationValue = 0;
  155. RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_9;
  156. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  157. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  158. RCC_OscInitStruct.PLL.PLLM = 5;
  159. RCC_OscInitStruct.PLL.PLLN = 71;
  160. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  161. RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  162. RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV6;
  163. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  164. {
  165. Error_Handler();
  166. }
  167. /** Initializes the CPU, AHB and APB buses clocks
  168. */
  169. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  170. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  171. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  172. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV4;
  173. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  174. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  175. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  176. {
  177. Error_Handler();
  178. }
  179. /** Enable MSI Auto calibration
  180. */
  181. HAL_RCCEx_EnableMSIPLLMode();
  182. }
  183. /**
  184. * @brief Peripherals Common Clock Configuration
  185. * @retval None
  186. */
  187. void PeriphCommonClock_Config(void)
  188. {
  189. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  190. /** Initializes the peripherals clock
  191. */
  192. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SAI1|RCC_PERIPHCLK_USB
  193. |RCC_PERIPHCLK_SDMMC1|RCC_PERIPHCLK_ADC;
  194. PeriphClkInit.Sai1ClockSelection = RCC_SAI1CLKSOURCE_PLLSAI1;
  195. PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
  196. PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
  197. PeriphClkInit.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_PLLSAI1;
  198. PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_MSI;
  199. PeriphClkInit.PLLSAI1.PLLSAI1M = 5;
  200. PeriphClkInit.PLLSAI1.PLLSAI1N = 20;
  201. PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV2;
  202. PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
  203. PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
  204. PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_SAI1CLK|RCC_PLLSAI1_48M2CLK
  205. |RCC_PLLSAI1_ADC1CLK;
  206. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  207. {
  208. Error_Handler();
  209. }
  210. }
  211. /**
  212. * @brief ADC1 Initialization Function
  213. * @param None
  214. * @retval None
  215. */
  216. static void MX_ADC1_Init(void)
  217. {
  218. /* USER CODE BEGIN ADC1_Init 0 */
  219. /* USER CODE END ADC1_Init 0 */
  220. ADC_MultiModeTypeDef multimode = {0};
  221. ADC_ChannelConfTypeDef sConfig = {0};
  222. /* USER CODE BEGIN ADC1_Init 1 */
  223. /* USER CODE END ADC1_Init 1 */
  224. /** Common config
  225. */
  226. hadc1.Instance = ADC1;
  227. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  228. hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  229. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  230. hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  231. hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  232. hadc1.Init.LowPowerAutoWait = DISABLE;
  233. hadc1.Init.ContinuousConvMode = DISABLE;
  234. hadc1.Init.NbrOfConversion = 1;
  235. hadc1.Init.DiscontinuousConvMode = DISABLE;
  236. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  237. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  238. hadc1.Init.DMAContinuousRequests = DISABLE;
  239. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  240. hadc1.Init.OversamplingMode = DISABLE;
  241. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  242. {
  243. Error_Handler();
  244. }
  245. /** Configure the ADC multi-mode
  246. */
  247. multimode.Mode = ADC_MODE_INDEPENDENT;
  248. if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  249. {
  250. Error_Handler();
  251. }
  252. /** Configure Regular Channel
  253. */
  254. sConfig.Channel = ADC_CHANNEL_4;
  255. sConfig.Rank = ADC_REGULAR_RANK_1;
  256. sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  257. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  258. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  259. sConfig.Offset = 0;
  260. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  261. {
  262. Error_Handler();
  263. }
  264. /* USER CODE BEGIN ADC1_Init 2 */
  265. /* USER CODE END ADC1_Init 2 */
  266. }
  267. /**
  268. * @brief ADC2 Initialization Function
  269. * @param None
  270. * @retval None
  271. */
  272. static void MX_ADC2_Init(void)
  273. {
  274. /* USER CODE BEGIN ADC2_Init 0 */
  275. /* USER CODE END ADC2_Init 0 */
  276. ADC_ChannelConfTypeDef sConfig = {0};
  277. /* USER CODE BEGIN ADC2_Init 1 */
  278. /* USER CODE END ADC2_Init 1 */
  279. /** Common config
  280. */
  281. hadc2.Instance = ADC2;
  282. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  283. hadc2.Init.Resolution = ADC_RESOLUTION_12B;
  284. hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  285. hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
  286. hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  287. hadc2.Init.LowPowerAutoWait = DISABLE;
  288. hadc2.Init.ContinuousConvMode = DISABLE;
  289. hadc2.Init.NbrOfConversion = 1;
  290. hadc2.Init.DiscontinuousConvMode = DISABLE;
  291. hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  292. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  293. hadc2.Init.DMAContinuousRequests = DISABLE;
  294. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  295. hadc2.Init.OversamplingMode = DISABLE;
  296. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  297. {
  298. Error_Handler();
  299. }
  300. /** Configure Regular Channel
  301. */
  302. sConfig.Channel = ADC_CHANNEL_9;
  303. sConfig.Rank = ADC_REGULAR_RANK_1;
  304. sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  305. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  306. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  307. sConfig.Offset = 0;
  308. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  309. {
  310. Error_Handler();
  311. }
  312. /* USER CODE BEGIN ADC2_Init 2 */
  313. /* USER CODE END ADC2_Init 2 */
  314. }
  315. /**
  316. * @brief ADC3 Initialization Function
  317. * @param None
  318. * @retval None
  319. */
  320. static void MX_ADC3_Init(void)
  321. {
  322. /* USER CODE BEGIN ADC3_Init 0 */
  323. /* USER CODE END ADC3_Init 0 */
  324. ADC_ChannelConfTypeDef sConfig = {0};
  325. /* USER CODE BEGIN ADC3_Init 1 */
  326. /* USER CODE END ADC3_Init 1 */
  327. /** Common config
  328. */
  329. hadc3.Instance = ADC3;
  330. hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  331. hadc3.Init.Resolution = ADC_RESOLUTION_12B;
  332. hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  333. hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
  334. hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  335. hadc3.Init.LowPowerAutoWait = DISABLE;
  336. hadc3.Init.ContinuousConvMode = DISABLE;
  337. hadc3.Init.NbrOfConversion = 1;
  338. hadc3.Init.DiscontinuousConvMode = DISABLE;
  339. hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  340. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  341. hadc3.Init.DMAContinuousRequests = DISABLE;
  342. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  343. hadc3.Init.OversamplingMode = DISABLE;
  344. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  345. {
  346. Error_Handler();
  347. }
  348. /** Configure Regular Channel
  349. */
  350. sConfig.Channel = ADC_CHANNEL_13;
  351. sConfig.Rank = ADC_REGULAR_RANK_1;
  352. sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  353. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  354. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  355. sConfig.Offset = 0;
  356. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  357. {
  358. Error_Handler();
  359. }
  360. /* USER CODE BEGIN ADC3_Init 2 */
  361. /* USER CODE END ADC3_Init 2 */
  362. }
  363. /**
  364. * @brief DCMI Initialization Function
  365. * @param None
  366. * @retval None
  367. */
  368. static void MX_DCMI_Init(void)
  369. {
  370. /* USER CODE BEGIN DCMI_Init 0 */
  371. /* USER CODE END DCMI_Init 0 */
  372. /* USER CODE BEGIN DCMI_Init 1 */
  373. /* USER CODE END DCMI_Init 1 */
  374. hdcmi.Instance = DCMI;
  375. hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
  376. hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
  377. hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
  378. hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
  379. hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
  380. hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  381. hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;
  382. hdcmi.Init.ByteSelectMode = DCMI_BSM_ALL;
  383. hdcmi.Init.ByteSelectStart = DCMI_OEBS_ODD;
  384. hdcmi.Init.LineSelectMode = DCMI_LSM_ALL;
  385. hdcmi.Init.LineSelectStart = DCMI_OELS_ODD;
  386. if (HAL_DCMI_Init(&hdcmi) != HAL_OK)
  387. {
  388. Error_Handler();
  389. }
  390. /* USER CODE BEGIN DCMI_Init 2 */
  391. /* USER CODE END DCMI_Init 2 */
  392. }
  393. /**
  394. * @brief DFSDM1 Initialization Function
  395. * @param None
  396. * @retval None
  397. */
  398. static void MX_DFSDM1_Init(void)
  399. {
  400. /* USER CODE BEGIN DFSDM1_Init 0 */
  401. /* USER CODE END DFSDM1_Init 0 */
  402. /* USER CODE BEGIN DFSDM1_Init 1 */
  403. /* USER CODE END DFSDM1_Init 1 */
  404. hdfsdm1_channel1.Instance = DFSDM1_Channel1;
  405. hdfsdm1_channel1.Init.OutputClock.Activation = ENABLE;
  406. hdfsdm1_channel1.Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
  407. hdfsdm1_channel1.Init.OutputClock.Divider = 2;
  408. hdfsdm1_channel1.Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS;
  409. hdfsdm1_channel1.Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE;
  410. hdfsdm1_channel1.Init.Input.Pins = DFSDM_CHANNEL_SAME_CHANNEL_PINS;
  411. hdfsdm1_channel1.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING;
  412. hdfsdm1_channel1.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
  413. hdfsdm1_channel1.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER;
  414. hdfsdm1_channel1.Init.Awd.Oversampling = 1;
  415. hdfsdm1_channel1.Init.Offset = 0;
  416. hdfsdm1_channel1.Init.RightBitShift = 0x00;
  417. if (HAL_DFSDM_ChannelInit(&hdfsdm1_channel1) != HAL_OK)
  418. {
  419. Error_Handler();
  420. }
  421. hdfsdm1_channel2.Instance = DFSDM1_Channel2;
  422. hdfsdm1_channel2.Init.OutputClock.Activation = ENABLE;
  423. hdfsdm1_channel2.Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
  424. hdfsdm1_channel2.Init.OutputClock.Divider = 2;
  425. hdfsdm1_channel2.Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS;
  426. hdfsdm1_channel2.Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE;
  427. hdfsdm1_channel2.Init.Input.Pins = DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS;
  428. hdfsdm1_channel2.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING;
  429. hdfsdm1_channel2.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
  430. hdfsdm1_channel2.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER;
  431. hdfsdm1_channel2.Init.Awd.Oversampling = 1;
  432. hdfsdm1_channel2.Init.Offset = 0;
  433. hdfsdm1_channel2.Init.RightBitShift = 0x00;
  434. if (HAL_DFSDM_ChannelInit(&hdfsdm1_channel2) != HAL_OK)
  435. {
  436. Error_Handler();
  437. }
  438. /* USER CODE BEGIN DFSDM1_Init 2 */
  439. /* USER CODE END DFSDM1_Init 2 */
  440. }
  441. /**
  442. * @brief I2C1 Initialization Function
  443. * @param None
  444. * @retval None
  445. */
  446. static void MX_I2C1_Init(void)
  447. {
  448. /* USER CODE BEGIN I2C1_Init 0 */
  449. /* USER CODE END I2C1_Init 0 */
  450. /* USER CODE BEGIN I2C1_Init 1 */
  451. /* USER CODE END I2C1_Init 1 */
  452. hi2c1.Instance = I2C1;
  453. hi2c1.Init.Timing = 0x00000E14;
  454. hi2c1.Init.OwnAddress1 = 0;
  455. hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  456. hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  457. hi2c1.Init.OwnAddress2 = 0;
  458. hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  459. hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  460. hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  461. if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  462. {
  463. Error_Handler();
  464. }
  465. /** Configure Analogue filter
  466. */
  467. if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  468. {
  469. Error_Handler();
  470. }
  471. /** Configure Digital filter
  472. */
  473. if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  474. {
  475. Error_Handler();
  476. }
  477. /* USER CODE BEGIN I2C1_Init 2 */
  478. /* USER CODE END I2C1_Init 2 */
  479. }
  480. /**
  481. * @brief I2C2 Initialization Function
  482. * @param None
  483. * @retval None
  484. */
  485. static void MX_I2C2_Init(void)
  486. {
  487. /* USER CODE BEGIN I2C2_Init 0 */
  488. /* USER CODE END I2C2_Init 0 */
  489. /* USER CODE BEGIN I2C2_Init 1 */
  490. /* USER CODE END I2C2_Init 1 */
  491. hi2c2.Instance = I2C2;
  492. hi2c2.Init.Timing = 0x00000E14;
  493. hi2c2.Init.OwnAddress1 = 0;
  494. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  495. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  496. hi2c2.Init.OwnAddress2 = 0;
  497. hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  498. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  499. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  500. if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  501. {
  502. Error_Handler();
  503. }
  504. /** Configure Analogue filter
  505. */
  506. if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  507. {
  508. Error_Handler();
  509. }
  510. /** Configure Digital filter
  511. */
  512. if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
  513. {
  514. Error_Handler();
  515. }
  516. /* USER CODE BEGIN I2C2_Init 2 */
  517. /* USER CODE END I2C2_Init 2 */
  518. }
  519. /**
  520. * @brief LPUART1 Initialization Function
  521. * @param None
  522. * @retval None
  523. */
  524. static void MX_LPUART1_UART_Init(void)
  525. {
  526. /* USER CODE BEGIN LPUART1_Init 0 */
  527. /* USER CODE END LPUART1_Init 0 */
  528. /* USER CODE BEGIN LPUART1_Init 1 */
  529. /* USER CODE END LPUART1_Init 1 */
  530. hlpuart1.Instance = LPUART1;
  531. hlpuart1.Init.BaudRate = 209700;
  532. hlpuart1.Init.WordLength = UART_WORDLENGTH_7B;
  533. hlpuart1.Init.StopBits = UART_STOPBITS_1;
  534. hlpuart1.Init.Parity = UART_PARITY_NONE;
  535. hlpuart1.Init.Mode = UART_MODE_TX_RX;
  536. hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  537. hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  538. hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  539. if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  540. {
  541. Error_Handler();
  542. }
  543. /* USER CODE BEGIN LPUART1_Init 2 */
  544. /* USER CODE END LPUART1_Init 2 */
  545. }
  546. /**
  547. * @brief USART1 Initialization Function
  548. * @param None
  549. * @retval None
  550. */
  551. static void MX_USART1_UART_Init(void)
  552. {
  553. /* USER CODE BEGIN USART1_Init 0 */
  554. /* USER CODE END USART1_Init 0 */
  555. /* USER CODE BEGIN USART1_Init 1 */
  556. /* USER CODE END USART1_Init 1 */
  557. huart1.Instance = USART1;
  558. huart1.Init.BaudRate = 115200;
  559. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  560. huart1.Init.StopBits = UART_STOPBITS_1;
  561. huart1.Init.Parity = UART_PARITY_NONE;
  562. huart1.Init.Mode = UART_MODE_TX_RX;
  563. huart1.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
  564. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  565. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  566. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  567. if (HAL_UART_Init(&huart1) != HAL_OK)
  568. {
  569. Error_Handler();
  570. }
  571. /* USER CODE BEGIN USART1_Init 2 */
  572. /* USER CODE END USART1_Init 2 */
  573. }
  574. /**
  575. * @brief USART2 Initialization Function
  576. * @param None
  577. * @retval None
  578. */
  579. static void MX_USART2_UART_Init(void)
  580. {
  581. /* USER CODE BEGIN USART2_Init 0 */
  582. /* USER CODE END USART2_Init 0 */
  583. /* USER CODE BEGIN USART2_Init 1 */
  584. /* USER CODE END USART2_Init 1 */
  585. huart2.Instance = USART2;
  586. huart2.Init.BaudRate = 115200;
  587. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  588. huart2.Init.StopBits = UART_STOPBITS_1;
  589. huart2.Init.Parity = UART_PARITY_NONE;
  590. huart2.Init.Mode = UART_MODE_TX_RX;
  591. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  592. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  593. huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  594. huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  595. if (HAL_UART_Init(&huart2) != HAL_OK)
  596. {
  597. Error_Handler();
  598. }
  599. /* USER CODE BEGIN USART2_Init 2 */
  600. /* USER CODE END USART2_Init 2 */
  601. }
  602. /**
  603. * @brief QUADSPI Initialization Function
  604. * @param None
  605. * @retval None
  606. */
  607. static void MX_QUADSPI_Init(void)
  608. {
  609. /* USER CODE BEGIN QUADSPI_Init 0 */
  610. /* USER CODE END QUADSPI_Init 0 */
  611. /* USER CODE BEGIN QUADSPI_Init 1 */
  612. /* USER CODE END QUADSPI_Init 1 */
  613. /* QUADSPI parameter configuration*/
  614. hqspi.Instance = QUADSPI;
  615. hqspi.Init.ClockPrescaler = 2;
  616. hqspi.Init.FifoThreshold = 4;
  617. hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
  618. hqspi.Init.FlashSize = 23;
  619. hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
  620. hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  621. hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  622. hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  623. if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  624. {
  625. Error_Handler();
  626. }
  627. /* USER CODE BEGIN QUADSPI_Init 2 */
  628. /* USER CODE END QUADSPI_Init 2 */
  629. }
  630. /**
  631. * @brief SAI1 Initialization Function
  632. * @param None
  633. * @retval None
  634. */
  635. static void MX_SAI1_Init(void)
  636. {
  637. /* USER CODE BEGIN SAI1_Init 0 */
  638. /* USER CODE END SAI1_Init 0 */
  639. /* USER CODE BEGIN SAI1_Init 1 */
  640. /* USER CODE END SAI1_Init 1 */
  641. hsai_BlockA1.Instance = SAI1_Block_A;
  642. hsai_BlockA1.Init.Protocol = SAI_FREE_PROTOCOL;
  643. hsai_BlockA1.Init.AudioMode = SAI_MODEMASTER_TX;
  644. hsai_BlockA1.Init.DataSize = SAI_DATASIZE_8;
  645. hsai_BlockA1.Init.FirstBit = SAI_FIRSTBIT_MSB;
  646. hsai_BlockA1.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
  647. hsai_BlockA1.Init.Synchro = SAI_ASYNCHRONOUS;
  648. hsai_BlockA1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
  649. hsai_BlockA1.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;
  650. hsai_BlockA1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
  651. hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_192K;
  652. hsai_BlockA1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
  653. hsai_BlockA1.Init.MonoStereoMode = SAI_STEREOMODE;
  654. hsai_BlockA1.Init.CompandingMode = SAI_NOCOMPANDING;
  655. hsai_BlockA1.Init.TriState = SAI_OUTPUT_NOTRELEASED;
  656. hsai_BlockA1.FrameInit.FrameLength = 8;
  657. hsai_BlockA1.FrameInit.ActiveFrameLength = 1;
  658. hsai_BlockA1.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
  659. hsai_BlockA1.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
  660. hsai_BlockA1.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
  661. hsai_BlockA1.SlotInit.FirstBitOffset = 0;
  662. hsai_BlockA1.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
  663. hsai_BlockA1.SlotInit.SlotNumber = 1;
  664. hsai_BlockA1.SlotInit.SlotActive = 0x00000000;
  665. if (HAL_SAI_Init(&hsai_BlockA1) != HAL_OK)
  666. {
  667. Error_Handler();
  668. }
  669. hsai_BlockB1.Instance = SAI1_Block_B;
  670. hsai_BlockB1.Init.Protocol = SAI_FREE_PROTOCOL;
  671. hsai_BlockB1.Init.AudioMode = SAI_MODESLAVE_RX;
  672. hsai_BlockB1.Init.DataSize = SAI_DATASIZE_8;
  673. hsai_BlockB1.Init.FirstBit = SAI_FIRSTBIT_MSB;
  674. hsai_BlockB1.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE;
  675. hsai_BlockB1.Init.Synchro = SAI_SYNCHRONOUS;
  676. hsai_BlockB1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE;
  677. hsai_BlockB1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
  678. hsai_BlockB1.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
  679. hsai_BlockB1.Init.MonoStereoMode = SAI_STEREOMODE;
  680. hsai_BlockB1.Init.CompandingMode = SAI_NOCOMPANDING;
  681. hsai_BlockB1.Init.TriState = SAI_OUTPUT_NOTRELEASED;
  682. hsai_BlockB1.FrameInit.FrameLength = 8;
  683. hsai_BlockB1.FrameInit.ActiveFrameLength = 1;
  684. hsai_BlockB1.FrameInit.FSDefinition = SAI_FS_STARTFRAME;
  685. hsai_BlockB1.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
  686. hsai_BlockB1.FrameInit.FSOffset = SAI_FS_FIRSTBIT;
  687. hsai_BlockB1.SlotInit.FirstBitOffset = 0;
  688. hsai_BlockB1.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
  689. hsai_BlockB1.SlotInit.SlotNumber = 1;
  690. hsai_BlockB1.SlotInit.SlotActive = 0x00000000;
  691. if (HAL_SAI_Init(&hsai_BlockB1) != HAL_OK)
  692. {
  693. Error_Handler();
  694. }
  695. /* USER CODE BEGIN SAI1_Init 2 */
  696. /* USER CODE END SAI1_Init 2 */
  697. }
  698. /**
  699. * @brief SDMMC1 Initialization Function
  700. * @param None
  701. * @retval None
  702. */
  703. static void MX_SDMMC1_SD_Init(void)
  704. {
  705. /* USER CODE BEGIN SDMMC1_Init 0 */
  706. /* USER CODE END SDMMC1_Init 0 */
  707. /* USER CODE BEGIN SDMMC1_Init 1 */
  708. /* USER CODE END SDMMC1_Init 1 */
  709. hsd1.Instance = SDMMC1;
  710. hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
  711. hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
  712. hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  713. hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
  714. hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
  715. hsd1.Init.ClockDiv = 0;
  716. if (HAL_SD_Init(&hsd1) != HAL_OK)
  717. {
  718. Error_Handler();
  719. }
  720. if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK)
  721. {
  722. Error_Handler();
  723. }
  724. /* USER CODE BEGIN SDMMC1_Init 2 */
  725. /* USER CODE END SDMMC1_Init 2 */
  726. }
  727. /**
  728. * @brief SPI1 Initialization Function
  729. * @param None
  730. * @retval None
  731. */
  732. static void MX_SPI1_Init(void)
  733. {
  734. /* USER CODE BEGIN SPI1_Init 0 */
  735. /* USER CODE END SPI1_Init 0 */
  736. /* USER CODE BEGIN SPI1_Init 1 */
  737. /* USER CODE END SPI1_Init 1 */
  738. /* SPI1 parameter configuration*/
  739. hspi1.Instance = SPI1;
  740. hspi1.Init.Mode = SPI_MODE_MASTER;
  741. hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  742. hspi1.Init.DataSize = SPI_DATASIZE_4BIT;
  743. hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  744. hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  745. hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
  746. hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  747. hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  748. hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  749. hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  750. hspi1.Init.CRCPolynomial = 7;
  751. hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  752. hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  753. if (HAL_SPI_Init(&hspi1) != HAL_OK)
  754. {
  755. Error_Handler();
  756. }
  757. /* USER CODE BEGIN SPI1_Init 2 */
  758. /* USER CODE END SPI1_Init 2 */
  759. }
  760. /**
  761. * @brief SPI2 Initialization Function
  762. * @param None
  763. * @retval None
  764. */
  765. static void MX_SPI2_Init(void)
  766. {
  767. /* USER CODE BEGIN SPI2_Init 0 */
  768. /* USER CODE END SPI2_Init 0 */
  769. /* USER CODE BEGIN SPI2_Init 1 */
  770. /* USER CODE END SPI2_Init 1 */
  771. /* SPI2 parameter configuration*/
  772. hspi2.Instance = SPI2;
  773. hspi2.Init.Mode = SPI_MODE_MASTER;
  774. hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  775. hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
  776. hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  777. hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  778. hspi2.Init.NSS = SPI_NSS_SOFT;
  779. hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  780. hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  781. hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  782. hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  783. hspi2.Init.CRCPolynomial = 7;
  784. hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  785. hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  786. if (HAL_SPI_Init(&hspi2) != HAL_OK)
  787. {
  788. Error_Handler();
  789. }
  790. /* USER CODE BEGIN SPI2_Init 2 */
  791. /* USER CODE END SPI2_Init 2 */
  792. }
  793. /* FMC initialization function */
  794. static void MX_FMC_Init(void)
  795. {
  796. /* USER CODE BEGIN FMC_Init 0 */
  797. /* USER CODE END FMC_Init 0 */
  798. FMC_NORSRAM_TimingTypeDef Timing = {0};
  799. /* USER CODE BEGIN FMC_Init 1 */
  800. /* USER CODE END FMC_Init 1 */
  801. /** Perform the SRAM1 memory initialization sequence
  802. */
  803. hsram1.Instance = FMC_NORSRAM_DEVICE;
  804. hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  805. /* hsram1.Init */
  806. hsram1.Init.NSBank = FMC_NORSRAM_BANK2;
  807. hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  808. hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  809. hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  810. hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  811. hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  812. hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  813. hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;
  814. hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  815. hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  816. hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  817. hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  818. hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  819. hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
  820. hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  821. /* Timing */
  822. Timing.AddressSetupTime = 15;
  823. Timing.AddressHoldTime = 15;
  824. Timing.DataSetupTime = 255;
  825. Timing.BusTurnAroundDuration = 15;
  826. Timing.CLKDivision = 16;
  827. Timing.DataLatency = 17;
  828. Timing.AccessMode = FMC_ACCESS_MODE_A;
  829. /* ExtTiming */
  830. if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  831. {
  832. Error_Handler( );
  833. }
  834. /** Perform the SRAM2 memory initialization sequence
  835. */
  836. hsram2.Instance = FMC_NORSRAM_DEVICE;
  837. hsram2.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  838. /* hsram2.Init */
  839. hsram2.Init.NSBank = FMC_NORSRAM_BANK1;
  840. hsram2.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  841. hsram2.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  842. hsram2.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  843. hsram2.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  844. hsram2.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  845. hsram2.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  846. hsram2.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  847. hsram2.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  848. hsram2.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  849. hsram2.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  850. hsram2.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  851. hsram2.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  852. hsram2.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
  853. hsram2.Init.PageSize = FMC_PAGE_SIZE_NONE;
  854. /* Timing */
  855. Timing.AddressSetupTime = 15;
  856. Timing.AddressHoldTime = 15;
  857. Timing.DataSetupTime = 255;
  858. Timing.BusTurnAroundDuration = 15;
  859. Timing.CLKDivision = 16;
  860. Timing.DataLatency = 17;
  861. Timing.AccessMode = FMC_ACCESS_MODE_A;
  862. /* ExtTiming */
  863. if (HAL_SRAM_Init(&hsram2, &Timing, NULL) != HAL_OK)
  864. {
  865. Error_Handler( );
  866. }
  867. /* USER CODE BEGIN FMC_Init 2 */
  868. /* USER CODE END FMC_Init 2 */
  869. }
  870. /**
  871. * @brief GPIO Initialization Function
  872. * @param None
  873. * @retval None
  874. */
  875. static void MX_GPIO_Init(void)
  876. {
  877. GPIO_InitTypeDef GPIO_InitStruct = {0};
  878. /* USER CODE BEGIN MX_GPIO_Init_1 */
  879. /* USER CODE END MX_GPIO_Init_1 */
  880. /* GPIO Ports Clock Enable */
  881. __HAL_RCC_GPIOI_CLK_ENABLE();
  882. __HAL_RCC_GPIOH_CLK_ENABLE();
  883. __HAL_RCC_GPIOE_CLK_ENABLE();
  884. __HAL_RCC_GPIOB_CLK_ENABLE();
  885. __HAL_RCC_GPIOA_CLK_ENABLE();
  886. __HAL_RCC_GPIOG_CLK_ENABLE();
  887. HAL_PWREx_EnableVddIO2();
  888. __HAL_RCC_GPIOD_CLK_ENABLE();
  889. __HAL_RCC_GPIOC_CLK_ENABLE();
  890. __HAL_RCC_GPIOF_CLK_ENABLE();
  891. /*Configure GPIO pin Output Level */
  892. HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_RESET);
  893. /*Configure GPIO pin Output Level */
  894. HAL_GPIO_WritePin(GPIOH, MFX_WAKEUP_Pin|LCD_PWR_ON_Pin|MIC_VDD_Pin, GPIO_PIN_RESET);
  895. /*Configure GPIO pin Output Level */
  896. HAL_GPIO_WritePin(Audio_RST_GPIO_Port, Audio_RST_Pin, GPIO_PIN_RESET);
  897. /*Configure GPIO pin Output Level */
  898. HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
  899. /*Configure GPIO pins : JOY_DOWN_Pin JOY_LEFT_Pin JOY_UP_Pin */
  900. GPIO_InitStruct.Pin = JOY_DOWN_Pin|JOY_LEFT_Pin|JOY_UP_Pin;
  901. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  902. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  903. HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
  904. /*Configure GPIO pin : STMOD_INT_Pin */
  905. GPIO_InitStruct.Pin = STMOD_INT_Pin;
  906. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  907. GPIO_InitStruct.Pull = GPIO_NOPULL;
  908. HAL_GPIO_Init(STMOD_INT_GPIO_Port, &GPIO_InitStruct);
  909. /*Configure GPIO pin : LCD_BL_Pin */
  910. GPIO_InitStruct.Pin = LCD_BL_Pin;
  911. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  912. GPIO_InitStruct.Pull = GPIO_NOPULL;
  913. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  914. HAL_GPIO_Init(LCD_BL_GPIO_Port, &GPIO_InitStruct);
  915. /*Configure GPIO pin : ARD_D6_Pin */
  916. GPIO_InitStruct.Pin = ARD_D6_Pin;
  917. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  918. GPIO_InitStruct.Pull = GPIO_NOPULL;
  919. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  920. GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
  921. HAL_GPIO_Init(ARD_D6_GPIO_Port, &GPIO_InitStruct);
  922. /*Configure GPIO pins : ARD_D3_Pin ARD_D9_Pin */
  923. GPIO_InitStruct.Pin = ARD_D3_Pin|ARD_D9_Pin;
  924. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  925. GPIO_InitStruct.Pull = GPIO_NOPULL;
  926. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  927. GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
  928. HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  929. /*Configure GPIO pin : ARD_D5_Pin */
  930. GPIO_InitStruct.Pin = ARD_D5_Pin;
  931. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  932. GPIO_InitStruct.Pull = GPIO_NOPULL;
  933. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  934. GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
  935. HAL_GPIO_Init(ARD_D5_GPIO_Port, &GPIO_InitStruct);
  936. /*Configure GPIO pin : LCD_TE_Pin */
  937. GPIO_InitStruct.Pin = LCD_TE_Pin;
  938. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  939. GPIO_InitStruct.Pull = GPIO_NOPULL;
  940. HAL_GPIO_Init(LCD_TE_GPIO_Port, &GPIO_InitStruct);
  941. /*Configure GPIO pins : MFX_WAKEUP_Pin LCD_PWR_ON_Pin MIC_VDD_Pin */
  942. GPIO_InitStruct.Pin = MFX_WAKEUP_Pin|LCD_PWR_ON_Pin|MIC_VDD_Pin;
  943. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  944. GPIO_InitStruct.Pull = GPIO_NOPULL;
  945. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  946. HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  947. /*Configure GPIO pin : Audio_RST_Pin */
  948. GPIO_InitStruct.Pin = Audio_RST_Pin;
  949. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  950. GPIO_InitStruct.Pull = GPIO_NOPULL;
  951. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  952. HAL_GPIO_Init(Audio_RST_GPIO_Port, &GPIO_InitStruct);
  953. /*Configure GPIO pin : CTP_INT_Pin */
  954. GPIO_InitStruct.Pin = CTP_INT_Pin;
  955. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  956. GPIO_InitStruct.Pull = GPIO_NOPULL;
  957. HAL_GPIO_Init(CTP_INT_GPIO_Port, &GPIO_InitStruct);
  958. /*Configure GPIO pin : DCMI_CLK_Pin */
  959. GPIO_InitStruct.Pin = DCMI_CLK_Pin;
  960. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  961. GPIO_InitStruct.Pull = GPIO_NOPULL;
  962. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  963. GPIO_InitStruct.Alternate = GPIO_AF14_LPTIM2;
  964. HAL_GPIO_Init(DCMI_CLK_GPIO_Port, &GPIO_InitStruct);
  965. /*Configure GPIO pin : MFX_IRQ_OUT_Pin */
  966. GPIO_InitStruct.Pin = MFX_IRQ_OUT_Pin;
  967. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  968. GPIO_InitStruct.Pull = GPIO_NOPULL;
  969. HAL_GPIO_Init(MFX_IRQ_OUT_GPIO_Port, &GPIO_InitStruct);
  970. /*Configure GPIO pin : JOY_RIGHT_Pin */
  971. GPIO_InitStruct.Pin = JOY_RIGHT_Pin;
  972. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  973. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  974. HAL_GPIO_Init(JOY_RIGHT_GPIO_Port, &GPIO_InitStruct);
  975. /*Configure GPIO pin : STMOD_RESET_Pin */
  976. GPIO_InitStruct.Pin = STMOD_RESET_Pin;
  977. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  978. GPIO_InitStruct.Pull = GPIO_NOPULL;
  979. HAL_GPIO_Init(STMOD_RESET_GPIO_Port, &GPIO_InitStruct);
  980. /*Configure GPIO pin : LED1_Pin */
  981. GPIO_InitStruct.Pin = LED1_Pin;
  982. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  983. GPIO_InitStruct.Pull = GPIO_NOPULL;
  984. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  985. HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
  986. /* USER CODE BEGIN MX_GPIO_Init_2 */
  987. /* USER CODE END MX_GPIO_Init_2 */
  988. }
  989. /* USER CODE BEGIN 4 */
  990. /* USER CODE END 4 */
  991. /**
  992. * @brief This function is executed in case of error occurrence.
  993. * @retval None
  994. */
  995. void Error_Handler(void)
  996. {
  997. /* USER CODE BEGIN Error_Handler_Debug */
  998. /* User can add his own implementation to report the HAL error return state */
  999. __disable_irq();
  1000. while (1)
  1001. {
  1002. }
  1003. /* USER CODE END Error_Handler_Debug */
  1004. }
  1005. #ifdef USE_FULL_ASSERT
  1006. /**
  1007. * @brief Reports the name of the source file and the source line number
  1008. * where the assert_param error has occurred.
  1009. * @param file: pointer to the source file name
  1010. * @param line: assert_param error line source number
  1011. * @retval None
  1012. */
  1013. void assert_failed(uint8_t *file, uint32_t line)
  1014. {
  1015. /* USER CODE BEGIN 6 */
  1016. /* User can add his own implementation to report the file name and line number,
  1017. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  1018. /* USER CODE END 6 */
  1019. }
  1020. #endif /* USE_FULL_ASSERT */