Use DMA for TMP144 communication
This commit is contained in:
		@ -55,11 +55,13 @@ void SVC_Handler(void);
 | 
				
			|||||||
void DebugMon_Handler(void);
 | 
					void DebugMon_Handler(void);
 | 
				
			||||||
void PendSV_Handler(void);
 | 
					void PendSV_Handler(void);
 | 
				
			||||||
void SysTick_Handler(void);
 | 
					void SysTick_Handler(void);
 | 
				
			||||||
 | 
					void DMA1_Stream1_IRQHandler(void);
 | 
				
			||||||
void CAN1_RX0_IRQHandler(void);
 | 
					void CAN1_RX0_IRQHandler(void);
 | 
				
			||||||
void CAN1_RX1_IRQHandler(void);
 | 
					void CAN1_RX1_IRQHandler(void);
 | 
				
			||||||
void I2C1_EV_IRQHandler(void);
 | 
					void I2C1_EV_IRQHandler(void);
 | 
				
			||||||
void USART1_IRQHandler(void);
 | 
					void USART1_IRQHandler(void);
 | 
				
			||||||
void USART3_IRQHandler(void);
 | 
					void USART3_IRQHandler(void);
 | 
				
			||||||
 | 
					void DMA2_Stream2_IRQHandler(void);
 | 
				
			||||||
void CAN2_RX0_IRQHandler(void);
 | 
					void CAN2_RX0_IRQHandler(void);
 | 
				
			||||||
void CAN2_RX1_IRQHandler(void);
 | 
					void CAN2_RX1_IRQHandler(void);
 | 
				
			||||||
void CAN2_SCE_IRQHandler(void);
 | 
					void CAN2_SCE_IRQHandler(void);
 | 
				
			||||||
 | 
				
			|||||||
