main.c 19 KB

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