1#include "stm32_spi.hpp"
3#ifdef HAL_SPI_MODULE_ENABLED
7STM32SPI *STM32SPI::map[STM32_SPI_NUMBER] = {
nullptr};
9stm32_spi_id_t STM32_SPI_GetID(SPI_TypeDef *addr)
13 return stm32_spi_id_t::STM32_SPI_ID_ERROR;
16 else if (addr == SPI1)
18 return stm32_spi_id_t::STM32_SPI1;
22 else if (addr == SPI2)
24 return stm32_spi_id_t::STM32_SPI2;
28 else if (addr == SPI3)
30 return stm32_spi_id_t::STM32_SPI3;
34 else if (addr == SPI4)
36 return stm32_spi_id_t::STM32_SPI4;
40 else if (addr == SPI5)
42 return stm32_spi_id_t::STM32_SPI5;
46 else if (addr == SPI6)
48 return stm32_spi_id_t::STM32_SPI6;
52 else if (addr == SPI7)
54 return stm32_spi_id_t::STM32_SPI7;
58 else if (addr == SPI8)
60 return stm32_spi_id_t::STM32_SPI8;
65 return stm32_spi_id_t::STM32_SPI_ID_ERROR;
69extern "C" void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
71 STM32SPI *spi = STM32SPI::map[STM32_SPI_GetID(hspi->Instance)];
73 if (spi->read_buff_.
size_ > 0)
76 SCB_InvalidateDCache_by_Addr(spi->dma_buff_rx_.
addr_, spi->read_buff_.
size_);
80 memcpy(spi->read_buff_.
addr_, spi->dma_buff_rx_.
addr_, spi->read_buff_.
size_);
84 uint8_t *rx_dma_buff =
reinterpret_cast<uint8_t *
>(spi->dma_buff_rx_.
addr_);
85 memcpy(spi->read_buff_.
addr_, rx_dma_buff + 1, spi->read_buff_.
size_);
92extern "C" void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
94 STM32SPI *spi = STM32SPI::map[STM32_SPI_GetID(hspi->Instance)];
void UpdateStatus(bool in_isr, Status &&...status)
Updates operation status based on type.
size_t size_
数据大小(字节)。 The size of the data (in bytes).
void * addr_
数据存储地址。 The storage address of the data.