main.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  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 Ultimate Liberty license
  13. * SLA0044, the "License"; You may not use this file except in compliance with
  14. * the License. You may obtain a copy of the License at:
  15. * www.st.com/SLA0044
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "cmsis_os.h"
  23. #include "usb_host.h"
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. /* USER CODE END Includes */
  27. /* Private typedef -----------------------------------------------------------*/
  28. /* USER CODE BEGIN PTD */
  29. /* USER CODE END PTD */
  30. /* Private define ------------------------------------------------------------*/
  31. /* USER CODE BEGIN PD */
  32. /* USER CODE END PD */
  33. /* Private macro -------------------------------------------------------------*/
  34. /* USER CODE BEGIN PM */
  35. /* USER CODE END PM */
  36. /* Private variables ---------------------------------------------------------*/
  37. CRC_HandleTypeDef hcrc;
  38. DMA2D_HandleTypeDef hdma2d;
  39. I2C_HandleTypeDef hi2c3;
  40. LTDC_HandleTypeDef hltdc;
  41. SPI_HandleTypeDef hspi5;
  42. TIM_HandleTypeDef htim1;
  43. UART_HandleTypeDef huart1;
  44. SDRAM_HandleTypeDef hsdram1;
  45. osThreadId defaultTaskHandle;
  46. /* USER CODE BEGIN PV */
  47. /* USER CODE END PV */
  48. /* Private function prototypes -----------------------------------------------*/
  49. void SystemClock_Config(void);
  50. static void MX_GPIO_Init(void);
  51. static void MX_CRC_Init(void);
  52. static void MX_DMA2D_Init(void);
  53. static void MX_FMC_Init(void);
  54. static void MX_I2C3_Init(void);
  55. static void MX_LTDC_Init(void);
  56. static void MX_SPI5_Init(void);
  57. static void MX_TIM1_Init(void);
  58. static void MX_USART1_UART_Init(void);
  59. void StartDefaultTask(void const * argument);
  60. /* USER CODE BEGIN PFP */
  61. /* USER CODE END PFP */
  62. /* Private user code ---------------------------------------------------------*/
  63. /* USER CODE BEGIN 0 */
  64. /* USER CODE END 0 */
  65. /**
  66. * @brief The application entry point.
  67. * @retval int
  68. */
  69. int main(void)
  70. {
  71. /* USER CODE BEGIN 1 */
  72. /* USER CODE END 1 */
  73. /* MCU Configuration--------------------------------------------------------*/
  74. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  75. HAL_Init();
  76. /* USER CODE BEGIN Init */
  77. /* USER CODE END Init */
  78. /* Configure the system clock */
  79. SystemClock_Config();
  80. /* USER CODE BEGIN SysInit */
  81. /* USER CODE END SysInit */
  82. /* Initialize all configured peripherals */
  83. MX_GPIO_Init();
  84. MX_CRC_Init();
  85. MX_DMA2D_Init();
  86. MX_FMC_Init();
  87. MX_I2C3_Init();
  88. MX_LTDC_Init();
  89. MX_SPI5_Init();
  90. MX_TIM1_Init();
  91. MX_USART1_UART_Init();
  92. /* USER CODE BEGIN 2 */
  93. /* USER CODE END 2 */
  94. /* USER CODE BEGIN RTOS_MUTEX */
  95. /* add mutexes, ... */
  96. /* USER CODE END RTOS_MUTEX */
  97. /* USER CODE BEGIN RTOS_SEMAPHORES */
  98. /* add semaphores, ... */
  99. /* USER CODE END RTOS_SEMAPHORES */
  100. /* USER CODE BEGIN RTOS_TIMERS */
  101. /* start timers, add new ones, ... */
  102. /* USER CODE END RTOS_TIMERS */
  103. /* USER CODE BEGIN RTOS_QUEUES */
  104. /* add queues, ... */
  105. /* USER CODE END RTOS_QUEUES */
  106. /* Create the thread(s) */
  107. /* definition and creation of defaultTask */
  108. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 4096);
  109. defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
  110. /* USER CODE BEGIN RTOS_THREADS */
  111. /* add threads, ... */
  112. /* USER CODE END RTOS_THREADS */
  113. /* Start scheduler */
  114. osKernelStart();
  115. /* We should never get here as control is now taken by the scheduler */
  116. /* Infinite loop */
  117. /* USER CODE BEGIN WHILE */
  118. while (1)
  119. {
  120. /* USER CODE END WHILE */
  121. /* USER CODE BEGIN 3 */
  122. }
  123. /* USER CODE END 3 */
  124. }
  125. /**
  126. * @brief System Clock Configuration
  127. * @retval None
  128. */
  129. void SystemClock_Config(void)
  130. {
  131. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  132. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  133. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  134. /** Configure the main internal regulator output voltage
  135. */
  136. __HAL_RCC_PWR_CLK_ENABLE();
  137. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  138. /** Initializes the CPU, AHB and APB busses clocks
  139. */
  140. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  141. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  142. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  143. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  144. RCC_OscInitStruct.PLL.PLLM = 4;
  145. RCC_OscInitStruct.PLL.PLLN = 168;
  146. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  147. RCC_OscInitStruct.PLL.PLLQ = 7;
  148. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  149. {
  150. Error_Handler();
  151. }
  152. /** Initializes the CPU, AHB and APB busses clocks
  153. */
  154. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  155. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  156. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  157. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  158. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  159. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  160. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  161. {
  162. Error_Handler();
  163. }
  164. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
  165. PeriphClkInitStruct.PLLSAI.PLLSAIN = 50;
  166. PeriphClkInitStruct.PLLSAI.PLLSAIR = 2;
  167. PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
  168. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  169. {
  170. Error_Handler();
  171. }
  172. }
  173. /**
  174. * @brief CRC Initialization Function
  175. * @param None
  176. * @retval None
  177. */
  178. static void MX_CRC_Init(void)
  179. {
  180. /* USER CODE BEGIN CRC_Init 0 */
  181. /* USER CODE END CRC_Init 0 */
  182. /* USER CODE BEGIN CRC_Init 1 */
  183. /* USER CODE END CRC_Init 1 */
  184. hcrc.Instance = CRC;
  185. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  186. {
  187. Error_Handler();
  188. }
  189. /* USER CODE BEGIN CRC_Init 2 */
  190. /* USER CODE END CRC_Init 2 */
  191. }
  192. /**
  193. * @brief DMA2D Initialization Function
  194. * @param None
  195. * @retval None
  196. */
  197. static void MX_DMA2D_Init(void)
  198. {
  199. /* USER CODE BEGIN DMA2D_Init 0 */
  200. /* USER CODE END DMA2D_Init 0 */
  201. /* USER CODE BEGIN DMA2D_Init 1 */
  202. /* USER CODE END DMA2D_Init 1 */
  203. hdma2d.Instance = DMA2D;
  204. hdma2d.Init.Mode = DMA2D_M2M;
  205. hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
  206. hdma2d.Init.OutputOffset = 0;
  207. hdma2d.LayerCfg[1].InputOffset = 0;
  208. hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
  209. hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  210. hdma2d.LayerCfg[1].InputAlpha = 0;
  211. if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  212. {
  213. Error_Handler();
  214. }
  215. if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
  216. {
  217. Error_Handler();
  218. }
  219. /* USER CODE BEGIN DMA2D_Init 2 */
  220. /* USER CODE END DMA2D_Init 2 */
  221. }
  222. /**
  223. * @brief I2C3 Initialization Function
  224. * @param None
  225. * @retval None
  226. */
  227. static void MX_I2C3_Init(void)
  228. {
  229. /* USER CODE BEGIN I2C3_Init 0 */
  230. /* USER CODE END I2C3_Init 0 */
  231. /* USER CODE BEGIN I2C3_Init 1 */
  232. /* USER CODE END I2C3_Init 1 */
  233. hi2c3.Instance = I2C3;
  234. hi2c3.Init.ClockSpeed = 100000;
  235. hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
  236. hi2c3.Init.OwnAddress1 = 0;
  237. hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  238. hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  239. hi2c3.Init.OwnAddress2 = 0;
  240. hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  241. hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  242. if (HAL_I2C_Init(&hi2c3) != HAL_OK)
  243. {
  244. Error_Handler();
  245. }
  246. /** Configure Analogue filter
  247. */
  248. if (HAL_I2CEx_ConfigAnalogFilter(&hi2c3, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  249. {
  250. Error_Handler();
  251. }
  252. /** Configure Digital filter
  253. */
  254. if (HAL_I2CEx_ConfigDigitalFilter(&hi2c3, 0) != HAL_OK)
  255. {
  256. Error_Handler();
  257. }
  258. /* USER CODE BEGIN I2C3_Init 2 */
  259. /* USER CODE END I2C3_Init 2 */
  260. }
  261. /**
  262. * @brief LTDC Initialization Function
  263. * @param None
  264. * @retval None
  265. */
  266. static void MX_LTDC_Init(void)
  267. {
  268. /* USER CODE BEGIN LTDC_Init 0 */
  269. /* USER CODE END LTDC_Init 0 */
  270. LTDC_LayerCfgTypeDef pLayerCfg = {0};
  271. /* USER CODE BEGIN LTDC_Init 1 */
  272. /* USER CODE END LTDC_Init 1 */
  273. hltdc.Instance = LTDC;
  274. hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  275. hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  276. hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  277. hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  278. hltdc.Init.HorizontalSync = 9;
  279. hltdc.Init.VerticalSync = 1;
  280. hltdc.Init.AccumulatedHBP = 29;
  281. hltdc.Init.AccumulatedVBP = 3;
  282. hltdc.Init.AccumulatedActiveW = 269;
  283. hltdc.Init.AccumulatedActiveH = 323;
  284. hltdc.Init.TotalWidth = 279;
  285. hltdc.Init.TotalHeigh = 327;
  286. hltdc.Init.Backcolor.Blue = 0;
  287. hltdc.Init.Backcolor.Green = 0;
  288. hltdc.Init.Backcolor.Red = 0;
  289. if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  290. {
  291. Error_Handler();
  292. }
  293. pLayerCfg.WindowX0 = 0;
  294. pLayerCfg.WindowX1 = 240;
  295. pLayerCfg.WindowY0 = 0;
  296. pLayerCfg.WindowY1 = 320;
  297. pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
  298. pLayerCfg.Alpha = 255;
  299. pLayerCfg.Alpha0 = 0;
  300. pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
  301. pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
  302. pLayerCfg.FBStartAdress = 0xD0000000;
  303. pLayerCfg.ImageWidth = 240;
  304. pLayerCfg.ImageHeight = 320;
  305. pLayerCfg.Backcolor.Blue = 0;
  306. pLayerCfg.Backcolor.Green = 0;
  307. pLayerCfg.Backcolor.Red = 0;
  308. if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  309. {
  310. Error_Handler();
  311. }
  312. /* USER CODE BEGIN LTDC_Init 2 */
  313. /* USER CODE END LTDC_Init 2 */
  314. }
  315. /**
  316. * @brief SPI5 Initialization Function
  317. * @param None
  318. * @retval None
  319. */
  320. static void MX_SPI5_Init(void)
  321. {
  322. /* USER CODE BEGIN SPI5_Init 0 */
  323. /* USER CODE END SPI5_Init 0 */
  324. /* USER CODE BEGIN SPI5_Init 1 */
  325. /* USER CODE END SPI5_Init 1 */
  326. /* SPI5 parameter configuration*/
  327. hspi5.Instance = SPI5;
  328. hspi5.Init.Mode = SPI_MODE_MASTER;
  329. hspi5.Init.Direction = SPI_DIRECTION_2LINES;
  330. hspi5.Init.DataSize = SPI_DATASIZE_8BIT;
  331. hspi5.Init.CLKPolarity = SPI_POLARITY_LOW;
  332. hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;
  333. hspi5.Init.NSS = SPI_NSS_SOFT;
  334. hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  335. hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;
  336. hspi5.Init.TIMode = SPI_TIMODE_DISABLE;
  337. hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  338. hspi5.Init.CRCPolynomial = 10;
  339. if (HAL_SPI_Init(&hspi5) != HAL_OK)
  340. {
  341. Error_Handler();
  342. }
  343. /* USER CODE BEGIN SPI5_Init 2 */
  344. /* USER CODE END SPI5_Init 2 */
  345. }
  346. /**
  347. * @brief TIM1 Initialization Function
  348. * @param None
  349. * @retval None
  350. */
  351. static void MX_TIM1_Init(void)
  352. {
  353. /* USER CODE BEGIN TIM1_Init 0 */
  354. /* USER CODE END TIM1_Init 0 */
  355. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  356. TIM_MasterConfigTypeDef sMasterConfig = {0};
  357. /* USER CODE BEGIN TIM1_Init 1 */
  358. /* USER CODE END TIM1_Init 1 */
  359. htim1.Instance = TIM1;
  360. htim1.Init.Prescaler = 0;
  361. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  362. htim1.Init.Period = 0;
  363. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  364. htim1.Init.RepetitionCounter = 0;
  365. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  366. if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  367. {
  368. Error_Handler();
  369. }
  370. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  371. if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  372. {
  373. Error_Handler();
  374. }
  375. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  376. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  377. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  378. {
  379. Error_Handler();
  380. }
  381. /* USER CODE BEGIN TIM1_Init 2 */
  382. /* USER CODE END TIM1_Init 2 */
  383. }
  384. /**
  385. * @brief USART1 Initialization Function
  386. * @param None
  387. * @retval None
  388. */
  389. static void MX_USART1_UART_Init(void)
  390. {
  391. /* USER CODE BEGIN USART1_Init 0 */
  392. /* USER CODE END USART1_Init 0 */
  393. /* USER CODE BEGIN USART1_Init 1 */
  394. /* USER CODE END USART1_Init 1 */
  395. huart1.Instance = USART1;
  396. huart1.Init.BaudRate = 115200;
  397. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  398. huart1.Init.StopBits = UART_STOPBITS_1;
  399. huart1.Init.Parity = UART_PARITY_NONE;
  400. huart1.Init.Mode = UART_MODE_TX_RX;
  401. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  402. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  403. if (HAL_UART_Init(&huart1) != HAL_OK)
  404. {
  405. Error_Handler();
  406. }
  407. /* USER CODE BEGIN USART1_Init 2 */
  408. /* USER CODE END USART1_Init 2 */
  409. }
  410. /* FMC initialization function */
  411. static void MX_FMC_Init(void)
  412. {
  413. /* USER CODE BEGIN FMC_Init 0 */
  414. /* USER CODE END FMC_Init 0 */
  415. FMC_SDRAM_TimingTypeDef SdramTiming = {0};
  416. /* USER CODE BEGIN FMC_Init 1 */
  417. /* USER CODE END FMC_Init 1 */
  418. /** Perform the SDRAM1 memory initialization sequence
  419. */
  420. hsdram1.Instance = FMC_SDRAM_DEVICE;
  421. /* hsdram1.Init */
  422. hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
  423. hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
  424. hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
  425. hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
  426. hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
  427. hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
  428. hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
  429. hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
  430. hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
  431. hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
  432. /* SdramTiming */
  433. SdramTiming.LoadToActiveDelay = 2;
  434. SdramTiming.ExitSelfRefreshDelay = 7;
  435. SdramTiming.SelfRefreshTime = 4;
  436. SdramTiming.RowCycleDelay = 7;
  437. SdramTiming.WriteRecoveryTime = 3;
  438. SdramTiming.RPDelay = 2;
  439. SdramTiming.RCDDelay = 2;
  440. if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  441. {
  442. Error_Handler( );
  443. }
  444. /* USER CODE BEGIN FMC_Init 2 */
  445. /* USER CODE END FMC_Init 2 */
  446. }
  447. /**
  448. * @brief GPIO Initialization Function
  449. * @param None
  450. * @retval None
  451. */
  452. static void MX_GPIO_Init(void)
  453. {
  454. GPIO_InitTypeDef GPIO_InitStruct = {0};
  455. /* GPIO Ports Clock Enable */
  456. __HAL_RCC_GPIOC_CLK_ENABLE();
  457. __HAL_RCC_GPIOF_CLK_ENABLE();
  458. __HAL_RCC_GPIOH_CLK_ENABLE();
  459. __HAL_RCC_GPIOA_CLK_ENABLE();
  460. __HAL_RCC_GPIOB_CLK_ENABLE();
  461. __HAL_RCC_GPIOG_CLK_ENABLE();
  462. __HAL_RCC_GPIOE_CLK_ENABLE();
  463. __HAL_RCC_GPIOD_CLK_ENABLE();
  464. /*Configure GPIO pin Output Level */
  465. HAL_GPIO_WritePin(GPIOC, NCS_MEMS_SPI_Pin|CSX_Pin|OTG_FS_PSO_Pin, GPIO_PIN_RESET);
  466. /*Configure GPIO pin Output Level */
  467. HAL_GPIO_WritePin(ACP_RST_GPIO_Port, ACP_RST_Pin, GPIO_PIN_RESET);
  468. /*Configure GPIO pin Output Level */
  469. HAL_GPIO_WritePin(GPIOD, RDX_Pin|WRX_DCX_Pin, GPIO_PIN_RESET);
  470. /*Configure GPIO pin Output Level */
  471. HAL_GPIO_WritePin(GPIOG, LD3_Pin|LD4_Pin, GPIO_PIN_RESET);
  472. /*Configure GPIO pins : NCS_MEMS_SPI_Pin CSX_Pin OTG_FS_PSO_Pin */
  473. GPIO_InitStruct.Pin = NCS_MEMS_SPI_Pin|CSX_Pin|OTG_FS_PSO_Pin;
  474. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  475. GPIO_InitStruct.Pull = GPIO_NOPULL;
  476. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  477. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  478. /*Configure GPIO pins : B1_Pin MEMS_INT1_Pin MEMS_INT2_Pin TP_INT1_Pin */
  479. GPIO_InitStruct.Pin = B1_Pin|MEMS_INT1_Pin|MEMS_INT2_Pin|TP_INT1_Pin;
  480. GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  481. GPIO_InitStruct.Pull = GPIO_NOPULL;
  482. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  483. /*Configure GPIO pin : ACP_RST_Pin */
  484. GPIO_InitStruct.Pin = ACP_RST_Pin;
  485. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  486. GPIO_InitStruct.Pull = GPIO_NOPULL;
  487. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  488. HAL_GPIO_Init(ACP_RST_GPIO_Port, &GPIO_InitStruct);
  489. /*Configure GPIO pin : OTG_FS_OC_Pin */
  490. GPIO_InitStruct.Pin = OTG_FS_OC_Pin;
  491. GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  492. GPIO_InitStruct.Pull = GPIO_NOPULL;
  493. HAL_GPIO_Init(OTG_FS_OC_GPIO_Port, &GPIO_InitStruct);
  494. /*Configure GPIO pin : BOOT1_Pin */
  495. GPIO_InitStruct.Pin = BOOT1_Pin;
  496. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  497. GPIO_InitStruct.Pull = GPIO_NOPULL;
  498. HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct);
  499. /*Configure GPIO pin : TE_Pin */
  500. GPIO_InitStruct.Pin = TE_Pin;
  501. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  502. GPIO_InitStruct.Pull = GPIO_NOPULL;
  503. HAL_GPIO_Init(TE_GPIO_Port, &GPIO_InitStruct);
  504. /*Configure GPIO pins : RDX_Pin WRX_DCX_Pin */
  505. GPIO_InitStruct.Pin = RDX_Pin|WRX_DCX_Pin;
  506. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  507. GPIO_InitStruct.Pull = GPIO_NOPULL;
  508. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  509. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  510. /*Configure GPIO pins : LD3_Pin LD4_Pin */
  511. GPIO_InitStruct.Pin = LD3_Pin|LD4_Pin;
  512. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  513. GPIO_InitStruct.Pull = GPIO_NOPULL;
  514. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  515. HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  516. }
  517. /* USER CODE BEGIN 4 */
  518. /* USER CODE END 4 */
  519. /* USER CODE BEGIN Header_StartDefaultTask */
  520. /**
  521. * @brief Function implementing the defaultTask thread.
  522. * @param argument: Not used
  523. * @retval None
  524. */
  525. /* USER CODE END Header_StartDefaultTask */
  526. void StartDefaultTask(void const * argument)
  527. {
  528. /* init code for USB_HOST */
  529. MX_USB_HOST_Init();
  530. /* USER CODE BEGIN 5 */
  531. /* Infinite loop */
  532. for(;;)
  533. {
  534. osDelay(1);
  535. }
  536. /* USER CODE END 5 */
  537. }
  538. /**
  539. * @brief Period elapsed callback in non blocking mode
  540. * @note This function is called when TIM6 interrupt took place, inside
  541. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  542. * a global variable "uwTick" used as application time base.
  543. * @param htim : TIM handle
  544. * @retval None
  545. */
  546. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  547. {
  548. /* USER CODE BEGIN Callback 0 */
  549. /* USER CODE END Callback 0 */
  550. if (htim->Instance == TIM6) {
  551. HAL_IncTick();
  552. }
  553. /* USER CODE BEGIN Callback 1 */
  554. /* USER CODE END Callback 1 */
  555. }
  556. /**
  557. * @brief This function is executed in case of error occurrence.
  558. * @retval None
  559. */
  560. void Error_Handler(void)
  561. {
  562. /* USER CODE BEGIN Error_Handler_Debug */
  563. /* User can add his own implementation to report the HAL error return state */
  564. /* USER CODE END Error_Handler_Debug */
  565. }
  566. #ifdef USE_FULL_ASSERT
  567. /**
  568. * @brief Reports the name of the source file and the source line number
  569. * where the assert_param error has occurred.
  570. * @param file: pointer to the source file name
  571. * @param line: assert_param error line source number
  572. * @retval None
  573. */
  574. void assert_failed(uint8_t *file, uint32_t line)
  575. {
  576. /* USER CODE BEGIN 6 */
  577. /* User can add his own implementation to report the file name and line number,
  578. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  579. /* USER CODE END 6 */
  580. }
  581. #endif /* USE_FULL_ASSERT */
  582. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/