@ -69,7 +69,7 @@ HAL_StatusTypeDef tmp144_init_reset(TMP144Bus* bus) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bus->state = TMP144_RESETTING;
 | 
					  bus->state = TMP144_RESETTING;
 | 
				
			||||||
  CHECK_STATUS(HAL_UART_Receive_IT(bus->handle, bus->rxbuf, 2));
 | 
					  CHECK_STATUS(HAL_UART_Receive_DMA(bus->handle, bus->rxbuf, 2));
 | 
				
			||||||
  // Keep sending Global Software Reset until it echoes back (as per 7.5.2)
 | 
					  // Keep sending Global Software Reset until it echoes back (as per 7.5.2)
 | 
				
			||||||
  int tries = 0;
 | 
					  int tries = 0;
 | 
				
			||||||
  do {
 | 
					  do {
 | 
				
			||||||
@ -77,14 +77,19 @@ HAL_StatusTypeDef tmp144_init_reset(TMP144Bus* bus) {
 | 
				
			|||||||
      bus->state = TMP144_ERROR;
 | 
					      bus->state = TMP144_ERROR;
 | 
				
			||||||
      return HAL_TIMEOUT;
 | 
					      return HAL_TIMEOUT;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    CHECK_STATUS(HAL_UART_Transmit(bus->handle, TMP144_SEQ_RESET,
 | 
					    if (bus->handle->RxState == HAL_UART_STATE_READY &&
 | 
				
			||||||
                                   sizeof(TMP144_SEQ_RESET), 100));
 | 
					        bus->state == TMP144_RESETTING) {
 | 
				
			||||||
    HAL_Delay(50);
 | 
					      HAL_UART_DMAStop(bus->handle);
 | 
				
			||||||
 | 
					      CHECK_STATUS(HAL_UART_Receive_DMA(bus->handle, bus->rxbuf, 2));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    CHECK_STATUS(HAL_UART_Transmit_IT(bus->handle, TMP144_SEQ_RESET,
 | 
				
			||||||
 | 
					                                      sizeof(TMP144_SEQ_RESET)));
 | 
				
			||||||
 | 
					    HAL_Delay(100);
 | 
				
			||||||
    tries++;
 | 
					    tries++;
 | 
				
			||||||
  } while (bus->state == TMP144_RESETTING);
 | 
					  } while (bus->state == TMP144_RESETTING);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bus->state = TMP144_INITIALIZING;
 | 
					  bus->state = TMP144_INITIALIZING;
 | 
				
			||||||
  CHECK_STATUS(HAL_UART_Receive_IT(bus->handle, bus->rxbuf, 3));
 | 
					  CHECK_STATUS(HAL_UART_Receive_DMA(bus->handle, bus->rxbuf, 3));
 | 
				
			||||||
  bus->expected_response_time = HAL_GetTick() + 100;
 | 
					  bus->expected_response_time = HAL_GetTick() + 100;
 | 
				
			||||||
  CHECK_STATUS(HAL_UART_Transmit(bus->handle, TMP144_SEQ_ADDR,
 | 
					  CHECK_STATUS(HAL_UART_Transmit(bus->handle, TMP144_SEQ_ADDR,
 | 
				
			||||||
                                 sizeof(TMP144_SEQ_ADDR), 100));
 | 
					                                 sizeof(TMP144_SEQ_ADDR), 100));
 | 
				
			||||||
@ -134,8 +139,8 @@ HAL_StatusTypeDef tmp144_send_read_temps(TMP144Bus* bus) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  bus->state = TMP144_READING_TEMP;
 | 
					  bus->state = TMP144_READING_TEMP;
 | 
				
			||||||
  CHECK_STATUS(
 | 
					  CHECK_STATUS(
 | 
				
			||||||
      HAL_UART_Receive_IT(bus->handle, bus->rxbuf,
 | 
					      HAL_UART_Receive_DMA(bus->handle, bus->rxbuf,
 | 
				
			||||||
                          sizeof(TMP144_SEQ_READ_TEMPS) + 2 * bus->n_sensors));
 | 
					                           sizeof(TMP144_SEQ_READ_TEMPS) + 2 * bus->n_sensors));
 | 
				
			||||||
  bus->expected_response_time = HAL_GetTick() + TMP144_RESPONSE_TIMEOUT;
 | 
					  bus->expected_response_time = HAL_GetTick() + TMP144_RESPONSE_TIMEOUT;
 | 
				
			||||||
  CHECK_STATUS(HAL_UART_Transmit(bus->handle, TMP144_SEQ_READ_TEMPS,
 | 
					  CHECK_STATUS(HAL_UART_Transmit(bus->handle, TMP144_SEQ_READ_TEMPS,
 | 
				
			||||||
                                 sizeof(TMP144_SEQ_READ_TEMPS), 100));
 | 
					                                 sizeof(TMP144_SEQ_READ_TEMPS), 100));
 | 
				
			||||||
 | 
				
			|||||||
@ -60,6 +60,8 @@ UART_HandleTypeDef huart1;
 | 
				
			|||||||
UART_HandleTypeDef huart2;
 | 
					UART_HandleTypeDef huart2;
 | 
				
			||||||
UART_HandleTypeDef huart3;
 | 
					UART_HandleTypeDef huart3;
 | 
				
			||||||
UART_HandleTypeDef huart6;
 | 
					UART_HandleTypeDef huart6;
 | 
				
			||||||
 | 
					DMA_HandleTypeDef hdma_usart1_rx;
 | 
				
			||||||
 | 
					DMA_HandleTypeDef hdma_usart3_rx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USER CODE BEGIN PV */
 | 
					/* USER CODE BEGIN PV */
 | 
				
			||||||
uint8_t slave_id;
 | 
					uint8_t slave_id;
 | 
				
			||||||
@ -74,8 +76,9 @@ static void MX_I2C1_Init(void);
 | 
				
			|||||||
static void MX_USART1_UART_Init(void);
 | 
					static void MX_USART1_UART_Init(void);
 | 
				
			||||||
static void MX_USART2_UART_Init(void);
 | 
					static void MX_USART2_UART_Init(void);
 | 
				
			||||||
static void MX_USART3_UART_Init(void);
 | 
					static void MX_USART3_UART_Init(void);
 | 
				
			||||||
static void MX_USART6_UART_Init(void);
 | 
					static void MX_DMA_Init(void);
 | 
				
			||||||
static void MX_TIM3_Init(void);
 | 
					static void MX_TIM3_Init(void);
 | 
				
			||||||
 | 
					static void MX_USART6_UART_Init(void);
 | 
				
			||||||
/* USER CODE BEGIN PFP */
 | 
					/* USER CODE BEGIN PFP */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USER CODE END PFP */
 | 
					/* USER CODE END PFP */
 | 
				
			||||||
@ -97,25 +100,35 @@ void update_status_leds() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void check_error_conditions() {
 | 
					void check_error_conditions() {
 | 
				
			||||||
 | 
					  int error = 0;
 | 
				
			||||||
  if (bq_status != BQ_RDY) {
 | 
					  if (bq_status != BQ_RDY) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_BQ, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_BQ, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  tmp144_check_timeouts();
 | 
					  tmp144_check_timeouts();
 | 
				
			||||||
  if (tmp144_bus_busbar.state == TMP144_ERROR ||
 | 
					  if (tmp144_bus_busbar.state == TMP144_ERROR ||
 | 
				
			||||||
      tmp144_bus_other.state == TMP144_ERROR) {
 | 
					      tmp144_bus_other.state == TMP144_ERROR) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_TMP144, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_TMP144, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (min_voltage < THRESH_UV) {
 | 
					  if (min_voltage < THRESH_UV) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_UV, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_UV, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (max_voltage > THRESH_OV) {
 | 
					  if (max_voltage > THRESH_OV) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_OV, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_OV, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (min_temperature < THRESH_UT) {
 | 
					  if (min_temperature < THRESH_UT) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_UT, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_UT, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (max_temperature > THRESH_OT) {
 | 
					  if (max_temperature > THRESH_OT) {
 | 
				
			||||||
    ams_can_send_error(AMS_ERROR_OT, AMS_ERROR_TX_TIMEOUT);
 | 
					    ams_can_send_error(AMS_ERROR_OT, AMS_ERROR_TX_TIMEOUT);
 | 
				
			||||||
 | 
					    error = 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (error) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -164,18 +177,21 @@ int main(void) {
 | 
				
			|||||||
  MX_CAN1_Init();
 | 
					  MX_CAN1_Init();
 | 
				
			||||||
  MX_CAN2_Init();
 | 
					  MX_CAN2_Init();
 | 
				
			||||||
  MX_I2C1_Init();
 | 
					  MX_I2C1_Init();
 | 
				
			||||||
 | 
					  MX_DMA_Init();
 | 
				
			||||||
  MX_USART1_UART_Init();
 | 
					  MX_USART1_UART_Init();
 | 
				
			||||||
  MX_USART2_UART_Init();
 | 
					  MX_USART2_UART_Init();
 | 
				
			||||||
  MX_USART3_UART_Init();
 | 
					  MX_USART3_UART_Init();
 | 
				
			||||||
  MX_USART6_UART_Init();
 | 
					 | 
				
			||||||
  MX_TIM3_Init();
 | 
					  MX_TIM3_Init();
 | 
				
			||||||
 | 
					  MX_USART6_UART_Init();
 | 
				
			||||||
  /* USER CODE BEGIN 2 */
 | 
					  /* USER CODE BEGIN 2 */
 | 
				
			||||||
  HAL_GPIO_WritePin(DCDC_CTRL_GPIO_Port, DCDC_CTRL_Pin, GPIO_PIN_SET);
 | 
					  fan_ctrl_init(&htim3, TIM_CHANNEL_4);
 | 
				
			||||||
  HAL_Delay(100);
 | 
					 | 
				
			||||||
  afe_init(&huart2);
 | 
					 | 
				
			||||||
  eeprom_init(&hi2c1);
 | 
					  eeprom_init(&hi2c1);
 | 
				
			||||||
  eeprom_read_random(EEPROM_ADDR_SLAVE_ID, &slave_id);
 | 
					  eeprom_read_random(EEPROM_ADDR_SLAVE_ID, &slave_id);
 | 
				
			||||||
  fan_ctrl_init(&htim3, TIM_CHANNEL_4);
 | 
					  ams_can_init(&hcan1, &hcan2);
 | 
				
			||||||
 | 
					  HAL_GPIO_WritePin(DCDC_CTRL_GPIO_Port, DCDC_CTRL_Pin, GPIO_PIN_SET);
 | 
				
			||||||
 | 
					  HAL_Delay(100);
 | 
				
			||||||
 | 
					  tmp144_init(&huart1, &huart3);
 | 
				
			||||||
 | 
					  afe_init(&huart2);
 | 
				
			||||||
  /* USER CODE END 2 */
 | 
					  /* USER CODE END 2 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Infinite loop */
 | 
					  /* Infinite loop */
 | 
				
			||||||
@ -390,13 +406,13 @@ static void MX_USART1_UART_Init(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* USER CODE END USART1_Init 1 */
 | 
					  /* USER CODE END USART1_Init 1 */
 | 
				
			||||||
  huart1.Instance = USART1;
 | 
					  huart1.Instance = USART1;
 | 
				
			||||||
  huart1.Init.BaudRate = 115200;
 | 
					  huart1.Init.BaudRate = 57600;
 | 
				
			||||||
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
 | 
					  huart1.Init.WordLength = UART_WORDLENGTH_8B;
 | 
				
			||||||
  huart1.Init.StopBits = UART_STOPBITS_1;
 | 
					  huart1.Init.StopBits = UART_STOPBITS_1;
 | 
				
			||||||
  huart1.Init.Parity = UART_PARITY_NONE;
 | 
					  huart1.Init.Parity = UART_PARITY_NONE;
 | 
				
			||||||
  huart1.Init.Mode = UART_MODE_TX_RX;
 | 
					  huart1.Init.Mode = UART_MODE_TX_RX;
 | 
				
			||||||
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 | 
					  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 | 
				
			||||||
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
 | 
					  huart1.Init.OverSampling = UART_OVERSAMPLING_8;
 | 
				
			||||||
  if (HAL_UART_Init(&huart1) != HAL_OK) {
 | 
					  if (HAL_UART_Init(&huart1) != HAL_OK) {
 | 
				
			||||||
    Error_Handler();
 | 
					    Error_Handler();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -495,6 +511,24 @@ static void MX_USART6_UART_Init(void) {
 | 
				
			|||||||
  /* USER CODE END USART6_Init 2 */
 | 
					  /* USER CODE END USART6_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_Stream1_IRQn interrupt configuration */
 | 
				
			||||||
 | 
					  HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
 | 
				
			||||||
 | 
					  HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
 | 
				
			||||||
 | 
					  /* DMA2_Stream2_IRQn interrupt configuration */
 | 
				
			||||||
 | 
					  HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
 | 
				
			||||||
 | 
					  HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief GPIO Initialization Function
 | 
					 * @brief GPIO Initialization Function
 | 
				
			||||||
 * @param None
 | 
					 * @param None
 | 
				
			||||||
 | 
				
			|||||||
@ -23,6 +23,9 @@
 | 
				
			|||||||
/* USER CODE BEGIN Includes */
 | 
					/* USER CODE BEGIN Includes */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USER CODE END Includes */
 | 
					/* USER CODE END Includes */
 | 
				
			||||||
 | 
					extern DMA_HandleTypeDef hdma_usart1_rx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern DMA_HandleTypeDef hdma_usart3_rx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Private typedef -----------------------------------------------------------*/
 | 
					/* Private typedef -----------------------------------------------------------*/
 | 
				
			||||||
/* USER CODE BEGIN TD */
 | 
					/* USER CODE BEGIN TD */
 | 
				
			||||||
@ -390,6 +393,25 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 | 
				
			|||||||
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
 | 
					    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
 | 
				
			||||||
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | 
					    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* USART1 DMA Init */
 | 
				
			||||||
 | 
					    /* USART1_RX Init */
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Instance = DMA2_Stream2;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_HIGH;
 | 
				
			||||||
 | 
					    hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
 | 
				
			||||||
 | 
					    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      Error_Handler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* USART1 interrupt Init */
 | 
					    /* USART1 interrupt Init */
 | 
				
			||||||
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
 | 
					    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
 | 
				
			||||||
    HAL_NVIC_EnableIRQ(USART1_IRQn);
 | 
					    HAL_NVIC_EnableIRQ(USART1_IRQn);
 | 
				
			||||||
@ -449,6 +471,25 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 | 
				
			|||||||
    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
 | 
					    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
 | 
				
			||||||
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
					    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* USART3 DMA Init */
 | 
				
			||||||
 | 
					    /* USART3_RX Init */
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Instance = DMA1_Stream1;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.Mode = DMA_NORMAL;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
 | 
				
			||||||
 | 
					    hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
 | 
				
			||||||
 | 
					    if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      Error_Handler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    __HAL_LINKDMA(huart,hdmarx,hdma_usart3_rx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* USART3 interrupt Init */
 | 
					    /* USART3 interrupt Init */
 | 
				
			||||||
    HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
 | 
					    HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
 | 
				
			||||||
    HAL_NVIC_EnableIRQ(USART3_IRQn);
 | 
					    HAL_NVIC_EnableIRQ(USART3_IRQn);
 | 
				
			||||||
@ -505,6 +546,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
 | 
				
			|||||||
    */
 | 
					    */
 | 
				
			||||||
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10|GPIO_PIN_15);
 | 
					    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10|GPIO_PIN_15);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* USART1 DMA DeInit */
 | 
				
			||||||
 | 
					    HAL_DMA_DeInit(huart->hdmarx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* USART1 interrupt DeInit */
 | 
					    /* USART1 interrupt DeInit */
 | 
				
			||||||
    HAL_NVIC_DisableIRQ(USART1_IRQn);
 | 
					    HAL_NVIC_DisableIRQ(USART1_IRQn);
 | 
				
			||||||
  /* USER CODE BEGIN USART1_MspDeInit 1 */
 | 
					  /* USER CODE BEGIN USART1_MspDeInit 1 */
 | 
				
			||||||
@ -545,6 +589,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10);
 | 
					    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* USART3 DMA DeInit */
 | 
				
			||||||
 | 
					    HAL_DMA_DeInit(huart->hdmarx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* USART3 interrupt DeInit */
 | 
					    /* USART3 interrupt DeInit */
 | 
				
			||||||
    HAL_NVIC_DisableIRQ(USART3_IRQn);
 | 
					    HAL_NVIC_DisableIRQ(USART3_IRQn);
 | 
				
			||||||
  /* USER CODE BEGIN USART3_MspDeInit 1 */
 | 
					  /* USER CODE BEGIN USART3_MspDeInit 1 */
 | 
				
			||||||
 | 
				
			|||||||
@ -58,6 +58,8 @@
 | 
				
			|||||||
extern CAN_HandleTypeDef hcan1;
 | 
					extern CAN_HandleTypeDef hcan1;
 | 
				
			||||||
extern CAN_HandleTypeDef hcan2;
 | 
					extern CAN_HandleTypeDef hcan2;
 | 
				
			||||||
extern I2C_HandleTypeDef hi2c1;
 | 
					extern I2C_HandleTypeDef hi2c1;
 | 
				
			||||||
 | 
					extern DMA_HandleTypeDef hdma_usart1_rx;
 | 
				
			||||||
 | 
					extern DMA_HandleTypeDef hdma_usart3_rx;
 | 
				
			||||||
extern UART_HandleTypeDef huart1;
 | 
					extern UART_HandleTypeDef huart1;
 | 
				
			||||||
extern UART_HandleTypeDef huart3;
 | 
					extern UART_HandleTypeDef huart3;
 | 
				
			||||||
/* USER CODE BEGIN EV */
 | 
					/* USER CODE BEGIN EV */
 | 
				
			||||||
@ -201,6 +203,20 @@ void SysTick_Handler(void)
 | 
				
			|||||||
/* please refer to the startup file (startup_stm32f4xx.s).                    */
 | 
					/* please refer to the startup file (startup_stm32f4xx.s).                    */
 | 
				
			||||||
/******************************************************************************/
 | 
					/******************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  * @brief This function handles DMA1 stream1 global interrupt.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					void DMA1_Stream1_IRQHandler(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* USER CODE END DMA1_Stream1_IRQn 0 */
 | 
				
			||||||
 | 
					  HAL_DMA_IRQHandler(&hdma_usart3_rx);
 | 
				
			||||||
 | 
					  /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* USER CODE END DMA1_Stream1_IRQn 1 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  * @brief This function handles CAN1 RX0 interrupts.
 | 
					  * @brief This function handles CAN1 RX0 interrupts.
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
@ -271,6 +287,20 @@ void USART3_IRQHandler(void)
 | 
				
			|||||||
  /* USER CODE END USART3_IRQn 1 */
 | 
					  /* USER CODE END USART3_IRQn 1 */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  * @brief This function handles DMA2 stream2 global interrupt.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					void DMA2_Stream2_IRQHandler(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* USER CODE END DMA2_Stream2_IRQn 0 */
 | 
				
			||||||
 | 
					  HAL_DMA_IRQHandler(&hdma_usart1_rx);
 | 
				
			||||||
 | 
					  /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* USER CODE END DMA2_Stream2_IRQn 1 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  * @brief This function handles CAN2 RX0 interrupts.
 | 
					  * @brief This function handles CAN2 RX0 interrupts.
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@ -1,5 +1,5 @@
 | 
				
			|||||||
##########################################################################################################################
 | 
					##########################################################################################################################
 | 
				
			||||||
# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Thu Jun 23 11:54:27 CEST 2022] 
 | 
					# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Fri Jun 24 05:32:32 CEST 2022] 
 | 
				
			||||||
##########################################################################################################################
 | 
					##########################################################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ------------------------------------------------
 | 
					# ------------------------------------------------
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,29 @@ CAN2.CalculateTimeBit=2000
 | 
				
			|||||||
CAN2.CalculateTimeQuantum=125.0
 | 
					CAN2.CalculateTimeQuantum=125.0
 | 
				
			||||||
CAN2.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2
 | 
					CAN2.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2
 | 
				
			||||||
CAN2.Prescaler=2
 | 
					CAN2.Prescaler=2
 | 
				
			||||||
 | 
					Dma.Request0=USART1_RX
 | 
				
			||||||
 | 
					Dma.Request1=USART3_RX
 | 
				
			||||||
 | 
					Dma.RequestsNb=2
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.Instance=DMA2_Stream2
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.Mode=DMA_NORMAL
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.Priority=DMA_PRIORITY_HIGH
 | 
				
			||||||
 | 
					Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.Direction=DMA_PERIPH_TO_MEMORY
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.FIFOMode=DMA_FIFOMODE_DISABLE
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.Instance=DMA1_Stream1
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.MemInc=DMA_MINC_ENABLE
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.Mode=DMA_NORMAL
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.PeriphInc=DMA_PINC_DISABLE
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.Priority=DMA_PRIORITY_LOW
 | 
				
			||||||
 | 
					Dma.USART3_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
 | 
				
			||||||
File.Version=6
 | 
					File.Version=6
 | 
				
			||||||
GPIO.groupedBy=Group By Peripherals
 | 
					GPIO.groupedBy=Group By Peripherals
 | 
				
			||||||
KeepUserPlacement=false
 | 
					KeepUserPlacement=false
 | 
				
			||||||
@ -21,16 +44,17 @@ Mcu.CPN=STM32F412RET6
 | 
				
			|||||||
Mcu.Family=STM32F4
 | 
					Mcu.Family=STM32F4
 | 
				
			||||||
Mcu.IP0=CAN1
 | 
					Mcu.IP0=CAN1
 | 
				
			||||||
Mcu.IP1=CAN2
 | 
					Mcu.IP1=CAN2
 | 
				
			||||||
Mcu.IP10=USART6
 | 
					Mcu.IP10=USART3
 | 
				
			||||||
Mcu.IP2=I2C1
 | 
					Mcu.IP11=USART6
 | 
				
			||||||
Mcu.IP3=NVIC
 | 
					Mcu.IP2=DMA
 | 
				
			||||||
Mcu.IP4=RCC
 | 
					Mcu.IP3=I2C1
 | 
				
			||||||
Mcu.IP5=SYS
 | 
					Mcu.IP4=NVIC
 | 
				
			||||||
Mcu.IP6=TIM3
 | 
					Mcu.IP5=RCC
 | 
				
			||||||
Mcu.IP7=USART1
 | 
					Mcu.IP6=SYS
 | 
				
			||||||
Mcu.IP8=USART2
 | 
					Mcu.IP7=TIM3
 | 
				
			||||||
Mcu.IP9=USART3
 | 
					Mcu.IP8=USART1
 | 
				
			||||||
Mcu.IPNb=11
 | 
					Mcu.IP9=USART2
 | 
				
			||||||
 | 
					Mcu.IPNb=12
 | 
				
			||||||
Mcu.Name=STM32F412R(E-G)Tx
 | 
					Mcu.Name=STM32F412R(E-G)Tx
 | 
				
			||||||
Mcu.Package=LQFP64
 | 
					Mcu.Package=LQFP64
 | 
				
			||||||
Mcu.Pin0=PC0
 | 
					Mcu.Pin0=PC0
 | 
				
			||||||
@ -71,6 +95,8 @@ NVIC.CAN1_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
				
			|||||||
NVIC.CAN2_RX0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
					NVIC.CAN2_RX0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
				
			||||||
NVIC.CAN2_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
					NVIC.CAN2_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
				
			||||||
NVIC.CAN2_SCE_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
					NVIC.CAN2_SCE_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
				
			||||||
 | 
					NVIC.DMA1_Stream1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 | 
				
			||||||
 | 
					NVIC.DMA2_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 | 
				
			||||||
NVIC.DebugMonitor_IRQn=true\:1\:0\:true\:false\:true\:false\:false\:true
 | 
					NVIC.DebugMonitor_IRQn=true\:1\:0\:true\:false\:true\:false\:false\:true
 | 
				
			||||||
NVIC.ForceEnableDMAVector=true
 | 
					NVIC.ForceEnableDMAVector=true
 | 
				
			||||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
 | 
					NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
 | 
				
			||||||
@ -183,7 +209,7 @@ ProjectManager.StackSize=0x400
 | 
				
			|||||||
ProjectManager.TargetToolchain=Makefile
 | 
					ProjectManager.TargetToolchain=Makefile
 | 
				
			||||||
ProjectManager.ToolChainLocation=
 | 
					ProjectManager.ToolChainLocation=
 | 
				
			||||||
ProjectManager.UnderRoot=false
 | 
					ProjectManager.UnderRoot=false
 | 
				
			||||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CAN1_Init-CAN1-false-HAL-true,4-MX_CAN2_Init-CAN2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_USART6_UART_Init-USART6-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true
 | 
					ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CAN1_Init-CAN1-false-HAL-true,4-MX_CAN2_Init-CAN2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_DMA_Init-DMA-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true
 | 
				
			||||||
RCC.CortexFreq_Value=16000000
 | 
					RCC.CortexFreq_Value=16000000
 | 
				
			||||||
RCC.DFSDMFreq_Value=16000000
 | 
					RCC.DFSDMFreq_Value=16000000
 | 
				
			||||||
RCC.FamilyName=M
 | 
					RCC.FamilyName=M
 | 
				
			||||||
@ -212,8 +238,9 @@ TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
 | 
				
			|||||||
TIM3.IPParameters=Channel-PWM Generation4 CH4,Period,Pulse-PWM Generation4 CH4
 | 
					TIM3.IPParameters=Channel-PWM Generation4 CH4,Period,Pulse-PWM Generation4 CH4
 | 
				
			||||||
TIM3.Period=500
 | 
					TIM3.Period=500
 | 
				
			||||||
TIM3.Pulse-PWM\ Generation4\ CH4=0
 | 
					TIM3.Pulse-PWM\ Generation4\ CH4=0
 | 
				
			||||||
USART1.BaudRate=115200
 | 
					USART1.BaudRate=57600
 | 
				
			||||||
USART1.IPParameters=VirtualMode,BaudRate
 | 
					USART1.IPParameters=VirtualMode,BaudRate,OverSampling
 | 
				
			||||||
 | 
					USART1.OverSampling=UART_OVERSAMPLING_8
 | 
				
			||||||
USART1.VirtualMode=VM_ASYNC
 | 
					USART1.VirtualMode=VM_ASYNC
 | 
				
			||||||
USART2.BaudRate=250000
 | 
					USART2.BaudRate=250000
 | 
				
			||||||
USART2.IPParameters=VirtualMode,BaudRate
 | 
					USART2.IPParameters=VirtualMode,BaudRate
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user