|

楼主 |
发表于 2024-9-23 09:22:35
|
显示全部楼层
初始化DMA
/* Configure DMA request hdma_dma_generator0 on DMA1_Stream1 */
hdma_dma_generator0.Instance = DMA1_Stream1;
hdma_dma_generator0.Init.Request = DMA_REQUEST_GENERATOR0;
hdma_dma_generator0.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_dma_generator0.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_dma_generator0.Init.MemInc = DMA_MINC_ENABLE;
hdma_dma_generator0.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_dma_generator0.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_dma_generator0.Init.Mode = DMA_NORMAL;
hdma_dma_generator0.Init.Priority = DMA_PRIORITY_LOW;
hdma_dma_generator0.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_dma_generator0) != HAL_OK)
{
Error_Handler();
}
/* Configure the DMAMUX request generator for the selected DMA stream */
pRequestGeneratorConfig.SignalID = HAL_DMAMUX1_REQ_GEN_EXTI0;
pRequestGeneratorConfig.Polarity = HAL_DMAMUX_REQ_GEN_FALLING;
pRequestGeneratorConfig.RequestNumber = 12;
if (HAL_DMAEx_ConfigMuxRequestGenerator(&hdma_dma_generator0, &pRequestGeneratorConfig) != HAL_OK)
{
Error_Handler();
}
//使能DMA MUX 和SPI与DMA的关联
void drv_exp_adc_sync_init(void)
{
MODIFY_REG(hspi2.Instance->CR2, SPI_CR2_TSIZE, 12);
SET_BIT(hspi2.Instance->CFG1, SPI_CFG1_TXDMAEN); //使能发送DMA请求
__HAL_SPI_ENABLE(&hspi2);
SET_BIT(hspi2.Instance->CR1, SPI_CR1_CSTART);
HAL_DMAEx_EnableMuxRequestGenerator (&hdma_dma_generator0); /* 使能DMAMUX请求发生器 */
HAL_DMA_RegisterCallback(&hdma_dma_generator0,HAL_DMA_XFER_CPLT_CB_ID,bdma_pCallback);
}
//启动dma
void start_exp_adc_sync(uint8_t *pdat, uint32_t number, void(*pCtFunc)(void))
{
pcb_read_complete = pCtFunc;
HAL_DMA_Start(&hdma_dma_generator0,(uint32_t)spi2_tx_buffer,(uint32_t)&(GPIOF->ODR),SPI_PEAK_LEN);
}
|
|