Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
- /* USER CODE END Includes */
- /* Private typedef -----------------------------------------------------------*/
- /* USER CODE BEGIN PTD */
- /* USER CODE END PTD */
- /* Private define ------------------------------------------------------------*/
- /* USER CODE BEGIN PD */
- /* USER CODE END PD */
- /* Private macro -------------------------------------------------------------*/
- /* USER CODE BEGIN PM */
- /* USER CODE END PM */
- /* Private variables ---------------------------------------------------------*/
- ADC_HandleTypeDef hadc1;
- DMA_HandleTypeDef hdma_adc1;
- TIM_HandleTypeDef htim1;
- TIM_HandleTypeDef htim2;
- UART_HandleTypeDef huart2;
- DMA_HandleTypeDef hdma_usart2_rx;
- /* USER CODE BEGIN PV */
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- static void MX_GPIO_Init(void);
- static void MX_USART2_UART_Init(void);
- static void MX_DMA_Init(void);
- static void MX_ADC1_Init(void);
- static void MX_TIM1_Init(void);
- static void MX_TIM2_Init(void);
- /* USER CODE BEGIN PFP */
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 0 */
- // This is for ADC, RX, TX buffer
- uint32_t ADCValues[6];
- uint8_t RXData[12 + 28 + 1]; // 12 = sliders, 28 = digitals, 1 = send state
- uint8_t TXData[12];
- /* USER CODE END 0 */
- /**
- * @brief The application entry point.
- * @retval int
- */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_DMA_Init();
- MX_USART2_UART_Init();
- MX_ADC1_Init();
- MX_TIM1_Init();
- MX_TIM2_Init();
- /* USER CODE BEGIN 2 */
- /*
- * WARNING: MX_DMA_Init() need to be before MX_USART2_UART_Init()
- */
- // Enable ADC1 AND UART RX with DMA
- HAL_ADC_Start_DMA(&hadc1, ADCValues, sizeof(ADCValues) / sizeof(ADCValues[0]));
- HAL_UART_Receive_DMA(&huart2, RXData, sizeof(RXData) / sizeof(RXData[0]));
- // Start timers
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // PWM output 0
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); // PWM output 1
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); // PWM output 2
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4); // PWM output 3
- HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // PWM output 4
- HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); // PWM output 5
- // Set the PWM outputs to 0
- htim1.Instance->CCR1 = 0;
- htim1.Instance->CCR2 = 0;
- htim1.Instance->CCR3 = 0;
- htim1.Instance->CCR4 = 0;
- htim2.Instance->CCR1 = 0;
- htim2.Instance->CCR3 = 0;
- // Uncomment this line to light up the internal LED lamp on the NUCLEO board
- //HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, 1);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1) {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
- /**
- * @brief System Clock Configuration
- * @retval None
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
- /** Configure the main internal regulator output voltage
- */
- __HAL_RCC_PWR_CLK_ENABLE();
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
- RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
- RCC_OscInitStruct.PLL.PLLM = 16;
- RCC_OscInitStruct.PLL.PLLN = 336;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
- RCC_OscInitStruct.PLL.PLLQ = 7;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
- {
- Error_Handler();
- }
- }
- /**
- * @brief ADC1 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_ADC1_Init(void)
- {
- /* USER CODE BEGIN ADC1_Init 0 */
- /* USER CODE END ADC1_Init 0 */
- ADC_ChannelConfTypeDef sConfig = {0};
- /* USER CODE BEGIN ADC1_Init 1 */
- /* USER CODE END ADC1_Init 1 */
- /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
- */
- hadc1.Instance = ADC1;
- hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
- hadc1.Init.Resolution = ADC_RESOLUTION_12B;
- hadc1.Init.ScanConvMode = ENABLE;
- hadc1.Init.ContinuousConvMode = DISABLE;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
- hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_TRGO;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc1.Init.NbrOfConversion = 6;
- hadc1.Init.DMAContinuousRequests = ENABLE;
- hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_0;
- sConfig.Rank = 1;
- sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_1;
- sConfig.Rank = 2;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_4;
- sConfig.Rank = 3;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_8;
- sConfig.Rank = 4;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_10;
- sConfig.Rank = 5;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
- */
- sConfig.Channel = ADC_CHANNEL_11;
- sConfig.Rank = 6;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN ADC1_Init 2 */
- /* USER CODE END ADC1_Init 2 */
- }
- /**
- * @brief TIM1 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_TIM1_Init(void)
- {
- /* USER CODE BEGIN TIM1_Init 0 */
- /* USER CODE END TIM1_Init 0 */
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
- /* USER CODE BEGIN TIM1_Init 1 */
- /* USER CODE END TIM1_Init 1 */
- htim1.Instance = TIM1;
- htim1.Init.Prescaler = 200;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim1.Init.Period = 4095;
- htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim1.Init.RepetitionCounter = 0;
- htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_TIMING;
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM1_Init 2 */
- /* USER CODE END TIM1_Init 2 */
- HAL_TIM_MspPostInit(&htim1);
- }
- /**
- * @brief TIM2 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_TIM2_Init(void)
- {
- /* USER CODE BEGIN TIM2_Init 0 */
- /* USER CODE END TIM2_Init 0 */
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- /* USER CODE BEGIN TIM2_Init 1 */
- /* USER CODE END TIM2_Init 1 */
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 200;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 4095;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM2_Init 2 */
- /* USER CODE END TIM2_Init 2 */
- HAL_TIM_MspPostInit(&htim2);
- }
- /**
- * @brief USART2 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_USART2_UART_Init(void)
- {
- /* USER CODE BEGIN USART2_Init 0 */
- /* USER CODE END USART2_Init 0 */
- /* USER CODE BEGIN USART2_Init 1 */
- /* USER CODE END USART2_Init 1 */
- huart2.Instance = USART2;
- huart2.Init.BaudRate = 115200;
- huart2.Init.WordLength = UART_WORDLENGTH_8B;
- huart2.Init.StopBits = UART_STOPBITS_1;
- huart2.Init.Parity = UART_PARITY_NONE;
- huart2.Init.Mode = UART_MODE_TX_RX;
- huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart2.Init.OverSampling = UART_OVERSAMPLING_16;
- if (HAL_UART_Init(&huart2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN USART2_Init 2 */
- /* USER CODE END USART2_Init 2 */
- }
- /**
- * Enable DMA controller clock
- */
- static void MX_DMA_Init(void)
- {
- /* DMA controller clock enable */
- __HAL_RCC_DMA2_CLK_ENABLE();
- __HAL_RCC_DMA1_CLK_ENABLE();
- /* DMA interrupt init */
- /* DMA1_Stream5_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
- /* DMA2_Stream0_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
- }
- /**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
- static void MX_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOC, Digital26_Pin|Digital27_Pin|Digital3_Pin|Digital4_Pin
- |Digital11_Pin|Digital12_Pin|Digital13_Pin|Digital14_Pin
- |Digital16_Pin|Digital17_Pin|Digital18_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOA, Digital0_Pin|Digital1_Pin|Digital2_Pin|Digital15_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOB, Digital5_Pin|Digital6_Pin|Digital7_Pin|Digital8_Pin
- |Digital9_Pin|Digital10_Pin|Digital20_Pin|Digital21_Pin
- |Digital22_Pin|Digital23_Pin|Digital24_Pin|Digital25_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(Digital19_GPIO_Port, Digital19_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin : B1_Pin */
- GPIO_InitStruct.Pin = B1_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pins : Digital26_Pin Digital27_Pin Digital3_Pin Digital4_Pin
- Digital11_Pin Digital12_Pin Digital13_Pin Digital14_Pin
- Digital16_Pin Digital17_Pin Digital18_Pin */
- GPIO_InitStruct.Pin = Digital26_Pin|Digital27_Pin|Digital3_Pin|Digital4_Pin
- |Digital11_Pin|Digital12_Pin|Digital13_Pin|Digital14_Pin
- |Digital16_Pin|Digital17_Pin|Digital18_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /*Configure GPIO pin : ADC2_Pin */
- GPIO_InitStruct.Pin = ADC2_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(ADC2_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pins : Digital0_Pin Digital1_Pin Digital2_Pin Digital15_Pin */
- GPIO_InitStruct.Pin = Digital0_Pin|Digital1_Pin|Digital2_Pin|Digital15_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /*Configure GPIO pins : Digital5_Pin Digital6_Pin Digital7_Pin Digital8_Pin
- Digital9_Pin Digital10_Pin Digital20_Pin Digital21_Pin
- Digital22_Pin Digital23_Pin Digital24_Pin Digital25_Pin */
- GPIO_InitStruct.Pin = Digital5_Pin|Digital6_Pin|Digital7_Pin|Digital8_Pin
- |Digital9_Pin|Digital10_Pin|Digital20_Pin|Digital21_Pin
- |Digital22_Pin|Digital23_Pin|Digital24_Pin|Digital25_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /*Configure GPIO pin : Digital19_Pin */
- GPIO_InitStruct.Pin = Digital19_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(Digital19_GPIO_Port, &GPIO_InitStruct);
- }
- /* USER CODE BEGIN 4 */
- /*
- * When we get our message, in this case it will be sizeof(RXData)/sizeof(RXData[0]) bytes of slider inputs.
- * This method will be called
- */
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
- // Check if we are going to ONLY set PWM's(0) or set digitals(1). Last RXData have the send state element
- uint8_t send_state = RXData[sizeof(RXData) / sizeof(RXData[0]) - 1];
- if (send_state == 0) {
- // Set PWM counters period by convert short -> byte
- htim1.Instance->CCR1 = (uint32_t) ((RXData[0] << 8) | RXData[1]);
- htim1.Instance->CCR2 = (uint32_t) ((RXData[2] << 8) | RXData[3]);
- htim1.Instance->CCR3 = (uint32_t) ((RXData[4] << 8) | RXData[5]);
- htim1.Instance->CCR4 = (uint32_t) ((RXData[6] << 8) | RXData[7]);
- htim2.Instance->CCR1 = (uint32_t) ((RXData[8] << 8) | RXData[9]);
- htim2.Instance->CCR2 = (uint32_t) ((RXData[10] << 8) | RXData[11]);
- } else if (send_state == 1) {
- // This is for fixing a bug - It need to be put here due to STM32 version 1.24.2
- HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, GPIO_PIN_RESET);
- // For digitals only
- HAL_GPIO_WritePin(Digital0_GPIO_Port, Digital0_Pin, RXData[12]);
- HAL_GPIO_WritePin(Digital1_GPIO_Port, Digital1_Pin, RXData[13]);
- HAL_GPIO_WritePin(Digital2_GPIO_Port, Digital2_Pin, RXData[14]);
- HAL_GPIO_WritePin(Digital3_GPIO_Port, Digital3_Pin, RXData[15]);
- HAL_GPIO_WritePin(Digital4_GPIO_Port, Digital4_Pin, RXData[16]);
- HAL_GPIO_WritePin(Digital5_GPIO_Port, Digital5_Pin, RXData[17]);
- HAL_GPIO_WritePin(Digital6_GPIO_Port, Digital6_Pin, RXData[18]);
- HAL_GPIO_WritePin(Digital7_GPIO_Port, Digital7_Pin, RXData[19]);
- HAL_GPIO_WritePin(Digital8_GPIO_Port, Digital8_Pin, RXData[20]);
- HAL_GPIO_WritePin(Digital9_GPIO_Port, Digital9_Pin, RXData[21]);
- HAL_GPIO_WritePin(Digital10_GPIO_Port, Digital10_Pin, RXData[22]);
- HAL_GPIO_WritePin(Digital11_GPIO_Port, Digital11_Pin, RXData[23]);
- HAL_GPIO_WritePin(Digital12_GPIO_Port, Digital12_Pin, RXData[24]);
- HAL_GPIO_WritePin(Digital13_GPIO_Port, Digital13_Pin, RXData[25]);
- HAL_GPIO_WritePin(Digital14_GPIO_Port, Digital14_Pin, RXData[26]);
- HAL_GPIO_WritePin(Digital15_GPIO_Port, Digital15_Pin, RXData[27]);
- HAL_GPIO_WritePin(Digital16_GPIO_Port, Digital16_Pin, RXData[28]);
- HAL_GPIO_WritePin(Digital17_GPIO_Port, Digital17_Pin, RXData[29]);
- HAL_GPIO_WritePin(Digital18_GPIO_Port, Digital18_Pin, RXData[30]);
- HAL_GPIO_WritePin(Digital19_GPIO_Port, Digital19_Pin, RXData[31]);
- HAL_GPIO_WritePin(Digital20_GPIO_Port, Digital20_Pin, RXData[32]);
- HAL_GPIO_WritePin(Digital21_GPIO_Port, Digital21_Pin, RXData[33]);
- HAL_GPIO_WritePin(Digital22_GPIO_Port, Digital22_Pin, RXData[34]);
- HAL_GPIO_WritePin(Digital23_GPIO_Port, Digital23_Pin, RXData[35]);
- HAL_GPIO_WritePin(Digital24_GPIO_Port, Digital24_Pin, RXData[36]);
- HAL_GPIO_WritePin(Digital25_GPIO_Port, Digital25_Pin, RXData[37]);
- HAL_GPIO_WritePin(Digital26_GPIO_Port, Digital26_Pin, RXData[38]);
- HAL_GPIO_WritePin(Digital27_GPIO_Port, Digital27_Pin, RXData[39]);
- // Last element is the send state, position 40
- }
- // Convert ADC values to
- TXData[0] = (uint8_t) (ADCValues[0] >> 8);
- TXData[1] = (uint8_t) (ADCValues[0] & 0xFF);
- TXData[2] = (uint8_t) (ADCValues[1] >> 8);
- TXData[3] = (uint8_t) (ADCValues[1] & 0xFF);
- TXData[4] = (uint8_t) (ADCValues[2] >> 8);
- TXData[5] = (uint8_t) (ADCValues[2] & 0xFF);
- TXData[6] = (uint8_t) (ADCValues[3] >> 8);
- TXData[7] = (uint8_t) (ADCValues[3] & 0xFF);
- TXData[8] = (uint8_t) (ADCValues[4] >> 8);
- TXData[9] = (uint8_t) (ADCValues[4] & 0xFF);
- TXData[10] = (uint8_t) (ADCValues[5] >> 8);
- TXData[11] = (uint8_t) (ADCValues[5] & 0xFF);
- // Send data to JLoggerServer in about 5 milliseconds
- HAL_UART_Transmit(&huart2, TXData, sizeof(TXData) / sizeof(TXData[0]), 5);
- // Listen for a new receive
- HAL_UART_Receive_DMA(&huart2, RXData, sizeof(RXData) / sizeof(RXData[0]));
- }
- /* USER CODE END 4 */
- /**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
- void Error_Handler(void)
- {
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- /* USER CODE END Error_Handler_Debug */
- }
- #ifdef USE_FULL_ASSERT
- /**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
- void assert_failed(uint8_t *file, uint32_t line)
- {
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
- }
- #endif /* USE_FULL_ASSERT */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement