|
发表于 2021-3-30 17:03:20
|
显示全部楼层
static void MX_DMA_Init(void)
{
HAL_DMA_MuxRequestGeneratorConfigTypeDef dmamux_ReqGenParams;
/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();
hdma_memtomem_dma1_channel1.Instance = DMA1_Channel1;
hdma_memtomem_dma1_channel1.Init.Request = DMA_REQUEST_GENERATOR0;
hdma_memtomem_dma1_channel1.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_memtomem_dma1_channel1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_memtomem_dma1_channel1.Init.MemInc = DMA_MINC_ENABLE;
hdma_memtomem_dma1_channel1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_memtomem_dma1_channel1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma_memtomem_dma1_channel1.Init.Mode = DMA_CIRCULAR;
hdma_memtomem_dma1_channel1.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_memtomem_dma1_channel1) != HAL_OK)
{
Error_Handler( );
}
/* DMA interrupt init */
/* DMA1_Channel1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
/*##-3- Configure and enable the DMAMUX Request generator ####################*/
dmamux_ReqGenParams.SignalID = HAL_DMAMUX1_REQ_GEN_EXTI7; /* External request signal is EXTI7 signal */
dmamux_ReqGenParams.Polarity = HAL_DMAMUX_REQ_GEN_FALLING; /* External request signal edge is falling */
dmamux_ReqGenParams.RequestNumber = 1; /* 1 requests on each edge of the external request signal */
HAL_DMAEx_ConfigMuxRequestGenerator(&hdma_memtomem_dma1_channel1, &dmamux_ReqGenParams);
HAL_DMAEx_EnableMuxRequestGenerator (&hdma_memtomem_dma1_channel1);
/* NVIC configuration for DMAMUX request generator overrun errors*/
HAL_NVIC_SetPriority(DMA1_Ch4_7_DMAMUX1_OVR_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(DMA1_Ch4_7_DMAMUX1_OVR_IRQn);
}
int main(void)
{
uint32_t temp[2]={0,LED4_PIN};
HAL_Init();
SystemClock_Config();
BSP_LED_Init(LED4);
MX_DMA_Init();
/* Reset transferErrorDetected to 0, it will be set to 1 if a transfer error is detected */
transferErrorDetected = 0;
/* Select Callbacks functions called after Transfer complete and Transfer error */
HAL_DMA_RegisterCallback(&hdma_memtomem_dma1_channel1, HAL_DMA_XFER_ERROR_CB_ID, TransferError);
BSP_PB_Init(BUTTON_USER,BUTTON_MODE_EXTI);
if (HAL_DMA_Start_IT(&hdma_memtomem_dma1_channel1, (uint32_t)temp, (uint32_t)&LED4_GPIO_PORT->ODR, 2) != HAL_OK)
{
/* Transfer Error */
Error_Handler();
}
/* Infinite loop */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (transferErrorDetected == 1)
{
/* Toggle LED4 with a period of 200 ms */
//BSP_LED_Toggle(LED4);
transferErrorDetected = 0;
}
}
/* USER CODE END 3 */
}
/**
* @brief This function handles DMA1 channel 1 interrupt.
*/
void DMA1_Ch4_7_DMAMUX1_OVR_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
/* USER CODE END DMA1_Channel1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_memtomem_dma1_channel1);
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
/* USER CODE END DMA1_Channel1_IRQn 1 */
}
/**
* @brief This function handles DMA1_Channel1 interrupt request.
* @param None
* @retval None
*/
void DMA1_Channel1_IRQHandler(void)
{
HAL_DMA_IRQHandler(&hdma_memtomem_dma1_channel1);
}
/* USER CODE BEGIN 1 */
/**
* @brief This function handles external line 4_15 interrupt request.
* @param None
* @retval None
*/
void EXTI4_15_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(USER_BUTTON_PIN);
}
static void TransferError(DMA_HandleTypeDef *hdma_memtomem_dma1_channel1)
{
transferErrorDetected = 1;
}
|
|