Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
502
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.42 KB | None | 0 0
  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) 2020 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.  
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "main.h"
  23. #include "cmsis_os.h"
  24.  
  25. /* Private includes ----------------------------------------------------------*/
  26. /* USER CODE BEGIN Includes */
  27.  
  28. /* USER CODE END Includes */
  29.  
  30. /* Private typedef -----------------------------------------------------------*/
  31. /* USER CODE BEGIN PTD */
  32.  
  33. /* USER CODE END PTD */
  34.  
  35. /* Private define ------------------------------------------------------------*/
  36. /* USER CODE BEGIN PD */
  37. #define UART_DMA_BUFFER_SIZE 2048
  38. #define PARSER_MESSAGE_LIST_SIZE 8
  39. #define PARSER_MESSAGE_SIZE 1024
  40. /* USER CODE END PD */
  41.  
  42. /* Private macro -------------------------------------------------------------*/
  43. /* USER CODE BEGIN PM */
  44. #define WIFI_RESET_MODULE() do{\
  45. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);\
  46. HAL_Delay(10);\
  47. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);\
  48. HAL_Delay(500);\
  49. }while(0);
  50. /* USER CODE END PM */
  51.  
  52. /* Private variables ---------------------------------------------------------*/
  53. DFSDM_Channel_HandleTypeDef hdfsdm1_channel1;
  54.  
  55. I2C_HandleTypeDef hi2c2;
  56.  
  57. QSPI_HandleTypeDef hqspi;
  58.  
  59. SPI_HandleTypeDef hspi3;
  60.  
  61. UART_HandleTypeDef huart1;
  62. UART_HandleTypeDef huart3;
  63. DMA_HandleTypeDef hdma_usart3_rx;
  64.  
  65. PCD_HandleTypeDef hpcd_USB_OTG_FS;
  66.  
  67. /* Definitions for defaultTask */
  68. osThreadId_t defaultTaskHandle;
  69. const osThreadAttr_t defaultTask_attributes = {
  70. .name = "defaultTask",
  71. .priority = (osPriority_t) osPriorityNormal,
  72. .stack_size = 128
  73. };
  74. /* USER CODE BEGIN PV */
  75. uint8_t buffer[UART_DMA_BUFFER_SIZE];
  76. char *msg_Task1 = "T0!\n";
  77. char *msg_Task2 = "T1!\n";
  78. /* USER CODE END PV */
  79.  
  80. /* Private function prototypes -----------------------------------------------*/
  81. void SystemClock_Config(void);
  82. static void MX_GPIO_Init(void);
  83. static void MX_DMA_Init(void);
  84. static void MX_DFSDM1_Init(void);
  85. static void MX_I2C2_Init(void);
  86. static void MX_QUADSPI_Init(void);
  87. static void MX_SPI3_Init(void);
  88. static void MX_USART1_UART_Init(void);
  89. static void MX_USART3_UART_Init(void);
  90. static void MX_USB_OTG_FS_PCD_Init(void);
  91. void StartDefaultTask(void *argument);
  92.  
  93. /* USER CODE BEGIN PFP */
  94.  
  95. /* USER CODE END PFP */
  96.  
  97. /* Private user code ---------------------------------------------------------*/
  98. /* USER CODE BEGIN 0 */
  99.  
  100. /* USER CODE END 0 */
  101.  
  102. /**
  103. * @brief The application entry point.
  104. * @retval int
  105. */
  106. int main(void)
  107. {
  108. /* USER CODE BEGIN 1 */
  109.  
  110. /* USER CODE END 1 */
  111.  
  112.  
  113. /* MCU Configuration--------------------------------------------------------*/
  114.  
  115. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  116. HAL_Init();
  117.  
  118. /* USER CODE BEGIN Init */
  119.  
  120. /* USER CODE END Init */
  121.  
  122. /* Configure the system clock */
  123. SystemClock_Config();
  124.  
  125. /* USER CODE BEGIN SysInit */
  126.  
  127. /* USER CODE END SysInit */
  128.  
  129. /* Initialize all configured peripherals */
  130. MX_GPIO_Init();
  131. MX_DMA_Init();
  132. MX_DFSDM1_Init();
  133. MX_I2C2_Init();
  134. MX_QUADSPI_Init();
  135. MX_SPI3_Init();
  136. MX_USART1_UART_Init();
  137. MX_USART3_UART_Init();
  138. MX_USB_OTG_FS_PCD_Init();
  139. /* USER CODE BEGIN 2 */
  140. WIFI_RESET_MODULE();
  141. HAL_UART_Receive_DMA(&huart3, buffer, sizeof(buffer));
  142. WIFI_RESET_MODULE();
  143. //HAL_UART_Transmit(&huart3, "---\r", sizeof("---\r"), 1000);
  144. HAL_UART_Transmit(&huart3, "C1=Infostrada-6F9890\r",
  145. sizeof("C1=Infostrada-6F9890\r"), 1000);
  146. HAL_UART_Transmit(&huart3, "C2=abcd@1!2!3!\r", sizeof("C2=abcd@1!2!3!\r"),
  147. 1000);
  148. HAL_UART_Transmit(&huart3, "C3=3\r", sizeof("C2=3\r"), 1000);
  149. HAL_UART_Transmit(&huart3, "C0\r", sizeof("C0\r"), 1000);
  150.  
  151. HAL_UART_Transmit(&huart3, "P0=0\r", sizeof("P0=0\r"), 1000);
  152. HAL_UART_Transmit(&huart3, "P1=0\r", sizeof("P0=0\r"), 1000);
  153. HAL_UART_Transmit(&huart3, "P2=8002\r", sizeof("P2=8002\r"), 1000);
  154. //HAL_UART_Transmit(&huart3, "R1=10\r", sizeof("R1=10\r"), 1000);
  155. //HAL_UART_Transmit(&huart3, "R2=5000\r", sizeof("R2=5000\r"), 1000);
  156. HAL_UART_Transmit(&huart3, "PX=0,0\r", sizeof("PX=0,0\r"), 1000);
  157. /* USER CODE END 2 */
  158. /* Init scheduler */
  159. osKernelInitialize();
  160.  
  161. /* USER CODE BEGIN RTOS_MUTEX */
  162. /* add mutexes, ... */
  163. /* USER CODE END RTOS_MUTEX */
  164.  
  165. /* USER CODE BEGIN RTOS_SEMAPHORES */
  166. /* add semaphores, ... */
  167. /* USER CODE END RTOS_SEMAPHORES */
  168.  
  169. /* USER CODE BEGIN RTOS_TIMERS */
  170. /* start timers, add new ones, ... */
  171. /* USER CODE END RTOS_TIMERS */
  172.  
  173. /* USER CODE BEGIN RTOS_QUEUES */
  174. /* add queues, ... */
  175. /* USER CODE END RTOS_QUEUES */
  176.  
  177. /* Create the thread(s) */
  178. /* creation of defaultTask */
  179. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  180.  
  181. /* USER CODE BEGIN RTOS_THREADS */
  182. /* add threads, ... */
  183. /* USER CODE END RTOS_THREADS */
  184.  
  185. /* Start scheduler */
  186. osKernelStart();
  187.  
  188. /* We should never get here as control is now taken by the scheduler */
  189.  
  190. /* Infinite loop */
  191. /* USER CODE BEGIN WHILE */
  192. while (1) {
  193. /* USER CODE END WHILE */
  194.  
  195. /* USER CODE BEGIN 3 */
  196. }
  197. /* USER CODE END 3 */
  198. }
  199.  
  200. /**
  201. * @brief System Clock Configuration
  202. * @retval None
  203. */
  204. void SystemClock_Config(void)
  205. {
  206. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  207. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  208. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  209.  
  210. /** Configure LSE Drive Capability
  211. */
  212. HAL_PWR_EnableBkUpAccess();
  213. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  214. /** Initializes the CPU, AHB and APB busses clocks
  215. */
  216. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
  217. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  218. RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  219. RCC_OscInitStruct.MSICalibrationValue = 0;
  220. RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
  221. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  222. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  223. RCC_OscInitStruct.PLL.PLLM = 1;
  224. RCC_OscInitStruct.PLL.PLLN = 40;
  225. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  226. RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  227. RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  228. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  229. {
  230. Error_Handler();
  231. }
  232. /** Initializes the CPU, AHB and APB busses clocks
  233. */
  234. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  235. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  236. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  237. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  238. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  239. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  240.  
  241. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  242. {
  243. Error_Handler();
  244. }
  245. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART3
  246. |RCC_PERIPHCLK_I2C2|RCC_PERIPHCLK_DFSDM1
  247. |RCC_PERIPHCLK_USB;
  248. PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
  249. PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
  250. PeriphClkInit.I2c2ClockSelection = RCC_I2C2CLKSOURCE_PCLK1;
  251. PeriphClkInit.Dfsdm1ClockSelection = RCC_DFSDM1CLKSOURCE_PCLK;
  252. PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
  253. PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_MSI;
  254. PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
  255. PeriphClkInit.PLLSAI1.PLLSAI1N = 24;
  256. PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
  257. PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
  258. PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
  259. PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_48M2CLK;
  260. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  261. {
  262. Error_Handler();
  263. }
  264. /** Configure the main internal regulator output voltage
  265. */
  266. if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  267. {
  268. Error_Handler();
  269. }
  270. /** Enable MSI Auto calibration
  271. */
  272. HAL_RCCEx_EnableMSIPLLMode();
  273. }
  274.  
  275. /**
  276. * @brief DFSDM1 Initialization Function
  277. * @param None
  278. * @retval None
  279. */
  280. static void MX_DFSDM1_Init(void)
  281. {
  282.  
  283. /* USER CODE BEGIN DFSDM1_Init 0 */
  284.  
  285. /* USER CODE END DFSDM1_Init 0 */
  286.  
  287. /* USER CODE BEGIN DFSDM1_Init 1 */
  288.  
  289. /* USER CODE END DFSDM1_Init 1 */
  290. hdfsdm1_channel1.Instance = DFSDM1_Channel1;
  291. hdfsdm1_channel1.Init.OutputClock.Activation = ENABLE;
  292. hdfsdm1_channel1.Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
  293. hdfsdm1_channel1.Init.OutputClock.Divider = 2;
  294. hdfsdm1_channel1.Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS;
  295. hdfsdm1_channel1.Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE;
  296. hdfsdm1_channel1.Init.Input.Pins = DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS;
  297. hdfsdm1_channel1.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING;
  298. hdfsdm1_channel1.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
  299. hdfsdm1_channel1.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER;
  300. hdfsdm1_channel1.Init.Awd.Oversampling = 1;
  301. hdfsdm1_channel1.Init.Offset = 0;
  302. hdfsdm1_channel1.Init.RightBitShift = 0x00;
  303. if (HAL_DFSDM_ChannelInit(&hdfsdm1_channel1) != HAL_OK)
  304. {
  305. Error_Handler();
  306. }
  307. /* USER CODE BEGIN DFSDM1_Init 2 */
  308.  
  309. /* USER CODE END DFSDM1_Init 2 */
  310.  
  311. }
  312.  
  313. /**
  314. * @brief I2C2 Initialization Function
  315. * @param None
  316. * @retval None
  317. */
  318. static void MX_I2C2_Init(void)
  319. {
  320.  
  321. /* USER CODE BEGIN I2C2_Init 0 */
  322.  
  323. /* USER CODE END I2C2_Init 0 */
  324.  
  325. /* USER CODE BEGIN I2C2_Init 1 */
  326.  
  327. /* USER CODE END I2C2_Init 1 */
  328. hi2c2.Instance = I2C2;
  329. hi2c2.Init.Timing = 0x10909CEC;
  330. hi2c2.Init.OwnAddress1 = 0;
  331. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  332. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  333. hi2c2.Init.OwnAddress2 = 0;
  334. hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  335. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  336. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  337. if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  338. {
  339. Error_Handler();
  340. }
  341. /** Configure Analogue filter
  342. */
  343. if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  344. {
  345. Error_Handler();
  346. }
  347. /** Configure Digital filter
  348. */
  349. if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
  350. {
  351. Error_Handler();
  352. }
  353. /* USER CODE BEGIN I2C2_Init 2 */
  354.  
  355. /* USER CODE END I2C2_Init 2 */
  356.  
  357. }
  358.  
  359. /**
  360. * @brief QUADSPI Initialization Function
  361. * @param None
  362. * @retval None
  363. */
  364. static void MX_QUADSPI_Init(void)
  365. {
  366.  
  367. /* USER CODE BEGIN QUADSPI_Init 0 */
  368.  
  369. /* USER CODE END QUADSPI_Init 0 */
  370.  
  371. /* USER CODE BEGIN QUADSPI_Init 1 */
  372.  
  373. /* USER CODE END QUADSPI_Init 1 */
  374. /* QUADSPI parameter configuration*/
  375. hqspi.Instance = QUADSPI;
  376. hqspi.Init.ClockPrescaler = 255;
  377. hqspi.Init.FifoThreshold = 1;
  378. hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
  379. hqspi.Init.FlashSize = 1;
  380. hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
  381. hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  382. if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  383. {
  384. Error_Handler();
  385. }
  386. /* USER CODE BEGIN QUADSPI_Init 2 */
  387.  
  388. /* USER CODE END QUADSPI_Init 2 */
  389.  
  390. }
  391.  
  392. /**
  393. * @brief SPI3 Initialization Function
  394. * @param None
  395. * @retval None
  396. */
  397. static void MX_SPI3_Init(void)
  398. {
  399.  
  400. /* USER CODE BEGIN SPI3_Init 0 */
  401.  
  402. /* USER CODE END SPI3_Init 0 */
  403.  
  404. /* USER CODE BEGIN SPI3_Init 1 */
  405.  
  406. /* USER CODE END SPI3_Init 1 */
  407. /* SPI3 parameter configuration*/
  408. hspi3.Instance = SPI3;
  409. hspi3.Init.Mode = SPI_MODE_MASTER;
  410. hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  411. hspi3.Init.DataSize = SPI_DATASIZE_4BIT;
  412. hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
  413. hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  414. hspi3.Init.NSS = SPI_NSS_SOFT;
  415. hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  416. hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  417. hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  418. hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  419. hspi3.Init.CRCPolynomial = 7;
  420. hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  421. hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  422. if (HAL_SPI_Init(&hspi3) != HAL_OK)
  423. {
  424. Error_Handler();
  425. }
  426. /* USER CODE BEGIN SPI3_Init 2 */
  427.  
  428. /* USER CODE END SPI3_Init 2 */
  429.  
  430. }
  431.  
  432. /**
  433. * @brief USART1 Initialization Function
  434. * @param None
  435. * @retval None
  436. */
  437. static void MX_USART1_UART_Init(void)
  438. {
  439.  
  440. /* USER CODE BEGIN USART1_Init 0 */
  441.  
  442. /* USER CODE END USART1_Init 0 */
  443.  
  444. /* USER CODE BEGIN USART1_Init 1 */
  445.  
  446. /* USER CODE END USART1_Init 1 */
  447. huart1.Instance = USART1;
  448. huart1.Init.BaudRate = 115200;
  449. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  450. huart1.Init.StopBits = UART_STOPBITS_1;
  451. huart1.Init.Parity = UART_PARITY_NONE;
  452. huart1.Init.Mode = UART_MODE_TX_RX;
  453. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  454. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  455. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  456. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  457. if (HAL_UART_Init(&huart1) != HAL_OK)
  458. {
  459. Error_Handler();
  460. }
  461. /* USER CODE BEGIN USART1_Init 2 */
  462.  
  463. /* USER CODE END USART1_Init 2 */
  464.  
  465. }
  466.  
  467. /**
  468. * @brief USART3 Initialization Function
  469. * @param None
  470. * @retval None
  471. */
  472. static void MX_USART3_UART_Init(void)
  473. {
  474.  
  475. /* USER CODE BEGIN USART3_Init 0 */
  476.  
  477. /* USER CODE END USART3_Init 0 */
  478.  
  479. /* USER CODE BEGIN USART3_Init 1 */
  480.  
  481. /* USER CODE END USART3_Init 1 */
  482. huart3.Instance = USART3;
  483. huart3.Init.BaudRate = 115200;
  484. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  485. huart3.Init.StopBits = UART_STOPBITS_1;
  486. huart3.Init.Parity = UART_PARITY_NONE;
  487. huart3.Init.Mode = UART_MODE_TX_RX;
  488. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  489. huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  490. huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  491. huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  492. if (HAL_UART_Init(&huart3) != HAL_OK)
  493. {
  494. Error_Handler();
  495. }
  496. /* USER CODE BEGIN USART3_Init 2 */
  497.  
  498. /* USER CODE END USART3_Init 2 */
  499.  
  500. }
  501.  
  502. /**
  503. * @brief USB_OTG_FS Initialization Function
  504. * @param None
  505. * @retval None
  506. */
  507. static void MX_USB_OTG_FS_PCD_Init(void)
  508. {
  509.  
  510. /* USER CODE BEGIN USB_OTG_FS_Init 0 */
  511.  
  512. /* USER CODE END USB_OTG_FS_Init 0 */
  513.  
  514. /* USER CODE BEGIN USB_OTG_FS_Init 1 */
  515.  
  516. /* USER CODE END USB_OTG_FS_Init 1 */
  517. hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
  518. hpcd_USB_OTG_FS.Init.dev_endpoints = 6;
  519. hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
  520. hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
  521. hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE;
  522. hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
  523. hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
  524. hpcd_USB_OTG_FS.Init.battery_charging_enable = DISABLE;
  525. hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
  526. hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE;
  527. if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK)
  528. {
  529. Error_Handler();
  530. }
  531. /* USER CODE BEGIN USB_OTG_FS_Init 2 */
  532.  
  533. /* USER CODE END USB_OTG_FS_Init 2 */
  534.  
  535. }
  536.  
  537. /**
  538. * Enable DMA controller clock
  539. */
  540. static void MX_DMA_Init(void)
  541. {
  542.  
  543. /* DMA controller clock enable */
  544. __HAL_RCC_DMA1_CLK_ENABLE();
  545.  
  546. /* DMA interrupt init */
  547. /* DMA1_Channel3_IRQn interrupt configuration */
  548. HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0);
  549. HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
  550.  
  551. }
  552.  
  553. /**
  554. * @brief GPIO Initialization Function
  555. * @param None
  556. * @retval None
  557. */
  558. static void MX_GPIO_Init(void)
  559. {
  560. GPIO_InitTypeDef GPIO_InitStruct = {0};
  561.  
  562. /* GPIO Ports Clock Enable */
  563. __HAL_RCC_GPIOE_CLK_ENABLE();
  564. __HAL_RCC_GPIOC_CLK_ENABLE();
  565. __HAL_RCC_GPIOA_CLK_ENABLE();
  566. __HAL_RCC_GPIOB_CLK_ENABLE();
  567. __HAL_RCC_GPIOD_CLK_ENABLE();
  568.  
  569. /*Configure GPIO pin Output Level */
  570. HAL_GPIO_WritePin(GPIOE, M24SR64_Y_RF_DISABLE_Pin|M24SR64_Y_GPO_Pin|ISM43362_RST_Pin, GPIO_PIN_RESET);
  571.  
  572. /*Configure GPIO pin Output Level */
  573. HAL_GPIO_WritePin(GPIOA, ARD_D10_Pin|SPBTLE_RF_RST_Pin|ARD_D9_Pin, GPIO_PIN_RESET);
  574.  
  575. /*Configure GPIO pin Output Level */
  576. HAL_GPIO_WritePin(GPIOB, ARD_D8_Pin|ISM43362_BOOT0_Pin|ISM43362_WAKEUP_Pin|LED2_Pin
  577. |SPSGRF_915_SDN_Pin|ARD_D5_Pin, GPIO_PIN_RESET);
  578.  
  579. /*Configure GPIO pin Output Level */
  580. HAL_GPIO_WritePin(GPIOD, USB_OTG_FS_PWR_EN_Pin|PMOD_RESET_Pin|STSAFE_A100_RESET_Pin, GPIO_PIN_RESET);
  581.  
  582. /*Configure GPIO pin Output Level */
  583. HAL_GPIO_WritePin(SPBTLE_RF_SPI3_CSN_GPIO_Port, SPBTLE_RF_SPI3_CSN_Pin, GPIO_PIN_SET);
  584.  
  585. /*Configure GPIO pin Output Level */
  586. HAL_GPIO_WritePin(GPIOC, VL53L0X_XSHUT_Pin|LED3_WIFI__LED4_BLE_Pin, GPIO_PIN_RESET);
  587.  
  588. /*Configure GPIO pin Output Level */
  589. HAL_GPIO_WritePin(SPSGRF_915_SPI3_CSN_GPIO_Port, SPSGRF_915_SPI3_CSN_Pin, GPIO_PIN_SET);
  590.  
  591. /*Configure GPIO pin Output Level */
  592. HAL_GPIO_WritePin(ISM43362_SPI3_CSN_GPIO_Port, ISM43362_SPI3_CSN_Pin, GPIO_PIN_SET);
  593.  
  594. /*Configure GPIO pins : M24SR64_Y_RF_DISABLE_Pin M24SR64_Y_GPO_Pin ISM43362_RST_Pin ISM43362_SPI3_CSN_Pin */
  595. GPIO_InitStruct.Pin = M24SR64_Y_RF_DISABLE_Pin|M24SR64_Y_GPO_Pin|ISM43362_RST_Pin|ISM43362_SPI3_CSN_Pin;
  596. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  597. GPIO_InitStruct.Pull = GPIO_NOPULL;
  598. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  599. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  600.  
  601. /*Configure GPIO pins : USB_OTG_FS_OVRCR_EXTI3_Pin SPSGRF_915_GPIO3_EXTI5_Pin SPBTLE_RF_IRQ_EXTI6_Pin ISM43362_DRDY_EXTI1_Pin */
  602. GPIO_InitStruct.Pin = USB_OTG_FS_OVRCR_EXTI3_Pin|SPSGRF_915_GPIO3_EXTI5_Pin|SPBTLE_RF_IRQ_EXTI6_Pin|ISM43362_DRDY_EXTI1_Pin;
  603. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  604. GPIO_InitStruct.Pull = GPIO_NOPULL;
  605. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  606.  
  607. /*Configure GPIO pin : BUTTON_EXTI13_Pin */
  608. GPIO_InitStruct.Pin = BUTTON_EXTI13_Pin;
  609. GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  610. GPIO_InitStruct.Pull = GPIO_NOPULL;
  611. HAL_GPIO_Init(BUTTON_EXTI13_GPIO_Port, &GPIO_InitStruct);
  612.  
  613. /*Configure GPIO pins : ARD_A5_Pin ARD_A4_Pin ARD_A3_Pin ARD_A2_Pin
  614. ARD_A1_Pin ARD_A0_Pin */
  615. GPIO_InitStruct.Pin = ARD_A5_Pin|ARD_A4_Pin|ARD_A3_Pin|ARD_A2_Pin
  616. |ARD_A1_Pin|ARD_A0_Pin;
  617. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
  618. GPIO_InitStruct.Pull = GPIO_NOPULL;
  619. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  620.  
  621. /*Configure GPIO pins : ARD_D1_Pin ARD_D0_Pin */
  622. GPIO_InitStruct.Pin = ARD_D1_Pin|ARD_D0_Pin;
  623. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  624. GPIO_InitStruct.Pull = GPIO_NOPULL;
  625. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  626. GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
  627. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  628.  
  629. /*Configure GPIO pins : ARD_D10_Pin SPBTLE_RF_RST_Pin ARD_D9_Pin */
  630. GPIO_InitStruct.Pin = ARD_D10_Pin|SPBTLE_RF_RST_Pin|ARD_D9_Pin;
  631. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  632. GPIO_InitStruct.Pull = GPIO_NOPULL;
  633. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  634. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  635.  
  636. /*Configure GPIO pin : ARD_D4_Pin */
  637. GPIO_InitStruct.Pin = ARD_D4_Pin;
  638. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  639. GPIO_InitStruct.Pull = GPIO_NOPULL;
  640. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  641. GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  642. HAL_GPIO_Init(ARD_D4_GPIO_Port, &GPIO_InitStruct);
  643.  
  644. /*Configure GPIO pin : ARD_D7_Pin */
  645. GPIO_InitStruct.Pin = ARD_D7_Pin;
  646. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
  647. GPIO_InitStruct.Pull = GPIO_NOPULL;
  648. HAL_GPIO_Init(ARD_D7_GPIO_Port, &GPIO_InitStruct);
  649.  
  650. /*Configure GPIO pins : ARD_D13_Pin ARD_D12_Pin ARD_D11_Pin */
  651. GPIO_InitStruct.Pin = ARD_D13_Pin|ARD_D12_Pin|ARD_D11_Pin;
  652. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  653. GPIO_InitStruct.Pull = GPIO_NOPULL;
  654. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  655. GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
  656. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  657.  
  658. /*Configure GPIO pin : ARD_D3_Pin */
  659. GPIO_InitStruct.Pin = ARD_D3_Pin;
  660. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  661. GPIO_InitStruct.Pull = GPIO_NOPULL;
  662. HAL_GPIO_Init(ARD_D3_GPIO_Port, &GPIO_InitStruct);
  663.  
  664. /*Configure GPIO pin : ARD_D6_Pin */
  665. GPIO_InitStruct.Pin = ARD_D6_Pin;
  666. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
  667. GPIO_InitStruct.Pull = GPIO_NOPULL;
  668. HAL_GPIO_Init(ARD_D6_GPIO_Port, &GPIO_InitStruct);
  669.  
  670. /*Configure GPIO pins : ARD_D8_Pin ISM43362_BOOT0_Pin ISM43362_WAKEUP_Pin LED2_Pin
  671. SPSGRF_915_SDN_Pin ARD_D5_Pin SPSGRF_915_SPI3_CSN_Pin */
  672. GPIO_InitStruct.Pin = ARD_D8_Pin|ISM43362_BOOT0_Pin|ISM43362_WAKEUP_Pin|LED2_Pin
  673. |SPSGRF_915_SDN_Pin|ARD_D5_Pin|SPSGRF_915_SPI3_CSN_Pin;
  674. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  675. GPIO_InitStruct.Pull = GPIO_NOPULL;
  676. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  677. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  678.  
  679. /*Configure GPIO pins : LPS22HB_INT_DRDY_EXTI0_Pin LSM6DSL_INT1_EXTI11_Pin ARD_D2_Pin HTS221_DRDY_EXTI15_Pin
  680. PMOD_IRQ_EXTI12_Pin */
  681. GPIO_InitStruct.Pin = LPS22HB_INT_DRDY_EXTI0_Pin|LSM6DSL_INT1_EXTI11_Pin|ARD_D2_Pin|HTS221_DRDY_EXTI15_Pin
  682. |PMOD_IRQ_EXTI12_Pin;
  683. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  684. GPIO_InitStruct.Pull = GPIO_NOPULL;
  685. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  686.  
  687. /*Configure GPIO pins : USB_OTG_FS_PWR_EN_Pin SPBTLE_RF_SPI3_CSN_Pin PMOD_RESET_Pin STSAFE_A100_RESET_Pin */
  688. GPIO_InitStruct.Pin = USB_OTG_FS_PWR_EN_Pin|SPBTLE_RF_SPI3_CSN_Pin|PMOD_RESET_Pin|STSAFE_A100_RESET_Pin;
  689. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  690. GPIO_InitStruct.Pull = GPIO_NOPULL;
  691. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  692. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  693.  
  694. /*Configure GPIO pins : VL53L0X_XSHUT_Pin LED3_WIFI__LED4_BLE_Pin */
  695. GPIO_InitStruct.Pin = VL53L0X_XSHUT_Pin|LED3_WIFI__LED4_BLE_Pin;
  696. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  697. GPIO_InitStruct.Pull = GPIO_NOPULL;
  698. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  699. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  700.  
  701. /*Configure GPIO pins : VL53L0X_GPIO1_EXTI7_Pin LSM3MDL_DRDY_EXTI8_Pin */
  702. GPIO_InitStruct.Pin = VL53L0X_GPIO1_EXTI7_Pin|LSM3MDL_DRDY_EXTI8_Pin;
  703. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  704. GPIO_InitStruct.Pull = GPIO_NOPULL;
  705. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  706.  
  707. /*Configure GPIO pin : PMOD_SPI2_SCK_Pin */
  708. GPIO_InitStruct.Pin = PMOD_SPI2_SCK_Pin;
  709. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  710. GPIO_InitStruct.Pull = GPIO_NOPULL;
  711. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  712. GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
  713. HAL_GPIO_Init(PMOD_SPI2_SCK_GPIO_Port, &GPIO_InitStruct);
  714.  
  715. /*Configure GPIO pins : PMOD_UART2_CTS_Pin PMOD_UART2_RTS_Pin PMOD_UART2_TX_Pin PMOD_UART2_RX_Pin */
  716. GPIO_InitStruct.Pin = PMOD_UART2_CTS_Pin|PMOD_UART2_RTS_Pin|PMOD_UART2_TX_Pin|PMOD_UART2_RX_Pin;
  717. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  718. GPIO_InitStruct.Pull = GPIO_NOPULL;
  719. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  720. GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
  721. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  722.  
  723. /*Configure GPIO pins : ARD_D15_Pin ARD_D14_Pin */
  724. GPIO_InitStruct.Pin = ARD_D15_Pin|ARD_D14_Pin;
  725. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  726. GPIO_InitStruct.Pull = GPIO_PULLUP;
  727. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  728. GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
  729. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  730.  
  731. /* EXTI interrupt init*/
  732. HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
  733. HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  734.  
  735. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  736. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  737.  
  738. }
  739.  
  740. /* USER CODE BEGIN 4 */
  741. /*void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  742. {
  743. __NOP();
  744. }
  745.  
  746. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
  747. {
  748. __NOP();
  749. }*/
  750.  
  751. static uint8_t msg_list[PARSER_MESSAGE_LIST_SIZE][PARSER_MESSAGE_SIZE];
  752. /* USER CODE END 4 */
  753.  
  754. /* USER CODE BEGIN Header_StartDefaultTask */
  755. /**
  756. * @brief Function implementing the defaultTask thread.
  757. * @param argument: Not used
  758. * @retval None
  759. */
  760. /* USER CODE END Header_StartDefaultTask */
  761. void StartDefaultTask(void *argument)
  762. {
  763. /* USER CODE BEGIN 5 */
  764.  
  765. size_t dma_head = 0, dma_tail = 0;
  766. size_t cur_msg_sz = 0;
  767. size_t cur_msg = 0;
  768. uint8_t found = 0;
  769. /* Infinite loop */
  770. for (;;) {
  771.  
  772. do {
  773. __disable_irq();
  774. dma_tail = UART_DMA_BUFFER_SIZE - huart3.hdmarx->Instance->CNDTR;
  775. __enable_irq();
  776.  
  777. if (dma_tail != dma_head) {
  778. if (dma_head < dma_tail) {
  779. for (register size_t i = dma_head; i < dma_tail; i++) {
  780. found = (found == 0 && buffer[i] == '\r') ? 1 :
  781. (found == 1 && buffer[i] == '\n') ? 2 :
  782. (found == 2 && buffer[i] == '>') ? 3 :
  783. (found == 3 && buffer[i] == ' ') ? 4 : 0;
  784.  
  785. if (cur_msg_sz >= PARSER_MESSAGE_SIZE) {
  786. cur_msg_sz = 0;
  787. }
  788.  
  789. msg_list[cur_msg][cur_msg_sz++] = buffer[i];
  790.  
  791. if (found == 4) {
  792. cur_msg =
  793. cur_msg == PARSER_MESSAGE_LIST_SIZE - 1 ?
  794. 0 : cur_msg + 1;
  795. memset(msg_list[cur_msg], 0, PARSER_MESSAGE_SIZE);
  796. cur_msg_sz = 0;
  797. }
  798. }
  799. } else {
  800. for (register size_t i = dma_head; i < UART_DMA_BUFFER_SIZE;
  801. i++) {
  802. found = (found == 0 && buffer[i] == '\r') ? 1 :
  803. (found == 1 && buffer[i] == '\n') ? 2 :
  804. (found == 2 && buffer[i] == '>') ? 3 :
  805. (found == 3 && buffer[i] == ' ') ? 4 : 0;
  806.  
  807. if (cur_msg_sz >= PARSER_MESSAGE_SIZE) {
  808. cur_msg_sz = 0;
  809. }
  810.  
  811. if (found == 4) {
  812. cur_msg =
  813. cur_msg == PARSER_MESSAGE_LIST_SIZE - 1 ?
  814. 0 : cur_msg + 1;
  815. memset(msg_list[cur_msg], 0, PARSER_MESSAGE_SIZE);
  816. cur_msg_sz = 0;
  817. }
  818. }
  819. for (register size_t i = 0; i < dma_tail; i++) {
  820. found = (found == 0 && buffer[i] == '\r') ? 1 :
  821. (found == 1 && buffer[i] == '\n') ? 2 :
  822. (found == 2 && buffer[i] == '>') ? 3 :
  823. (found == 3 && buffer[i] == ' ') ? 4 : 0;
  824.  
  825. if (cur_msg_sz >= PARSER_MESSAGE_SIZE) {
  826. cur_msg_sz = 0;
  827. }
  828.  
  829. if (found == 4) {
  830. cur_msg =
  831. cur_msg == PARSER_MESSAGE_LIST_SIZE - 1 ?
  832. 0 : cur_msg + 1;
  833. memset(msg_list[cur_msg], 0, PARSER_MESSAGE_SIZE);
  834. cur_msg_sz = 0;
  835. }
  836. }
  837. }
  838. dma_head = dma_tail;
  839. }
  840. } while (dma_head
  841. != (UART_DMA_BUFFER_SIZE - huart3.hdmarx->Instance->CNDTR));
  842. osDelay(25); // this should be the minimum time difference between each frame
  843. }
  844. /* USER CODE END 5 */
  845. }
  846.  
  847. /**
  848. * @brief Period elapsed callback in non blocking mode
  849. * @note This function is called when TIM6 interrupt took place, inside
  850. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  851. * a global variable "uwTick" used as application time base.
  852. * @param htim : TIM handle
  853. * @retval None
  854. */
  855. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  856. {
  857. /* USER CODE BEGIN Callback 0 */
  858.  
  859. /* USER CODE END Callback 0 */
  860. if (htim->Instance == TIM6) {
  861. HAL_IncTick();
  862. }
  863. /* USER CODE BEGIN Callback 1 */
  864.  
  865. /* USER CODE END Callback 1 */
  866. }
  867.  
  868. /**
  869. * @brief This function is executed in case of error occurrence.
  870. * @retval None
  871. */
  872. void Error_Handler(void)
  873. {
  874. /* USER CODE BEGIN Error_Handler_Debug */
  875. /* User can add his own implementation to report the HAL error return state */
  876.  
  877. /* USER CODE END Error_Handler_Debug */
  878. }
  879.  
  880. #ifdef USE_FULL_ASSERT
  881. /**
  882. * @brief Reports the name of the source file and the source line number
  883. * where the assert_param error has occurred.
  884. * @param file: pointer to the source file name
  885. * @param line: assert_param error line source number
  886. * @retval None
  887. */
  888. void assert_failed(char *file, uint32_t line)
  889. {
  890. /* USER CODE BEGIN 6 */
  891. /* User can add his own implementation to report the file name and line number,
  892. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  893. /* USER CODE END 6 */
  894. }
  895. #endif /* USE_FULL_ASSERT */
  896.  
  897. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement