Advertisement
Guest User

Untitled

a guest
Jan 9th, 2020
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 22.20 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.  
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26.  
  27. /* USER CODE END Includes */
  28.  
  29. /* Private typedef -----------------------------------------------------------*/
  30. /* USER CODE BEGIN PTD */
  31.  
  32. /* USER CODE END PTD */
  33.  
  34. /* Private define ------------------------------------------------------------*/
  35. /* USER CODE BEGIN PD */
  36. /* USER CODE END PD */
  37.  
  38. /* Private macro -------------------------------------------------------------*/
  39. /* USER CODE BEGIN PM */
  40.  
  41. /* USER CODE END PM */
  42.  
  43. /* Private variables ---------------------------------------------------------*/
  44. ADC_HandleTypeDef hadc1;
  45. DMA_HandleTypeDef hdma_adc1;
  46.  
  47. TIM_HandleTypeDef htim1;
  48. TIM_HandleTypeDef htim2;
  49.  
  50. UART_HandleTypeDef huart2;
  51. DMA_HandleTypeDef hdma_usart2_rx;
  52.  
  53. /* USER CODE BEGIN PV */
  54.  
  55. /* USER CODE END PV */
  56.  
  57. /* Private function prototypes -----------------------------------------------*/
  58. void SystemClock_Config(void);
  59. static void MX_GPIO_Init(void);
  60. static void MX_USART2_UART_Init(void);
  61. static void MX_DMA_Init(void);
  62. static void MX_ADC1_Init(void);
  63. static void MX_TIM1_Init(void);
  64. static void MX_TIM2_Init(void);
  65. /* USER CODE BEGIN PFP */
  66.  
  67. /* USER CODE END PFP */
  68.  
  69. /* Private user code ---------------------------------------------------------*/
  70. /* USER CODE BEGIN 0 */
  71. // This is for ADC, RX, TX buffer
  72. uint32_t ADCValues[6];
  73. uint8_t RXData[12 + 28 + 1]; // 12 = sliders, 28 = digitals, 1 = send state
  74. uint8_t TXData[12];
  75.  
  76. /* USER CODE END 0 */
  77.  
  78. /**
  79.   * @brief  The application entry point.
  80.   * @retval int
  81.   */
  82. int main(void)
  83. {
  84.   /* USER CODE BEGIN 1 */
  85.  
  86.   /* USER CODE END 1 */
  87.  
  88.  
  89.   /* MCU Configuration--------------------------------------------------------*/
  90.  
  91.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  92.   HAL_Init();
  93.  
  94.   /* USER CODE BEGIN Init */
  95.  
  96.   /* USER CODE END Init */
  97.  
  98.   /* Configure the system clock */
  99.   SystemClock_Config();
  100.  
  101.   /* USER CODE BEGIN SysInit */
  102.  
  103.   /* USER CODE END SysInit */
  104.  
  105.   /* Initialize all configured peripherals */
  106.   MX_GPIO_Init();
  107.   MX_DMA_Init();
  108.   MX_USART2_UART_Init();
  109.   MX_ADC1_Init();
  110.   MX_TIM1_Init();
  111.   MX_TIM2_Init();
  112.   /* USER CODE BEGIN 2 */
  113.  
  114.   /*
  115.    * WARNING: MX_DMA_Init() need to be before MX_USART2_UART_Init()
  116.    */
  117.  
  118.     // Enable ADC1 AND UART RX with DMA
  119.     HAL_ADC_Start_DMA(&hadc1, ADCValues, sizeof(ADCValues) / sizeof(ADCValues[0]));
  120.  
  121.     HAL_UART_Receive_DMA(&huart2, RXData, sizeof(RXData) / sizeof(RXData[0]));
  122.  
  123.     // Start timers
  124.     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // PWM output 0
  125.     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); // PWM output 1
  126.     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); // PWM output 2
  127.     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4); // PWM output 3
  128.  
  129.     HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // PWM output 4
  130.     HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); // PWM output 5
  131.  
  132.     // Set the PWM outputs to 0
  133.     htim1.Instance->CCR1 = 0;
  134.     htim1.Instance->CCR2 = 0;
  135.     htim1.Instance->CCR3 = 0;
  136.     htim1.Instance->CCR4 = 0;
  137.  
  138.     htim2.Instance->CCR1 = 0;
  139.     htim2.Instance->CCR3 = 0;
  140.  
  141.     // Uncomment this line to light up the internal LED lamp on the NUCLEO board
  142.     //HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, 1);
  143.  
  144.   /* USER CODE END 2 */
  145.  
  146.   /* Infinite loop */
  147.   /* USER CODE BEGIN WHILE */
  148.     while (1) {
  149.     /* USER CODE END WHILE */
  150.  
  151.     /* USER CODE BEGIN 3 */
  152.     }
  153.   /* USER CODE END 3 */
  154. }
  155.  
  156. /**
  157.   * @brief System Clock Configuration
  158.   * @retval None
  159.   */
  160. void SystemClock_Config(void)
  161. {
  162.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  163.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  164.  
  165.   /** Configure the main internal regulator output voltage
  166.   */
  167.   __HAL_RCC_PWR_CLK_ENABLE();
  168.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
  169.   /** Initializes the CPU, AHB and APB busses clocks
  170.   */
  171.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  172.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  173.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  174.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  175.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  176.   RCC_OscInitStruct.PLL.PLLM = 16;
  177.   RCC_OscInitStruct.PLL.PLLN = 336;
  178.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  179.   RCC_OscInitStruct.PLL.PLLQ = 7;
  180.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  181.   {
  182.     Error_Handler();
  183.   }
  184.   /** Initializes the CPU, AHB and APB busses clocks
  185.   */
  186.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  187.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  188.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  189.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  190.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  191.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  192.  
  193.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  194.   {
  195.     Error_Handler();
  196.   }
  197. }
  198.  
  199. /**
  200.   * @brief ADC1 Initialization Function
  201.   * @param None
  202.   * @retval None
  203.   */
  204. static void MX_ADC1_Init(void)
  205. {
  206.  
  207.   /* USER CODE BEGIN ADC1_Init 0 */
  208.  
  209.   /* USER CODE END ADC1_Init 0 */
  210.  
  211.   ADC_ChannelConfTypeDef sConfig = {0};
  212.  
  213.   /* USER CODE BEGIN ADC1_Init 1 */
  214.  
  215.   /* USER CODE END ADC1_Init 1 */
  216.   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  217.   */
  218.   hadc1.Instance = ADC1;
  219.   hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  220.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  221.   hadc1.Init.ScanConvMode = ENABLE;
  222.   hadc1.Init.ContinuousConvMode = DISABLE;
  223.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  224.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  225.   hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_TRGO;
  226.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  227.   hadc1.Init.NbrOfConversion = 6;
  228.   hadc1.Init.DMAContinuousRequests = ENABLE;
  229.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  230.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  231.   {
  232.     Error_Handler();
  233.   }
  234.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  235.   */
  236.   sConfig.Channel = ADC_CHANNEL_0;
  237.   sConfig.Rank = 1;
  238.   sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
  239.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  240.   {
  241.     Error_Handler();
  242.   }
  243.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  244.   */
  245.   sConfig.Channel = ADC_CHANNEL_1;
  246.   sConfig.Rank = 2;
  247.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  248.   {
  249.     Error_Handler();
  250.   }
  251.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  252.   */
  253.   sConfig.Channel = ADC_CHANNEL_4;
  254.   sConfig.Rank = 3;
  255.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  256.   {
  257.     Error_Handler();
  258.   }
  259.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  260.   */
  261.   sConfig.Channel = ADC_CHANNEL_8;
  262.   sConfig.Rank = 4;
  263.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  264.   {
  265.     Error_Handler();
  266.   }
  267.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  268.   */
  269.   sConfig.Channel = ADC_CHANNEL_10;
  270.   sConfig.Rank = 5;
  271.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  272.   {
  273.     Error_Handler();
  274.   }
  275.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  276.   */
  277.   sConfig.Channel = ADC_CHANNEL_11;
  278.   sConfig.Rank = 6;
  279.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  280.   {
  281.     Error_Handler();
  282.   }
  283.   /* USER CODE BEGIN ADC1_Init 2 */
  284.  
  285.   /* USER CODE END ADC1_Init 2 */
  286.  
  287. }
  288.  
  289. /**
  290.   * @brief TIM1 Initialization Function
  291.   * @param None
  292.   * @retval None
  293.   */
  294. static void MX_TIM1_Init(void)
  295. {
  296.  
  297.   /* USER CODE BEGIN TIM1_Init 0 */
  298.  
  299.   /* USER CODE END TIM1_Init 0 */
  300.  
  301.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  302.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  303.   TIM_OC_InitTypeDef sConfigOC = {0};
  304.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  305.  
  306.   /* USER CODE BEGIN TIM1_Init 1 */
  307.  
  308.   /* USER CODE END TIM1_Init 1 */
  309.   htim1.Instance = TIM1;
  310.   htim1.Init.Prescaler = 200;
  311.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  312.   htim1.Init.Period = 4095;
  313.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  314.   htim1.Init.RepetitionCounter = 0;
  315.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  316.   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  317.   {
  318.     Error_Handler();
  319.   }
  320.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  321.   if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  322.   {
  323.     Error_Handler();
  324.   }
  325.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  326.   {
  327.     Error_Handler();
  328.   }
  329.   if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
  330.   {
  331.     Error_Handler();
  332.   }
  333.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  334.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  335.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  336.   {
  337.     Error_Handler();
  338.   }
  339.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  340.   sConfigOC.Pulse = 0;
  341.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  342.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  343.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  344.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  345.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  346.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  347.   {
  348.     Error_Handler();
  349.   }
  350.   sConfigOC.OCMode = TIM_OCMODE_TIMING;
  351.   if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  352.   {
  353.     Error_Handler();
  354.   }
  355.   if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  356.   {
  357.     Error_Handler();
  358.   }
  359.   if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  360.   {
  361.     Error_Handler();
  362.   }
  363.   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  364.   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  365.   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  366.   sBreakDeadTimeConfig.DeadTime = 0;
  367.   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  368.   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  369.   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  370.   if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  371.   {
  372.     Error_Handler();
  373.   }
  374.   /* USER CODE BEGIN TIM1_Init 2 */
  375.  
  376.   /* USER CODE END TIM1_Init 2 */
  377.   HAL_TIM_MspPostInit(&htim1);
  378.  
  379. }
  380.  
  381. /**
  382.   * @brief TIM2 Initialization Function
  383.   * @param None
  384.   * @retval None
  385.   */
  386. static void MX_TIM2_Init(void)
  387. {
  388.  
  389.   /* USER CODE BEGIN TIM2_Init 0 */
  390.  
  391.   /* USER CODE END TIM2_Init 0 */
  392.  
  393.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  394.   TIM_OC_InitTypeDef sConfigOC = {0};
  395.  
  396.   /* USER CODE BEGIN TIM2_Init 1 */
  397.  
  398.   /* USER CODE END TIM2_Init 1 */
  399.   htim2.Instance = TIM2;
  400.   htim2.Init.Prescaler = 200;
  401.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  402.   htim2.Init.Period = 4095;
  403.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  404.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  405.   if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  406.   {
  407.     Error_Handler();
  408.   }
  409.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  410.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  411.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  412.   {
  413.     Error_Handler();
  414.   }
  415.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  416.   sConfigOC.Pulse = 0;
  417.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  418.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  419.   if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  420.   {
  421.     Error_Handler();
  422.   }
  423.   if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  424.   {
  425.     Error_Handler();
  426.   }
  427.   /* USER CODE BEGIN TIM2_Init 2 */
  428.  
  429.   /* USER CODE END TIM2_Init 2 */
  430.   HAL_TIM_MspPostInit(&htim2);
  431.  
  432. }
  433.  
  434. /**
  435.   * @brief USART2 Initialization Function
  436.   * @param None
  437.   * @retval None
  438.   */
  439. static void MX_USART2_UART_Init(void)
  440. {
  441.  
  442.   /* USER CODE BEGIN USART2_Init 0 */
  443.  
  444.   /* USER CODE END USART2_Init 0 */
  445.  
  446.   /* USER CODE BEGIN USART2_Init 1 */
  447.  
  448.   /* USER CODE END USART2_Init 1 */
  449.   huart2.Instance = USART2;
  450.   huart2.Init.BaudRate = 115200;
  451.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  452.   huart2.Init.StopBits = UART_STOPBITS_1;
  453.   huart2.Init.Parity = UART_PARITY_NONE;
  454.   huart2.Init.Mode = UART_MODE_TX_RX;
  455.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  456.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  457.   if (HAL_UART_Init(&huart2) != HAL_OK)
  458.   {
  459.     Error_Handler();
  460.   }
  461.   /* USER CODE BEGIN USART2_Init 2 */
  462.  
  463.   /* USER CODE END USART2_Init 2 */
  464.  
  465. }
  466.  
  467. /**
  468.   * Enable DMA controller clock
  469.   */
  470. static void MX_DMA_Init(void)
  471. {
  472.  
  473.   /* DMA controller clock enable */
  474.   __HAL_RCC_DMA2_CLK_ENABLE();
  475.   __HAL_RCC_DMA1_CLK_ENABLE();
  476.  
  477.   /* DMA interrupt init */
  478.   /* DMA1_Stream5_IRQn interrupt configuration */
  479.   HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
  480.   HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
  481.   /* DMA2_Stream0_IRQn interrupt configuration */
  482.   HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
  483.   HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
  484.  
  485. }
  486.  
  487. /**
  488.   * @brief GPIO Initialization Function
  489.   * @param None
  490.   * @retval None
  491.   */
  492. static void MX_GPIO_Init(void)
  493. {
  494.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  495.  
  496.   /* GPIO Ports Clock Enable */
  497.   __HAL_RCC_GPIOC_CLK_ENABLE();
  498.   __HAL_RCC_GPIOH_CLK_ENABLE();
  499.   __HAL_RCC_GPIOA_CLK_ENABLE();
  500.   __HAL_RCC_GPIOB_CLK_ENABLE();
  501.   __HAL_RCC_GPIOD_CLK_ENABLE();
  502.  
  503.   /*Configure GPIO pin Output Level */
  504.   HAL_GPIO_WritePin(GPIOC, Digital26_Pin|Digital27_Pin|Digital3_Pin|Digital4_Pin
  505.                           |Digital11_Pin|Digital12_Pin|Digital13_Pin|Digital14_Pin
  506.                           |Digital16_Pin|Digital17_Pin|Digital18_Pin, GPIO_PIN_RESET);
  507.  
  508.   /*Configure GPIO pin Output Level */
  509.   HAL_GPIO_WritePin(GPIOA, Digital0_Pin|Digital1_Pin|Digital2_Pin|Digital15_Pin, GPIO_PIN_RESET);
  510.  
  511.   /*Configure GPIO pin Output Level */
  512.   HAL_GPIO_WritePin(GPIOB, Digital5_Pin|Digital6_Pin|Digital7_Pin|Digital8_Pin
  513.                           |Digital9_Pin|Digital10_Pin|Digital20_Pin|Digital21_Pin
  514.                           |Digital22_Pin|Digital23_Pin|Digital24_Pin|Digital25_Pin, GPIO_PIN_RESET);
  515.  
  516.   /*Configure GPIO pin Output Level */
  517.   HAL_GPIO_WritePin(Digital19_GPIO_Port, Digital19_Pin, GPIO_PIN_RESET);
  518.  
  519.   /*Configure GPIO pin : B1_Pin */
  520.   GPIO_InitStruct.Pin = B1_Pin;
  521.   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  522.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  523.   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  524.  
  525.   /*Configure GPIO pins : Digital26_Pin Digital27_Pin Digital3_Pin Digital4_Pin
  526.                            Digital11_Pin Digital12_Pin Digital13_Pin Digital14_Pin
  527.                            Digital16_Pin Digital17_Pin Digital18_Pin */
  528.   GPIO_InitStruct.Pin = Digital26_Pin|Digital27_Pin|Digital3_Pin|Digital4_Pin
  529.                           |Digital11_Pin|Digital12_Pin|Digital13_Pin|Digital14_Pin
  530.                           |Digital16_Pin|Digital17_Pin|Digital18_Pin;
  531.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  532.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  533.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  534.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  535.  
  536.   /*Configure GPIO pin : ADC2_Pin */
  537.   GPIO_InitStruct.Pin = ADC2_Pin;
  538.   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  539.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  540.   HAL_GPIO_Init(ADC2_GPIO_Port, &GPIO_InitStruct);
  541.  
  542.   /*Configure GPIO pins : Digital0_Pin Digital1_Pin Digital2_Pin Digital15_Pin */
  543.   GPIO_InitStruct.Pin = Digital0_Pin|Digital1_Pin|Digital2_Pin|Digital15_Pin;
  544.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  545.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  546.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  547.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  548.  
  549.   /*Configure GPIO pins : Digital5_Pin Digital6_Pin Digital7_Pin Digital8_Pin
  550.                            Digital9_Pin Digital10_Pin Digital20_Pin Digital21_Pin
  551.                            Digital22_Pin Digital23_Pin Digital24_Pin Digital25_Pin */
  552.   GPIO_InitStruct.Pin = Digital5_Pin|Digital6_Pin|Digital7_Pin|Digital8_Pin
  553.                           |Digital9_Pin|Digital10_Pin|Digital20_Pin|Digital21_Pin
  554.                           |Digital22_Pin|Digital23_Pin|Digital24_Pin|Digital25_Pin;
  555.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  556.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  557.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  558.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  559.  
  560.   /*Configure GPIO pin : Digital19_Pin */
  561.   GPIO_InitStruct.Pin = Digital19_Pin;
  562.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  563.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  564.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  565.   HAL_GPIO_Init(Digital19_GPIO_Port, &GPIO_InitStruct);
  566.  
  567. }
  568.  
  569. /* USER CODE BEGIN 4 */
  570. /*
  571.  * When we get our message, in this case it will be sizeof(RXData)/sizeof(RXData[0]) bytes of slider inputs.
  572.  * This method will be called
  573.  */
  574.  
  575. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  576.  
  577.     // Check if we are going to ONLY set PWM's(0) or set digitals(1). Last RXData have the send state element
  578.     uint8_t send_state = RXData[sizeof(RXData) / sizeof(RXData[0]) - 1];
  579.     if (send_state == 0) {
  580.         // Set PWM counters period by convert short -> byte
  581.         htim1.Instance->CCR1 = (uint32_t) ((RXData[0] << 8) | RXData[1]);
  582.         htim1.Instance->CCR2 = (uint32_t) ((RXData[2] << 8) | RXData[3]);
  583.         htim1.Instance->CCR3 = (uint32_t) ((RXData[4] << 8) | RXData[5]);
  584.         htim1.Instance->CCR4 = (uint32_t) ((RXData[6] << 8) | RXData[7]);
  585.         htim2.Instance->CCR1 = (uint32_t) ((RXData[8] << 8) | RXData[9]);
  586.         htim2.Instance->CCR2 = (uint32_t) ((RXData[10] << 8) | RXData[11]);
  587.     } else if (send_state == 1) {
  588.  
  589.         // This is for fixing a bug - It need to be put here due to STM32 version 1.24.2
  590.         HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, GPIO_PIN_RESET);
  591.  
  592.         // For digitals only
  593.         HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, RXData[12]);
  594.         HAL_GPIO_WritePin(Digital1_GPIO_Port, Digital1_Pin, RXData[13]);
  595.         HAL_GPIO_WritePin(Digital2_GPIO_Port, Digital2_Pin, RXData[14]);
  596.         HAL_GPIO_WritePin(Digital3_GPIO_Port, Digital3_Pin, RXData[15]);
  597.         HAL_GPIO_WritePin(Digital4_GPIO_Port, Digital4_Pin, RXData[16]);
  598.         HAL_GPIO_WritePin(Digital5_GPIO_Port, Digital5_Pin, RXData[17]);
  599.         HAL_GPIO_WritePin(Digital6_GPIO_Port, Digital6_Pin, RXData[18]);
  600.         HAL_GPIO_WritePin(Digital7_GPIO_Port, Digital7_Pin, RXData[19]);
  601.         HAL_GPIO_WritePin(Digital8_GPIO_Port, Digital8_Pin, RXData[20]);
  602.         HAL_GPIO_WritePin(Digital9_GPIO_Port, Digital9_Pin, RXData[21]);
  603.         HAL_GPIO_WritePin(Digital10_GPIO_Port, Digital10_Pin, RXData[22]);
  604.         HAL_GPIO_WritePin(Digital11_GPIO_Port, Digital11_Pin, RXData[23]);
  605.         HAL_GPIO_WritePin(Digital12_GPIO_Port, Digital12_Pin, RXData[24]);
  606.         HAL_GPIO_WritePin(Digital13_GPIO_Port, Digital13_Pin, RXData[25]);
  607.         HAL_GPIO_WritePin(Digital14_GPIO_Port, Digital14_Pin, RXData[26]);
  608.         HAL_GPIO_WritePin(Digital15_GPIO_Port, Digital15_Pin, RXData[27]);
  609.         HAL_GPIO_WritePin(Digital16_GPIO_Port, Digital16_Pin, RXData[28]);
  610.         HAL_GPIO_WritePin(Digital17_GPIO_Port, Digital17_Pin, RXData[29]);
  611.         HAL_GPIO_WritePin(Digital18_GPIO_Port, Digital18_Pin, RXData[30]);
  612.         HAL_GPIO_WritePin(Digital19_GPIO_Port, Digital19_Pin, RXData[31]);
  613.         HAL_GPIO_WritePin(Digital20_GPIO_Port, Digital20_Pin, RXData[32]);
  614.         HAL_GPIO_WritePin(Digital21_GPIO_Port, Digital21_Pin, RXData[33]);
  615.         HAL_GPIO_WritePin(Digital22_GPIO_Port, Digital22_Pin, RXData[34]);
  616.         HAL_GPIO_WritePin(Digital23_GPIO_Port, Digital23_Pin, RXData[35]);
  617.         HAL_GPIO_WritePin(Digital24_GPIO_Port, Digital24_Pin, RXData[36]);
  618.         HAL_GPIO_WritePin(Digital25_GPIO_Port, Digital25_Pin, RXData[37]);
  619.         HAL_GPIO_WritePin(Digital26_GPIO_Port, Digital26_Pin, RXData[38]);
  620.         HAL_GPIO_WritePin(Digital27_GPIO_Port, Digital27_Pin, RXData[39]);
  621.         // Last element is the send state, position 40
  622.     }
  623.  
  624.     // Convert ADC values to
  625.     TXData[0] = (uint8_t) (ADCValues[0] >> 8);
  626.     TXData[1] = (uint8_t) (ADCValues[0] & 0xFF);
  627.     TXData[2] = (uint8_t) (ADCValues[1] >> 8);
  628.     TXData[3] = (uint8_t) (ADCValues[1] & 0xFF);
  629.     TXData[4] = (uint8_t) (ADCValues[2] >> 8);
  630.     TXData[5] = (uint8_t) (ADCValues[2] & 0xFF);
  631.     TXData[6] = (uint8_t) (ADCValues[3] >> 8);
  632.     TXData[7] = (uint8_t) (ADCValues[3] & 0xFF);
  633.     TXData[8] = (uint8_t) (ADCValues[4] >> 8);
  634.     TXData[9] = (uint8_t) (ADCValues[4] & 0xFF);
  635.     TXData[10] = (uint8_t) (ADCValues[5] >> 8);
  636.     TXData[11] = (uint8_t) (ADCValues[5] & 0xFF);
  637.  
  638.     // Send data to JLoggerServer in about 5 milliseconds
  639.     HAL_UART_Transmit(&huart2, TXData, sizeof(TXData) / sizeof(TXData[0]), 5);
  640.  
  641.     // Listen for a new receive
  642.     HAL_UART_Receive_DMA(&huart2, RXData, sizeof(RXData) / sizeof(RXData[0]));
  643.  
  644. }
  645. /* USER CODE END 4 */
  646.  
  647. /**
  648.   * @brief  This function is executed in case of error occurrence.
  649.   * @retval None
  650.   */
  651. void Error_Handler(void)
  652. {
  653.   /* USER CODE BEGIN Error_Handler_Debug */
  654.     /* User can add his own implementation to report the HAL error return state */
  655.  
  656.   /* USER CODE END Error_Handler_Debug */
  657. }
  658.  
  659. #ifdef  USE_FULL_ASSERT
  660. /**
  661.   * @brief  Reports the name of the source file and the source line number
  662.   *         where the assert_param error has occurred.
  663.   * @param  file: pointer to the source file name
  664.   * @param  line: assert_param error line source number
  665.   * @retval None
  666.   */
  667. void assert_failed(uint8_t *file, uint32_t line)
  668. {
  669.   /* USER CODE BEGIN 6 */
  670.   /* User can add his own implementation to report the file name and line number,
  671.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  672.   /* USER CODE END 6 */
  673. }
  674. #endif /* USE_FULL_ASSERT */
  675.  
  676. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement