main.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  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 "string.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. #if defined ( __ICCARM__ ) /*!< IAR Compiler */
  37. #pragma location=0x30040000
  38. ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
  39. #pragma location=0x30040060
  40. ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
  41. #pragma location=0x30040200
  42. uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE]; /* Ethernet Receive Buffers */
  43. #elif defined ( __CC_ARM ) /* MDK ARM Compiler */
  44. __attribute__((at(0x30040000))) ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
  45. __attribute__((at(0x30040060))) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
  46. __attribute__((at(0x30040200))) uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE]; /* Ethernet Receive Buffer */
  47. #elif defined ( __GNUC__ ) /* GNU Compiler */
  48. ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
  49. ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */
  50. uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE] __attribute__((section(".RxArraySection"))); /* Ethernet Receive Buffers */
  51. #endif
  52. ETH_TxPacketConfig TxConfig;
  53. ADC_HandleTypeDef hadc3;
  54. CRC_HandleTypeDef hcrc;
  55. DAC_HandleTypeDef hdac1;
  56. ETH_HandleTypeDef heth;
  57. QSPI_HandleTypeDef hqspi;
  58. RNG_HandleTypeDef hrng;
  59. MMC_HandleTypeDef hmmc1;
  60. TIM_HandleTypeDef htim12;
  61. UART_HandleTypeDef huart4;
  62. UART_HandleTypeDef huart1;
  63. PCD_HandleTypeDef hpcd_USB_OTG_HS;
  64. /* USER CODE BEGIN PV */
  65. /* USER CODE END PV */
  66. /* Private function prototypes -----------------------------------------------*/
  67. void SystemClock_Config(void);
  68. static void MX_GPIO_Init(void);
  69. static void MX_USART1_UART_Init(void);
  70. static void MX_CRC_Init(void);
  71. static void MX_RNG_Init(void);
  72. static void MX_ADC3_Init(void);
  73. static void MX_DAC1_Init(void);
  74. static void MX_ETH_Init(void);
  75. static void MX_QUADSPI_Init(void);
  76. static void MX_SDMMC1_MMC_Init(void);
  77. static void MX_UART4_Init(void);
  78. static void MX_TIM12_Init(void);
  79. static void MX_USB_OTG_HS_PCD_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. /* MCU Configuration--------------------------------------------------------*/
  94. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  95. HAL_Init();
  96. /* USER CODE BEGIN Init */
  97. /* USER CODE END Init */
  98. /* Configure the system clock */
  99. SystemClock_Config();
  100. /* USER CODE BEGIN SysInit */
  101. /* USER CODE END SysInit */
  102. /* Initialize all configured peripherals */
  103. MX_GPIO_Init();
  104. MX_USART1_UART_Init();
  105. MX_CRC_Init();
  106. MX_RNG_Init();
  107. MX_ADC3_Init();
  108. MX_DAC1_Init();
  109. MX_ETH_Init();
  110. MX_QUADSPI_Init();
  111. MX_SDMMC1_MMC_Init();
  112. MX_UART4_Init();
  113. MX_TIM12_Init();
  114. MX_USB_OTG_HS_PCD_Init();
  115. /* USER CODE BEGIN 2 */
  116. /* USER CODE END 2 */
  117. /* Infinite loop */
  118. /* USER CODE BEGIN WHILE */
  119. while (1)
  120. {
  121. /* USER CODE END WHILE */
  122. /* USER CODE BEGIN 3 */
  123. }
  124. /* USER CODE END 3 */
  125. }
  126. /**
  127. * @brief System Clock Configuration
  128. * @retval None
  129. */
  130. void SystemClock_Config(void)
  131. {
  132. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  133. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  134. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  135. /** Supply configuration update enable
  136. */
  137. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  138. /** Configure the main internal regulator output voltage
  139. */
  140. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  141. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  142. /** Macro to configure the PLL clock source
  143. */
  144. __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
  145. /** Initializes the CPU, AHB and APB busses clocks
  146. */
  147. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  148. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  149. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  150. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  151. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  152. RCC_OscInitStruct.PLL.PLLM = 5;
  153. RCC_OscInitStruct.PLL.PLLN = 160;
  154. RCC_OscInitStruct.PLL.PLLP = 2;
  155. RCC_OscInitStruct.PLL.PLLQ = 2;
  156. RCC_OscInitStruct.PLL.PLLR = 2;
  157. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  158. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  159. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  160. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  161. {
  162. Error_Handler();
  163. }
  164. /** Initializes the CPU, AHB and APB busses clocks
  165. */
  166. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  167. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  168. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  169. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  170. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  171. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  172. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  173. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  174. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  175. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  176. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  177. {
  178. Error_Handler();
  179. }
  180. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART4|RCC_PERIPHCLK_USART1
  181. |RCC_PERIPHCLK_RNG|RCC_PERIPHCLK_SDMMC
  182. |RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_QSPI;
  183. PeriphClkInitStruct.PLL2.PLL2M = 5;
  184. PeriphClkInitStruct.PLL2.PLL2N = 192;
  185. PeriphClkInitStruct.PLL2.PLL2P = 2;
  186. PeriphClkInitStruct.PLL2.PLL2Q = 2;
  187. PeriphClkInitStruct.PLL2.PLL2R = 2;
  188. PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
  189. PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
  190. PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
  191. PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
  192. PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
  193. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  194. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  195. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  196. PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
  197. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  198. {
  199. Error_Handler();
  200. }
  201. }
  202. /**
  203. * @brief ADC3 Initialization Function
  204. * @param None
  205. * @retval None
  206. */
  207. static void MX_ADC3_Init(void)
  208. {
  209. /* USER CODE BEGIN ADC3_Init 0 */
  210. /* USER CODE END ADC3_Init 0 */
  211. ADC_ChannelConfTypeDef sConfig = {0};
  212. /* USER CODE BEGIN ADC3_Init 1 */
  213. /* USER CODE END ADC3_Init 1 */
  214. /** Common config
  215. */
  216. hadc3.Instance = ADC3;
  217. hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV16;
  218. hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  219. hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
  220. hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  221. hadc3.Init.LowPowerAutoWait = DISABLE;
  222. hadc3.Init.ContinuousConvMode = DISABLE;
  223. hadc3.Init.NbrOfConversion = 1;
  224. hadc3.Init.DiscontinuousConvMode = DISABLE;
  225. hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  226. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  227. hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
  228. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  229. hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  230. hadc3.Init.OversamplingMode = DISABLE;
  231. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  232. {
  233. Error_Handler();
  234. }
  235. /** Configure Regular Channel
  236. */
  237. sConfig.Channel = ADC_CHANNEL_5;
  238. sConfig.Rank = ADC_REGULAR_RANK_1;
  239. sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  240. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  241. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  242. sConfig.Offset = 0;
  243. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  244. {
  245. Error_Handler();
  246. }
  247. /* USER CODE BEGIN ADC3_Init 2 */
  248. /* USER CODE END ADC3_Init 2 */
  249. }
  250. /**
  251. * @brief CRC Initialization Function
  252. * @param None
  253. * @retval None
  254. */
  255. static void MX_CRC_Init(void)
  256. {
  257. /* USER CODE BEGIN CRC_Init 0 */
  258. /* USER CODE END CRC_Init 0 */
  259. /* USER CODE BEGIN CRC_Init 1 */
  260. /* USER CODE END CRC_Init 1 */
  261. hcrc.Instance = CRC;
  262. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
  263. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  264. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  265. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  266. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  267. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  268. {
  269. Error_Handler();
  270. }
  271. /* USER CODE BEGIN CRC_Init 2 */
  272. /* USER CODE END CRC_Init 2 */
  273. }
  274. /**
  275. * @brief DAC1 Initialization Function
  276. * @param None
  277. * @retval None
  278. */
  279. static void MX_DAC1_Init(void)
  280. {
  281. /* USER CODE BEGIN DAC1_Init 0 */
  282. /* USER CODE END DAC1_Init 0 */
  283. DAC_ChannelConfTypeDef sConfig = {0};
  284. /* USER CODE BEGIN DAC1_Init 1 */
  285. /* USER CODE END DAC1_Init 1 */
  286. /** DAC Initialization
  287. */
  288. hdac1.Instance = DAC1;
  289. if (HAL_DAC_Init(&hdac1) != HAL_OK)
  290. {
  291. Error_Handler();
  292. }
  293. /** DAC channel OUT1 config
  294. */
  295. sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
  296. sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  297. sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  298. sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
  299. sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
  300. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  301. {
  302. Error_Handler();
  303. }
  304. /* USER CODE BEGIN DAC1_Init 2 */
  305. /* USER CODE END DAC1_Init 2 */
  306. }
  307. /**
  308. * @brief ETH Initialization Function
  309. * @param None
  310. * @retval None
  311. */
  312. static void MX_ETH_Init(void)
  313. {
  314. /* USER CODE BEGIN ETH_Init 0 */
  315. /* USER CODE END ETH_Init 0 */
  316. uint8_t MACAddr[6] ;
  317. /* USER CODE BEGIN ETH_Init 1 */
  318. /* USER CODE END ETH_Init 1 */
  319. heth.Instance = ETH;
  320. MACAddr[0] = 0x00;
  321. MACAddr[1] = 0x80;
  322. MACAddr[2] = 0xE1;
  323. MACAddr[3] = 0x00;
  324. MACAddr[4] = 0x00;
  325. MACAddr[5] = 0x00;
  326. heth.Init.MACAddr = &MACAddr[0];
  327. heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
  328. heth.Init.TxDesc = DMATxDscrTab;
  329. heth.Init.RxDesc = DMARxDscrTab;
  330. heth.Init.RxBuffLen = 1524;
  331. /* USER CODE BEGIN MACADDRESS */
  332. /* USER CODE END MACADDRESS */
  333. if (HAL_ETH_Init(&heth) != HAL_OK)
  334. {
  335. Error_Handler();
  336. }
  337. memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
  338. TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
  339. TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
  340. TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
  341. /* USER CODE BEGIN ETH_Init 2 */
  342. /* USER CODE END ETH_Init 2 */
  343. }
  344. /**
  345. * @brief QUADSPI Initialization Function
  346. * @param None
  347. * @retval None
  348. */
  349. static void MX_QUADSPI_Init(void)
  350. {
  351. /* USER CODE BEGIN QUADSPI_Init 0 */
  352. /* USER CODE END QUADSPI_Init 0 */
  353. /* USER CODE BEGIN QUADSPI_Init 1 */
  354. /* USER CODE END QUADSPI_Init 1 */
  355. /* QUADSPI parameter configuration*/
  356. hqspi.Instance = QUADSPI;
  357. hqspi.Init.ClockPrescaler = 255;
  358. hqspi.Init.FifoThreshold = 1;
  359. hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
  360. hqspi.Init.FlashSize = 1;
  361. hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
  362. hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  363. hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  364. hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  365. if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  366. {
  367. Error_Handler();
  368. }
  369. /* USER CODE BEGIN QUADSPI_Init 2 */
  370. /* USER CODE END QUADSPI_Init 2 */
  371. }
  372. /**
  373. * @brief RNG Initialization Function
  374. * @param None
  375. * @retval None
  376. */
  377. static void MX_RNG_Init(void)
  378. {
  379. /* USER CODE BEGIN RNG_Init 0 */
  380. /* USER CODE END RNG_Init 0 */
  381. /* USER CODE BEGIN RNG_Init 1 */
  382. /* USER CODE END RNG_Init 1 */
  383. hrng.Instance = RNG;
  384. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  385. if (HAL_RNG_Init(&hrng) != HAL_OK)
  386. {
  387. Error_Handler();
  388. }
  389. /* USER CODE BEGIN RNG_Init 2 */
  390. /* USER CODE END RNG_Init 2 */
  391. }
  392. /**
  393. * @brief SDMMC1 Initialization Function
  394. * @param None
  395. * @retval None
  396. */
  397. static void MX_SDMMC1_MMC_Init(void)
  398. {
  399. /* USER CODE BEGIN SDMMC1_Init 0 */
  400. /* USER CODE END SDMMC1_Init 0 */
  401. /* USER CODE BEGIN SDMMC1_Init 1 */
  402. /* USER CODE END SDMMC1_Init 1 */
  403. hmmc1.Instance = SDMMC1;
  404. hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
  405. hmmc1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
  406. hmmc1.Init.BusWide = SDMMC_BUS_WIDE_1B;
  407. hmmc1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
  408. hmmc1.Init.ClockDiv = 0;
  409. if (HAL_MMC_Init(&hmmc1) != HAL_OK)
  410. {
  411. Error_Handler();
  412. }
  413. if (HAL_MMC_ConfigWideBusOperation(&hmmc1, SDMMC_BUS_WIDE_8B) != HAL_OK)
  414. {
  415. Error_Handler();
  416. }
  417. /* USER CODE BEGIN SDMMC1_Init 2 */
  418. /* USER CODE END SDMMC1_Init 2 */
  419. }
  420. /**
  421. * @brief TIM12 Initialization Function
  422. * @param None
  423. * @retval None
  424. */
  425. static void MX_TIM12_Init(void)
  426. {
  427. /* USER CODE BEGIN TIM12_Init 0 */
  428. /* USER CODE END TIM12_Init 0 */
  429. TIM_SlaveConfigTypeDef sSlaveConfig = {0};
  430. TIM_OC_InitTypeDef sConfigOC = {0};
  431. /* USER CODE BEGIN TIM12_Init 1 */
  432. /* USER CODE END TIM12_Init 1 */
  433. htim12.Instance = TIM12;
  434. htim12.Init.Prescaler = 0;
  435. htim12.Init.CounterMode = TIM_COUNTERMODE_UP;
  436. htim12.Init.Period = 0;
  437. htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  438. htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  439. if (HAL_TIM_Base_Init(&htim12) != HAL_OK)
  440. {
  441. Error_Handler();
  442. }
  443. if (HAL_TIM_PWM_Init(&htim12) != HAL_OK)
  444. {
  445. Error_Handler();
  446. }
  447. sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
  448. sSlaveConfig.InputTrigger = TIM_TS_TI1F_ED;
  449. sSlaveConfig.TriggerFilter = 0;
  450. if (HAL_TIM_SlaveConfigSynchro(&htim12, &sSlaveConfig) != HAL_OK)
  451. {
  452. Error_Handler();
  453. }
  454. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  455. sConfigOC.Pulse = 0;
  456. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  457. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  458. if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  459. {
  460. Error_Handler();
  461. }
  462. /* USER CODE BEGIN TIM12_Init 2 */
  463. /* USER CODE END TIM12_Init 2 */
  464. HAL_TIM_MspPostInit(&htim12);
  465. }
  466. /**
  467. * @brief UART4 Initialization Function
  468. * @param None
  469. * @retval None
  470. */
  471. static void MX_UART4_Init(void)
  472. {
  473. /* USER CODE BEGIN UART4_Init 0 */
  474. /* USER CODE END UART4_Init 0 */
  475. /* USER CODE BEGIN UART4_Init 1 */
  476. /* USER CODE END UART4_Init 1 */
  477. huart4.Instance = UART4;
  478. huart4.Init.BaudRate = 115200;
  479. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  480. huart4.Init.StopBits = UART_STOPBITS_1;
  481. huart4.Init.Parity = UART_PARITY_NONE;
  482. huart4.Init.Mode = UART_MODE_TX_RX;
  483. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  484. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  485. huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  486. huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  487. huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  488. if (HAL_UART_Init(&huart4) != HAL_OK)
  489. {
  490. Error_Handler();
  491. }
  492. if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  493. {
  494. Error_Handler();
  495. }
  496. if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  497. {
  498. Error_Handler();
  499. }
  500. if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
  501. {
  502. Error_Handler();
  503. }
  504. /* USER CODE BEGIN UART4_Init 2 */
  505. /* USER CODE END UART4_Init 2 */
  506. }
  507. /**
  508. * @brief USART1 Initialization Function
  509. * @param None
  510. * @retval None
  511. */
  512. static void MX_USART1_UART_Init(void)
  513. {
  514. /* USER CODE BEGIN USART1_Init 0 */
  515. /* USER CODE END USART1_Init 0 */
  516. /* USER CODE BEGIN USART1_Init 1 */
  517. /* USER CODE END USART1_Init 1 */
  518. huart1.Instance = USART1;
  519. huart1.Init.BaudRate = 115200;
  520. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  521. huart1.Init.StopBits = UART_STOPBITS_1;
  522. huart1.Init.Parity = UART_PARITY_NONE;
  523. huart1.Init.Mode = UART_MODE_TX_RX;
  524. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  525. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  526. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  527. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  528. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  529. if (HAL_UART_Init(&huart1) != HAL_OK)
  530. {
  531. Error_Handler();
  532. }
  533. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  534. {
  535. Error_Handler();
  536. }
  537. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  538. {
  539. Error_Handler();
  540. }
  541. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  542. {
  543. Error_Handler();
  544. }
  545. /* USER CODE BEGIN USART1_Init 2 */
  546. /* USER CODE END USART1_Init 2 */
  547. }
  548. /**
  549. * @brief USB_OTG_HS Initialization Function
  550. * @param None
  551. * @retval None
  552. */
  553. static void MX_USB_OTG_HS_PCD_Init(void)
  554. {
  555. /* USER CODE BEGIN USB_OTG_HS_Init 0 */
  556. /* USER CODE END USB_OTG_HS_Init 0 */
  557. /* USER CODE BEGIN USB_OTG_HS_Init 1 */
  558. /* USER CODE END USB_OTG_HS_Init 1 */
  559. hpcd_USB_OTG_HS.Instance = USB_OTG_HS;
  560. hpcd_USB_OTG_HS.Init.dev_endpoints = 9;
  561. hpcd_USB_OTG_HS.Init.speed = PCD_SPEED_HIGH;
  562. hpcd_USB_OTG_HS.Init.dma_enable = DISABLE;
  563. hpcd_USB_OTG_HS.Init.phy_itface = USB_OTG_ULPI_PHY;
  564. hpcd_USB_OTG_HS.Init.Sof_enable = DISABLE;
  565. hpcd_USB_OTG_HS.Init.low_power_enable = DISABLE;
  566. hpcd_USB_OTG_HS.Init.lpm_enable = DISABLE;
  567. hpcd_USB_OTG_HS.Init.vbus_sensing_enable = DISABLE;
  568. hpcd_USB_OTG_HS.Init.use_dedicated_ep1 = DISABLE;
  569. hpcd_USB_OTG_HS.Init.use_external_vbus = DISABLE;
  570. if (HAL_PCD_Init(&hpcd_USB_OTG_HS) != HAL_OK)
  571. {
  572. Error_Handler();
  573. }
  574. /* USER CODE BEGIN USB_OTG_HS_Init 2 */
  575. /* USER CODE END USB_OTG_HS_Init 2 */
  576. }
  577. /**
  578. * @brief GPIO Initialization Function
  579. * @param None
  580. * @retval None
  581. */
  582. static void MX_GPIO_Init(void)
  583. {
  584. GPIO_InitTypeDef GPIO_InitStruct = {0};
  585. /* GPIO Ports Clock Enable */
  586. __HAL_RCC_GPIOB_CLK_ENABLE();
  587. __HAL_RCC_GPIOG_CLK_ENABLE();
  588. __HAL_RCC_GPIOC_CLK_ENABLE();
  589. __HAL_RCC_GPIOD_CLK_ENABLE();
  590. __HAL_RCC_GPIOA_CLK_ENABLE();
  591. __HAL_RCC_GPIOI_CLK_ENABLE();
  592. __HAL_RCC_GPIOH_CLK_ENABLE();
  593. __HAL_RCC_GPIOF_CLK_ENABLE();
  594. /*Configure GPIO pin : PH7 */
  595. GPIO_InitStruct.Pin = GPIO_PIN_7;
  596. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  597. GPIO_InitStruct.Pull = GPIO_NOPULL;
  598. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  599. GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
  600. HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  601. /*Configure GPIO pin : PF12 */
  602. GPIO_InitStruct.Pin = GPIO_PIN_12;
  603. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  604. GPIO_InitStruct.Pull = GPIO_NOPULL;
  605. HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
  606. }
  607. /* USER CODE BEGIN 4 */
  608. /* USER CODE END 4 */
  609. /**
  610. * @brief This function is executed in case of error occurrence.
  611. * @retval None
  612. */
  613. void Error_Handler(void)
  614. {
  615. /* USER CODE BEGIN Error_Handler_Debug */
  616. /* User can add his own implementation to report the HAL error return state */
  617. /* USER CODE END Error_Handler_Debug */
  618. }
  619. #ifdef USE_FULL_ASSERT
  620. /**
  621. * @brief Reports the name of the source file and the source line number
  622. * where the assert_param error has occurred.
  623. * @param file: pointer to the source file name
  624. * @param line: assert_param error line source number
  625. * @retval None
  626. */
  627. void assert_failed(uint8_t *file, uint32_t line)
  628. {
  629. /* USER CODE BEGIN 6 */
  630. /* User can add his own implementation to report the file name and line number,
  631. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  632. /* USER CODE END 6 */
  633. }
  634. #endif /* USE_FULL_ASSERT */
  635. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/