main.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2024 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 "string.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. ETH_TxPacketConfig TxConfig;
  36. ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
  37. ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
  38. ADC_HandleTypeDef hadc1;
  39. ADC_HandleTypeDef hadc2;
  40. ETH_HandleTypeDef heth;
  41. UART_HandleTypeDef hlpuart1;
  42. UART_HandleTypeDef huart3;
  43. TIM_HandleTypeDef htim1;
  44. TIM_HandleTypeDef htim3;
  45. TIM_HandleTypeDef htim4;
  46. PCD_HandleTypeDef hpcd_USB_DRD_FS;
  47. /* USER CODE BEGIN PV */
  48. /* USER CODE END PV */
  49. /* Private function prototypes -----------------------------------------------*/
  50. void SystemClock_Config(void);
  51. static void MX_GPIO_Init(void);
  52. static void MX_ADC1_Init(void);
  53. static void MX_ETH_Init(void);
  54. static void MX_ICACHE_Init(void);
  55. static void MX_LPUART1_UART_Init(void);
  56. static void MX_USART3_UART_Init(void);
  57. static void MX_UCPD1_Init(void);
  58. static void MX_USB_PCD_Init(void);
  59. static void MX_ADC2_Init(void);
  60. static void MX_TIM1_Init(void);
  61. static void MX_TIM3_Init(void);
  62. static void MX_TIM4_Init(void);
  63. /* USER CODE BEGIN PFP */
  64. /* USER CODE END PFP */
  65. /* Private user code ---------------------------------------------------------*/
  66. /* USER CODE BEGIN 0 */
  67. /* USER CODE END 0 */
  68. /**
  69. * @brief The application entry point.
  70. * @retval int
  71. */
  72. int main(void)
  73. {
  74. /* USER CODE BEGIN 1 */
  75. /* USER CODE END 1 */
  76. /* MCU Configuration--------------------------------------------------------*/
  77. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  78. HAL_Init();
  79. /* USER CODE BEGIN Init */
  80. /* USER CODE END Init */
  81. /* Configure the system clock */
  82. SystemClock_Config();
  83. /* USER CODE BEGIN SysInit */
  84. /* USER CODE END SysInit */
  85. /* Initialize all configured peripherals */
  86. MX_GPIO_Init();
  87. MX_ADC1_Init();
  88. MX_ETH_Init();
  89. MX_ICACHE_Init();
  90. MX_LPUART1_UART_Init();
  91. MX_USART3_UART_Init();
  92. MX_UCPD1_Init();
  93. MX_USB_PCD_Init();
  94. MX_ADC2_Init();
  95. MX_TIM1_Init();
  96. MX_TIM3_Init();
  97. MX_TIM4_Init();
  98. /* USER CODE BEGIN 2 */
  99. /* USER CODE END 2 */
  100. /* Infinite loop */
  101. /* USER CODE BEGIN WHILE */
  102. while (1)
  103. {
  104. /* USER CODE END WHILE */
  105. /* USER CODE BEGIN 3 */
  106. }
  107. /* USER CODE END 3 */
  108. }
  109. /**
  110. * @brief System Clock Configuration
  111. * @retval None
  112. */
  113. void SystemClock_Config(void)
  114. {
  115. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  116. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  117. /** Configure the main internal regulator output voltage
  118. */
  119. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
  120. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  121. /** Initializes the RCC Oscillators according to the specified parameters
  122. * in the RCC_OscInitTypeDef structure.
  123. */
  124. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI
  125. |RCC_OSCILLATORTYPE_HSE;
  126. RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIGITAL;
  127. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  128. RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;
  129. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  130. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  131. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  132. RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
  133. RCC_OscInitStruct.PLL.PLLM = 4;
  134. RCC_OscInitStruct.PLL.PLLN = 250;
  135. RCC_OscInitStruct.PLL.PLLP = 2;
  136. RCC_OscInitStruct.PLL.PLLQ = 2;
  137. RCC_OscInitStruct.PLL.PLLR = 2;
  138. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
  139. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
  140. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  141. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  142. {
  143. Error_Handler();
  144. }
  145. /** Initializes the CPU, AHB and APB buses clocks
  146. */
  147. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  148. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  149. |RCC_CLOCKTYPE_PCLK3;
  150. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  151. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  152. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  153. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  154. RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
  155. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  156. {
  157. Error_Handler();
  158. }
  159. }
  160. /**
  161. * @brief ADC1 Initialization Function
  162. * @param None
  163. * @retval None
  164. */
  165. static void MX_ADC1_Init(void)
  166. {
  167. /* USER CODE BEGIN ADC1_Init 0 */
  168. /* USER CODE END ADC1_Init 0 */
  169. ADC_ChannelConfTypeDef sConfig = {0};
  170. /* USER CODE BEGIN ADC1_Init 1 */
  171. /* USER CODE END ADC1_Init 1 */
  172. /** Common config
  173. */
  174. hadc1.Instance = ADC1;
  175. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
  176. hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  177. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  178. hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  179. hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  180. hadc1.Init.LowPowerAutoWait = DISABLE;
  181. hadc1.Init.ContinuousConvMode = DISABLE;
  182. hadc1.Init.NbrOfConversion = 1;
  183. hadc1.Init.DiscontinuousConvMode = DISABLE;
  184. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  185. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  186. hadc1.Init.DMAContinuousRequests = DISABLE;
  187. hadc1.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
  188. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  189. hadc1.Init.OversamplingMode = DISABLE;
  190. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  191. {
  192. Error_Handler();
  193. }
  194. /** Configure Regular Channel
  195. */
  196. sConfig.Channel = ADC_CHANNEL_18;
  197. sConfig.Rank = ADC_REGULAR_RANK_1;
  198. sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  199. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  200. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  201. sConfig.Offset = 0;
  202. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  203. {
  204. Error_Handler();
  205. }
  206. /* USER CODE BEGIN ADC1_Init 2 */
  207. /* USER CODE END ADC1_Init 2 */
  208. }
  209. /**
  210. * @brief ADC2 Initialization Function
  211. * @param None
  212. * @retval None
  213. */
  214. static void MX_ADC2_Init(void)
  215. {
  216. /* USER CODE BEGIN ADC2_Init 0 */
  217. /* USER CODE END ADC2_Init 0 */
  218. ADC_ChannelConfTypeDef sConfig = {0};
  219. /* USER CODE BEGIN ADC2_Init 1 */
  220. /* USER CODE END ADC2_Init 1 */
  221. /** Common config
  222. */
  223. hadc2.Instance = ADC2;
  224. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
  225. hadc2.Init.Resolution = ADC_RESOLUTION_12B;
  226. hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  227. hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
  228. hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  229. hadc2.Init.LowPowerAutoWait = DISABLE;
  230. hadc2.Init.ContinuousConvMode = DISABLE;
  231. hadc2.Init.NbrOfConversion = 1;
  232. hadc2.Init.DiscontinuousConvMode = DISABLE;
  233. hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  234. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  235. hadc2.Init.DMAContinuousRequests = DISABLE;
  236. hadc2.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL;
  237. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  238. hadc2.Init.OversamplingMode = DISABLE;
  239. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  240. {
  241. Error_Handler();
  242. }
  243. /** Configure Regular Channel
  244. */
  245. sConfig.Channel = ADC_CHANNEL_3;
  246. sConfig.Rank = ADC_REGULAR_RANK_1;
  247. sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  248. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  249. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  250. sConfig.Offset = 0;
  251. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  252. {
  253. Error_Handler();
  254. }
  255. /* USER CODE BEGIN ADC2_Init 2 */
  256. /* USER CODE END ADC2_Init 2 */
  257. }
  258. /**
  259. * @brief ETH Initialization Function
  260. * @param None
  261. * @retval None
  262. */
  263. static void MX_ETH_Init(void)
  264. {
  265. /* USER CODE BEGIN ETH_Init 0 */
  266. /* USER CODE END ETH_Init 0 */
  267. static uint8_t MACAddr[6];
  268. /* USER CODE BEGIN ETH_Init 1 */
  269. /* USER CODE END ETH_Init 1 */
  270. heth.Instance = ETH;
  271. MACAddr[0] = 0x00;
  272. MACAddr[1] = 0x80;
  273. MACAddr[2] = 0xE1;
  274. MACAddr[3] = 0x00;
  275. MACAddr[4] = 0x00;
  276. MACAddr[5] = 0x00;
  277. heth.Init.MACAddr = &MACAddr[0];
  278. heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
  279. heth.Init.TxDesc = DMATxDscrTab;
  280. heth.Init.RxDesc = DMARxDscrTab;
  281. heth.Init.RxBuffLen = 1524;
  282. /* USER CODE BEGIN MACADDRESS */
  283. /* USER CODE END MACADDRESS */
  284. if (HAL_ETH_Init(&heth) != HAL_OK)
  285. {
  286. Error_Handler();
  287. }
  288. memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
  289. TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
  290. TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
  291. TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
  292. /* USER CODE BEGIN ETH_Init 2 */
  293. /* USER CODE END ETH_Init 2 */
  294. }
  295. /**
  296. * @brief ICACHE Initialization Function
  297. * @param None
  298. * @retval None
  299. */
  300. static void MX_ICACHE_Init(void)
  301. {
  302. /* USER CODE BEGIN ICACHE_Init 0 */
  303. /* USER CODE END ICACHE_Init 0 */
  304. /* USER CODE BEGIN ICACHE_Init 1 */
  305. /* USER CODE END ICACHE_Init 1 */
  306. /** Enable instruction cache (default 2-ways set associative cache)
  307. */
  308. if (HAL_ICACHE_Enable() != HAL_OK)
  309. {
  310. Error_Handler();
  311. }
  312. /* USER CODE BEGIN ICACHE_Init 2 */
  313. /* USER CODE END ICACHE_Init 2 */
  314. }
  315. /**
  316. * @brief LPUART1 Initialization Function
  317. * @param None
  318. * @retval None
  319. */
  320. static void MX_LPUART1_UART_Init(void)
  321. {
  322. /* USER CODE BEGIN LPUART1_Init 0 */
  323. /* USER CODE END LPUART1_Init 0 */
  324. /* USER CODE BEGIN LPUART1_Init 1 */
  325. /* USER CODE END LPUART1_Init 1 */
  326. hlpuart1.Instance = LPUART1;
  327. hlpuart1.Init.BaudRate = 209700;
  328. hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  329. hlpuart1.Init.StopBits = UART_STOPBITS_1;
  330. hlpuart1.Init.Parity = UART_PARITY_NONE;
  331. hlpuart1.Init.Mode = UART_MODE_TX_RX;
  332. hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  333. hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  334. hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  335. hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
  336. if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  337. {
  338. Error_Handler();
  339. }
  340. if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  341. {
  342. Error_Handler();
  343. }
  344. if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  345. {
  346. Error_Handler();
  347. }
  348. if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
  349. {
  350. Error_Handler();
  351. }
  352. /* USER CODE BEGIN LPUART1_Init 2 */
  353. /* USER CODE END LPUART1_Init 2 */
  354. }
  355. /**
  356. * @brief USART3 Initialization Function
  357. * @param None
  358. * @retval None
  359. */
  360. static void MX_USART3_UART_Init(void)
  361. {
  362. /* USER CODE BEGIN USART3_Init 0 */
  363. /* USER CODE END USART3_Init 0 */
  364. /* USER CODE BEGIN USART3_Init 1 */
  365. /* USER CODE END USART3_Init 1 */
  366. huart3.Instance = USART3;
  367. huart3.Init.BaudRate = 115200;
  368. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  369. huart3.Init.StopBits = UART_STOPBITS_1;
  370. huart3.Init.Parity = UART_PARITY_NONE;
  371. huart3.Init.Mode = UART_MODE_TX_RX;
  372. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  373. huart3.Init.OverSampling = UART_OVERSAMPLING_8;
  374. huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  375. huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  376. huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
  377. huart3.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
  378. if (HAL_UART_Init(&huart3) != HAL_OK)
  379. {
  380. Error_Handler();
  381. }
  382. if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  383. {
  384. Error_Handler();
  385. }
  386. if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  387. {
  388. Error_Handler();
  389. }
  390. if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
  391. {
  392. Error_Handler();
  393. }
  394. /* USER CODE BEGIN USART3_Init 2 */
  395. /* USER CODE END USART3_Init 2 */
  396. }
  397. /**
  398. * @brief TIM1 Initialization Function
  399. * @param None
  400. * @retval None
  401. */
  402. static void MX_TIM1_Init(void)
  403. {
  404. /* USER CODE BEGIN TIM1_Init 0 */
  405. /* USER CODE END TIM1_Init 0 */
  406. TIM_MasterConfigTypeDef sMasterConfig = {0};
  407. TIM_OC_InitTypeDef sConfigOC = {0};
  408. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  409. /* USER CODE BEGIN TIM1_Init 1 */
  410. /* USER CODE END TIM1_Init 1 */
  411. htim1.Instance = TIM1;
  412. htim1.Init.Prescaler = 0;
  413. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  414. htim1.Init.Period = 65535;
  415. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  416. htim1.Init.RepetitionCounter = 0;
  417. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  418. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  419. {
  420. Error_Handler();
  421. }
  422. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  423. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  424. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  425. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  426. {
  427. Error_Handler();
  428. }
  429. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  430. sConfigOC.Pulse = 0;
  431. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  432. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  433. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  434. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  435. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  436. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  437. {
  438. Error_Handler();
  439. }
  440. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  441. {
  442. Error_Handler();
  443. }
  444. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  445. {
  446. Error_Handler();
  447. }
  448. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  449. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  450. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  451. sBreakDeadTimeConfig.DeadTime = 0;
  452. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  453. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  454. sBreakDeadTimeConfig.BreakFilter = 0;
  455. sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
  456. sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  457. sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  458. sBreakDeadTimeConfig.Break2Filter = 0;
  459. sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
  460. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  461. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  462. {
  463. Error_Handler();
  464. }
  465. /* USER CODE BEGIN TIM1_Init 2 */
  466. /* USER CODE END TIM1_Init 2 */
  467. HAL_TIM_MspPostInit(&htim1);
  468. }
  469. /**
  470. * @brief TIM3 Initialization Function
  471. * @param None
  472. * @retval None
  473. */
  474. static void MX_TIM3_Init(void)
  475. {
  476. /* USER CODE BEGIN TIM3_Init 0 */
  477. /* USER CODE END TIM3_Init 0 */
  478. TIM_MasterConfigTypeDef sMasterConfig = {0};
  479. TIM_OC_InitTypeDef sConfigOC = {0};
  480. /* USER CODE BEGIN TIM3_Init 1 */
  481. /* USER CODE END TIM3_Init 1 */
  482. htim3.Instance = TIM3;
  483. htim3.Init.Prescaler = 0;
  484. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  485. htim3.Init.Period = 65535;
  486. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  487. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  488. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  489. {
  490. Error_Handler();
  491. }
  492. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  493. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  494. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  495. {
  496. Error_Handler();
  497. }
  498. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  499. sConfigOC.Pulse = 0;
  500. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  501. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  502. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  503. {
  504. Error_Handler();
  505. }
  506. /* USER CODE BEGIN TIM3_Init 2 */
  507. /* USER CODE END TIM3_Init 2 */
  508. HAL_TIM_MspPostInit(&htim3);
  509. }
  510. /**
  511. * @brief TIM4 Initialization Function
  512. * @param None
  513. * @retval None
  514. */
  515. static void MX_TIM4_Init(void)
  516. {
  517. /* USER CODE BEGIN TIM4_Init 0 */
  518. /* USER CODE END TIM4_Init 0 */
  519. TIM_MasterConfigTypeDef sMasterConfig = {0};
  520. TIM_OC_InitTypeDef sConfigOC = {0};
  521. /* USER CODE BEGIN TIM4_Init 1 */
  522. /* USER CODE END TIM4_Init 1 */
  523. htim4.Instance = TIM4;
  524. htim4.Init.Prescaler = 0;
  525. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  526. htim4.Init.Period = 65535;
  527. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  528. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  529. if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  530. {
  531. Error_Handler();
  532. }
  533. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  534. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  535. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  536. {
  537. Error_Handler();
  538. }
  539. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  540. sConfigOC.Pulse = 0;
  541. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  542. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  543. if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  544. {
  545. Error_Handler();
  546. }
  547. if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  548. {
  549. Error_Handler();
  550. }
  551. /* USER CODE BEGIN TIM4_Init 2 */
  552. /* USER CODE END TIM4_Init 2 */
  553. HAL_TIM_MspPostInit(&htim4);
  554. }
  555. /**
  556. * @brief UCPD1 Initialization Function
  557. * @param None
  558. * @retval None
  559. */
  560. static void MX_UCPD1_Init(void)
  561. {
  562. /* USER CODE BEGIN UCPD1_Init 0 */
  563. /* USER CODE END UCPD1_Init 0 */
  564. LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  565. /* Peripheral clock enable */
  566. LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_UCPD1);
  567. LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
  568. /**UCPD1 GPIO Configuration
  569. PB13 ------> UCPD1_CC1
  570. PB14 ------> UCPD1_CC2
  571. */
  572. GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14;
  573. GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
  574. GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  575. LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  576. /* USER CODE BEGIN UCPD1_Init 1 */
  577. /* USER CODE END UCPD1_Init 1 */
  578. /* USER CODE BEGIN UCPD1_Init 2 */
  579. /* USER CODE END UCPD1_Init 2 */
  580. }
  581. /**
  582. * @brief USB Initialization Function
  583. * @param None
  584. * @retval None
  585. */
  586. static void MX_USB_PCD_Init(void)
  587. {
  588. /* USER CODE BEGIN USB_Init 0 */
  589. /* USER CODE END USB_Init 0 */
  590. /* USER CODE BEGIN USB_Init 1 */
  591. /* USER CODE END USB_Init 1 */
  592. hpcd_USB_DRD_FS.Instance = USB_DRD_FS;
  593. hpcd_USB_DRD_FS.Init.dev_endpoints = 8;
  594. hpcd_USB_DRD_FS.Init.speed = USBD_FS_SPEED;
  595. hpcd_USB_DRD_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
  596. hpcd_USB_DRD_FS.Init.Sof_enable = DISABLE;
  597. hpcd_USB_DRD_FS.Init.low_power_enable = DISABLE;
  598. hpcd_USB_DRD_FS.Init.lpm_enable = DISABLE;
  599. hpcd_USB_DRD_FS.Init.battery_charging_enable = DISABLE;
  600. hpcd_USB_DRD_FS.Init.vbus_sensing_enable = DISABLE;
  601. hpcd_USB_DRD_FS.Init.bulk_doublebuffer_enable = DISABLE;
  602. hpcd_USB_DRD_FS.Init.iso_singlebuffer_enable = DISABLE;
  603. if (HAL_PCD_Init(&hpcd_USB_DRD_FS) != HAL_OK)
  604. {
  605. Error_Handler();
  606. }
  607. /* USER CODE BEGIN USB_Init 2 */
  608. /* USER CODE END USB_Init 2 */
  609. }
  610. /**
  611. * @brief GPIO Initialization Function
  612. * @param None
  613. * @retval None
  614. */
  615. static void MX_GPIO_Init(void)
  616. {
  617. GPIO_InitTypeDef GPIO_InitStruct = {0};
  618. /* USER CODE BEGIN MX_GPIO_Init_1 */
  619. /* USER CODE END MX_GPIO_Init_1 */
  620. /* GPIO Ports Clock Enable */
  621. __HAL_RCC_GPIOE_CLK_ENABLE();
  622. __HAL_RCC_GPIOC_CLK_ENABLE();
  623. __HAL_RCC_GPIOF_CLK_ENABLE();
  624. __HAL_RCC_GPIOH_CLK_ENABLE();
  625. __HAL_RCC_GPIOA_CLK_ENABLE();
  626. __HAL_RCC_GPIOB_CLK_ENABLE();
  627. __HAL_RCC_GPIOD_CLK_ENABLE();
  628. __HAL_RCC_GPIOG_CLK_ENABLE();
  629. /*Configure GPIO pin Output Level */
  630. HAL_GPIO_WritePin(LED2_YELLOW_GPIO_Port, LED2_YELLOW_Pin, GPIO_PIN_RESET);
  631. /*Configure GPIO pin Output Level */
  632. HAL_GPIO_WritePin(LED1_GREEN_GPIO_Port, LED1_GREEN_Pin, GPIO_PIN_RESET);
  633. /*Configure GPIO pin Output Level */
  634. HAL_GPIO_WritePin(LED3_RED_GPIO_Port, LED3_RED_Pin, GPIO_PIN_RESET);
  635. /*Configure GPIO pin : USER_BUTTON_Pin */
  636. GPIO_InitStruct.Pin = USER_BUTTON_Pin;
  637. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  638. GPIO_InitStruct.Pull = GPIO_NOPULL;
  639. HAL_GPIO_Init(USER_BUTTON_GPIO_Port, &GPIO_InitStruct);
  640. /*Configure GPIO pin : LED2_YELLOW_Pin */
  641. GPIO_InitStruct.Pin = LED2_YELLOW_Pin;
  642. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  643. GPIO_InitStruct.Pull = GPIO_NOPULL;
  644. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  645. HAL_GPIO_Init(LED2_YELLOW_GPIO_Port, &GPIO_InitStruct);
  646. /*Configure GPIO pin : LED1_GREEN_Pin */
  647. GPIO_InitStruct.Pin = LED1_GREEN_Pin;
  648. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  649. GPIO_InitStruct.Pull = GPIO_NOPULL;
  650. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  651. HAL_GPIO_Init(LED1_GREEN_GPIO_Port, &GPIO_InitStruct);
  652. /*Configure GPIO pin : LED3_RED_Pin */
  653. GPIO_InitStruct.Pin = LED3_RED_Pin;
  654. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  655. GPIO_InitStruct.Pull = GPIO_NOPULL;
  656. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  657. HAL_GPIO_Init(LED3_RED_GPIO_Port, &GPIO_InitStruct);
  658. /*Configure GPIO pin : UCPD_FLT_Pin */
  659. GPIO_InitStruct.Pin = UCPD_FLT_Pin;
  660. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  661. GPIO_InitStruct.Pull = GPIO_NOPULL;
  662. HAL_GPIO_Init(UCPD_FLT_GPIO_Port, &GPIO_InitStruct);
  663. /* USER CODE BEGIN MX_GPIO_Init_2 */
  664. /* USER CODE END MX_GPIO_Init_2 */
  665. }
  666. /* USER CODE BEGIN 4 */
  667. /* USER CODE END 4 */
  668. /**
  669. * @brief This function is executed in case of error occurrence.
  670. * @retval None
  671. */
  672. void Error_Handler(void)
  673. {
  674. /* USER CODE BEGIN Error_Handler_Debug */
  675. /* User can add his own implementation to report the HAL error return state */
  676. __disable_irq();
  677. while (1)
  678. {
  679. }
  680. /* USER CODE END Error_Handler_Debug */
  681. }
  682. #ifdef USE_FULL_ASSERT
  683. /**
  684. * @brief Reports the name of the source file and the source line number
  685. * where the assert_param error has occurred.
  686. * @param file: pointer to the source file name
  687. * @param line: assert_param error line source number
  688. * @retval None
  689. */
  690. void assert_failed(uint8_t *file, uint32_t line)
  691. {
  692. /* USER CODE BEGIN 6 */
  693. /* User can add his own implementation to report the file name and line number,
  694. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  695. /* USER CODE END 6 */
  696. }
  697. #endif /* USE_FULL_ASSERT */