|

楼主 |
发表于 2024-4-27 18:02:55
|
显示全部楼层
SPI2 DMA读写代码
/*
*********************************************************************************************************
* 函 数 名: DMA1_Stream1_IRQHandler
* 功能说明: DMA1 Stream1中断服务程序
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void SPI2_DMA_WRITE(uint8_t* Addref, uint8_t* pTxBuf, uint16_t tx_len)
{
uint16_t i;
if (tx_len > W5500_SPI_BUFFER_SIZE)
{
return;
}
memset(SPI2_DMA_TxBuff, 0, tx_len + 3);
SPI2_DMA_TxBuff[0] = Addref[0];
SPI2_DMA_TxBuff[1] = Addref[1];
SPI2_DMA_TxBuff[2] = Addref[2];
for(i=0; i<tx_len; i++)
SPI2_DMA_TxBuff[3 + i] = pTxBuf[i];
wTransferState = TRANSFER_WAIT;
W5500_1_CS0();
// SPI2_TransmitReceive_DMA((uint8_t*)SPI2_DMA_TxBuff, (uint8_t *)SPI2_DMA_RxBuff, tx_len+3);
if(HAL_SPI_TransmitReceive_DMA(&hspi2, (uint8_t*)SPI2_DMA_TxBuff, (uint8_t *)SPI2_DMA_RxBuff, tx_len+3) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
while (wTransferState == TRANSFER_WAIT){;}
W5500_1_CS1();
}
void SPI2_DMA_READ(uint8_t* Addref, uint8_t* pRxBuf, uint16_t rx_len)
{
if (rx_len > W5500_SPI_BUFFER_SIZE)
{
return;
}
memset(SPI2_DMA_TxBuff, 0, rx_len + 3);
memset(SPI2_DMA_RxBuff, 0, rx_len + 3);
SPI2_DMA_TxBuff[0] = Addref[0];
SPI2_DMA_TxBuff[1] = Addref[1];
SPI2_DMA_TxBuff[2] = Addref[2];
wTransferState = TRANSFER_WAIT;
W5500_1_CS0();
// SPI2_TransmitReceive_DMA((uint8_t*)SPI2_DMA_TxBuff, (uint8_t *)SPI2_DMA_RxBuff, rx_len+3);
if(HAL_SPI_TransmitReceive_DMA(&hspi2, (uint8_t*)SPI2_DMA_TxBuff, (uint8_t *)SPI2_DMA_RxBuff, rx_len+3) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
while (wTransferState == TRANSFER_WAIT){;}
W5500_1_CS1();
memcpy(pRxBuf, SPI2_DMA_RxBuff + 3, rx_len);
} |
|