added missing callbacks

This commit is contained in:
Robin Müller 2021-06-03 14:16:21 +02:00
parent 411d720a41
commit 0d9c3eef4f
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
3 changed files with 156 additions and 121 deletions

View File

@ -49,8 +49,8 @@ void performHardwareInit() {
BSP_Config(); BSP_Config();
} }
void MX_USART3_UART_Init(uint32_t baudRate)
{ void MX_USART3_UART_Init(uint32_t baudRate) {
__HAL_RCC_USART3_CONFIG(RCC_USART3CLKSOURCE_HSI); __HAL_RCC_USART3_CONFIG(RCC_USART3CLKSOURCE_HSI);
__HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_USART3_CLK_ENABLE(); __HAL_RCC_USART3_CLK_ENABLE();

View File

@ -150,7 +150,6 @@ void ETH_IRQHandler(void)
HAL_ETH_IRQHandler(&EthHandle); HAL_ETH_IRQHandler(&EthHandle);
} }
/** /**
* @} * @}
*/ */

View File

@ -9,6 +9,7 @@
DMA_HandleTypeDef* hdma_tx = NULL; DMA_HandleTypeDef* hdma_tx = NULL;
DMA_HandleTypeDef* hdma_rx = NULL; DMA_HandleTypeDef* hdma_rx = NULL;
SPI_HandleTypeDef* spi_handle = NULL;
void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) { void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) {
hdma_tx = txHandle; hdma_tx = txHandle;
@ -16,147 +17,182 @@ void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle) {
} }
/** /**
* @brief SPI MSP Initialization * @brief SPI MSP Initialization
* This function configures the hardware resources used in this example: * This function configures the hardware resources used in this example:
* - Peripheral's clock enable * - Peripheral's clock enable
* - Peripheral's GPIO Configuration * - Peripheral's GPIO Configuration
* - DMA configuration for transmission request by peripheral * - DMA configuration for transmission request by peripheral
* - NVIC configuration for DMA interrupt request enable * - NVIC configuration for DMA interrupt request enable
* @param hspi: SPI handle pointer * @param hspi: SPI handle pointer
* @retval None * @retval None
*/ */
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{ {
GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitTypeDef GPIO_InitStruct;
if(hspi == NULL) {
printf("HAL_SPI_MspInit: Invalid SPI handle!\n");
return;
}
spi_handle = hspi;
if(hdma_tx == NULL || hdma_rx == NULL) { if(hdma_tx == NULL || hdma_rx == NULL) {
printf("HAL_SPI_MspInit: Invalid DMA handles. Make sure to call setDmaHandles!\n"); printf("HAL_SPI_MspInit: Invalid DMA handles. Make sure to call setDmaHandles!\n");
return; return;
} }
if (hspi->Instance == SPI1) if (hspi->Instance == SPI1)
{ {
/*##-1- Enable peripherals and GPIO Clocks #################################*/ /*##-1- Enable peripherals and GPIO Clocks #################################*/
/* Enable GPIO TX/RX clock */ /* Enable GPIO TX/RX clock */
SPIx_SCK_GPIO_CLK_ENABLE(); SPIx_SCK_GPIO_CLK_ENABLE();
SPIx_MISO_GPIO_CLK_ENABLE(); SPIx_MISO_GPIO_CLK_ENABLE();
SPIx_MOSI_GPIO_CLK_ENABLE(); SPIx_MOSI_GPIO_CLK_ENABLE();
/* Enable SPI1 clock */ /* Enable SPI1 clock */
SPIx_CLK_ENABLE(); SPIx_CLK_ENABLE();
/* Enable DMA clock */ /* Enable DMA clock */
DMAx_CLK_ENABLE(); DMAx_CLK_ENABLE();
/*##-2- Configure peripheral GPIO ##########################################*/ /*##-2- Configure peripheral GPIO ##########################################*/
/* SPI SCK GPIO pin configuration */ /* SPI SCK GPIO pin configuration */
GPIO_InitStruct.Pin = SPIx_SCK_PIN; GPIO_InitStruct.Pin = SPIx_SCK_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = SPIx_SCK_AF; GPIO_InitStruct.Alternate = SPIx_SCK_AF;
HAL_GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStruct); HAL_GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStruct);
/* SPI MISO GPIO pin configuration */ /* SPI MISO GPIO pin configuration */
GPIO_InitStruct.Pin = SPIx_MISO_PIN; GPIO_InitStruct.Pin = SPIx_MISO_PIN;
GPIO_InitStruct.Alternate = SPIx_MISO_AF; GPIO_InitStruct.Alternate = SPIx_MISO_AF;
HAL_GPIO_Init(SPIx_MISO_GPIO_PORT, &GPIO_InitStruct); HAL_GPIO_Init(SPIx_MISO_GPIO_PORT, &GPIO_InitStruct);
/* SPI MOSI GPIO pin configuration */ /* SPI MOSI GPIO pin configuration */
GPIO_InitStruct.Pin = SPIx_MOSI_PIN; GPIO_InitStruct.Pin = SPIx_MOSI_PIN;
GPIO_InitStruct.Alternate = SPIx_MOSI_AF; GPIO_InitStruct.Alternate = SPIx_MOSI_AF;
HAL_GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStruct); HAL_GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStruct);
/*##-3- Configure the DMA ##################################################*/ /*##-3- Configure the DMA ##################################################*/
/* Configure the DMA handler for Transmission process */ /* Configure the DMA handler for Transmission process */
hdma_tx->Instance = SPIx_TX_DMA_STREAM; hdma_tx->Instance = SPIx_TX_DMA_STREAM;
hdma_tx->Init.FIFOMode = DMA_FIFOMODE_DISABLE; hdma_tx->Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma_tx->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; hdma_tx->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_tx->Init.MemBurst = DMA_MBURST_INC4; hdma_tx->Init.MemBurst = DMA_MBURST_INC4;
hdma_tx->Init.PeriphBurst = DMA_PBURST_INC4; hdma_tx->Init.PeriphBurst = DMA_PBURST_INC4;
hdma_tx->Init.Request = SPIx_TX_DMA_REQUEST; hdma_tx->Init.Request = SPIx_TX_DMA_REQUEST;
hdma_tx->Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tx->Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_tx->Init.PeriphInc = DMA_PINC_DISABLE; hdma_tx->Init.PeriphInc = DMA_PINC_DISABLE;
hdma_tx->Init.MemInc = DMA_MINC_ENABLE; hdma_tx->Init.MemInc = DMA_MINC_ENABLE;
hdma_tx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_tx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_tx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_tx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_tx->Init.Mode = DMA_NORMAL; hdma_tx->Init.Mode = DMA_NORMAL;
hdma_tx->Init.Priority = DMA_PRIORITY_LOW; hdma_tx->Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(hdma_tx); HAL_DMA_Init(hdma_tx);
/* Associate the initialized DMA handle to the the SPI handle */ /* Associate the initialized DMA handle to the the SPI handle */
__HAL_LINKDMA(hspi, hdmatx, *hdma_tx); __HAL_LINKDMA(hspi, hdmatx, *hdma_tx);
/* Configure the DMA handler for Transmission process */ /* Configure the DMA handler for Transmission process */
hdma_rx->Instance = SPIx_RX_DMA_STREAM; hdma_rx->Instance = SPIx_RX_DMA_STREAM;
hdma_rx->Init.FIFOMode = DMA_FIFOMODE_DISABLE; hdma_rx->Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma_rx->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; hdma_rx->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_rx->Init.MemBurst = DMA_MBURST_INC4; hdma_rx->Init.MemBurst = DMA_MBURST_INC4;
hdma_rx->Init.PeriphBurst = DMA_PBURST_INC4; hdma_rx->Init.PeriphBurst = DMA_PBURST_INC4;
hdma_rx->Init.Request = SPIx_RX_DMA_REQUEST; hdma_rx->Init.Request = SPIx_RX_DMA_REQUEST;
hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_rx->Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE; hdma_rx->Init.PeriphInc = DMA_PINC_DISABLE;
hdma_rx->Init.MemInc = DMA_MINC_ENABLE; hdma_rx->Init.MemInc = DMA_MINC_ENABLE;
hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_rx->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_rx->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_rx->Init.Mode = DMA_NORMAL; hdma_rx->Init.Mode = DMA_NORMAL;
hdma_rx->Init.Priority = DMA_PRIORITY_HIGH; hdma_rx->Init.Priority = DMA_PRIORITY_HIGH;
HAL_DMA_Init(hdma_rx); HAL_DMA_Init(hdma_rx);
/* Associate the initialized DMA handle to the the SPI handle */ /* Associate the initialized DMA handle to the the SPI handle */
__HAL_LINKDMA(hspi, hdmarx, *hdma_rx); __HAL_LINKDMA(hspi, hdmarx, *hdma_rx);
/*##-4- Configure the NVIC for DMA #########################################*/ /*##-4- Configure the NVIC for DMA #########################################*/
/* NVIC configuration for DMA transfer complete interrupt (SPI1_TX) */ /* NVIC configuration for DMA transfer complete interrupt (SPI1_TX) */
HAL_NVIC_SetPriority(SPIx_DMA_TX_IRQn, 1, 1); HAL_NVIC_SetPriority(SPIx_DMA_TX_IRQn, 1, 1);
HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn); HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
/* NVIC configuration for DMA transfer complete interrupt (SPI1_RX) */ /* NVIC configuration for DMA transfer complete interrupt (SPI1_RX) */
HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 1, 0); HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn); HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
/*##-5- Configure the NVIC for SPI #########################################*/ /*##-5- Configure the NVIC for SPI #########################################*/
/* NVIC configuration for SPI transfer complete interrupt (SPI1) */ /* NVIC configuration for SPI transfer complete interrupt (SPI1) */
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0); HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(SPIx_IRQn); HAL_NVIC_EnableIRQ(SPIx_IRQn);
} }
} }
/** /**
* @brief SPI MSP De-Initialization * @brief SPI MSP De-Initialization
* This function frees the hardware resources used in this example: * This function frees the hardware resources used in this example:
* - Disable the Peripheral's clock * - Disable the Peripheral's clock
* - Revert GPIO, DMA and NVIC configuration to their default state * - Revert GPIO, DMA and NVIC configuration to their default state
* @param hspi: SPI handle pointer * @param hspi: SPI handle pointer
* @retval None * @retval None
*/ */
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
{ {
if(hspi->Instance == SPIx) if(hspi->Instance == SPIx)
{ {
/*##-1- Reset peripherals ##################################################*/ /*##-1- Reset peripherals ##################################################*/
SPIx_FORCE_RESET(); SPIx_FORCE_RESET();
SPIx_RELEASE_RESET(); SPIx_RELEASE_RESET();
/*##-2- Disable peripherals and GPIO Clocks ################################*/ /*##-2- Disable peripherals and GPIO Clocks ################################*/
/* Deconfigure SPI SCK */ /* Deconfigure SPI SCK */
HAL_GPIO_DeInit(SPIx_SCK_GPIO_PORT, SPIx_SCK_PIN); HAL_GPIO_DeInit(SPIx_SCK_GPIO_PORT, SPIx_SCK_PIN);
/* Deconfigure SPI MISO */ /* Deconfigure SPI MISO */
HAL_GPIO_DeInit(SPIx_MISO_GPIO_PORT, SPIx_MISO_PIN); HAL_GPIO_DeInit(SPIx_MISO_GPIO_PORT, SPIx_MISO_PIN);
/* Deconfigure SPI MOSI */ /* Deconfigure SPI MOSI */
HAL_GPIO_DeInit(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_PIN); HAL_GPIO_DeInit(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_PIN);
/*##-3- Disable the DMA ####################################################*/ /*##-3- Disable the DMA ####################################################*/
/* De-Initialize the DMA associated to transmission process */ /* De-Initialize the DMA associated to transmission process */
HAL_DMA_DeInit(hdma_tx); HAL_DMA_DeInit(hdma_tx);
/* De-Initialize the DMA associated to reception process */ /* De-Initialize the DMA associated to reception process */
HAL_DMA_DeInit(hdma_rx); HAL_DMA_DeInit(hdma_rx);
/*##-4- Disable the NVIC for DMA ###########################################*/ /*##-4- Disable the NVIC for DMA ###########################################*/
HAL_NVIC_DisableIRQ(SPIx_DMA_TX_IRQn); HAL_NVIC_DisableIRQ(SPIx_DMA_TX_IRQn);
HAL_NVIC_DisableIRQ(SPIx_DMA_RX_IRQn); HAL_NVIC_DisableIRQ(SPIx_DMA_RX_IRQn);
/*##-5- Disable the NVIC for SPI ###########################################*/ /*##-5- Disable the NVIC for SPI ###########################################*/
HAL_NVIC_EnableIRQ(SPIx_IRQn); HAL_NVIC_EnableIRQ(SPIx_IRQn);
} }
}
/**
* @brief This function handles DMA Rx interrupt request.
* @param None
* @retval None
*/
void SPIx_DMA_RX_IRQHandler(void)
{
HAL_DMA_IRQHandler(spi_handle->hdmarx);
}
/**
* @brief This function handles DMA Tx interrupt request.
* @param None
* @retval None
*/
void SPIx_DMA_TX_IRQHandler(void)
{
HAL_DMA_IRQHandler(spi_handle->hdmatx);
}
/**
* @brief This function handles SPIx interrupt request.
* @param None
* @retval None
*/
void SPIx_IRQHandler(void)
{
HAL_SPI_IRQHandler(spi_handle);
} }