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