考了H7的示例修改G0的,但没实现功能
代码配置
DMA
sta
tic void MX_DMA_Init(void)
{
/* 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();
}
/* Select Callbacks functions called after Transfer complete and Transfer error */
//HAL_DMA_RegisterCallback( hdma_memtomem_dma1_channel1, HAL_DMA_XFER_CPLT_CB_ID, TransferComplete);
HAL_DMA_RegisterCallback( hdma_memtomem_dma1_channel1, HAL_DMA_XFER_ERROR_CB_ID, TransferError);
/* DMA interrupt init */
/* DMA1_Channel1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
/*##-3- Configure and enable the DMAMUX Request generator ####################*/
dmamux_ReqGenParams.SignalID =
HAL_DMAMUX1_REQ_GEN_EXTI0; /* External request signal is EXTI0 signal */
dmamux_ReqGenParams.Polarity = HAL_DMAMUX_REQ_GEN_FALLING;//HAL_DMAMUX_REQ_GEN_RISING; /* 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);
/* NVIC configuration for DMAMUX request generator overrun errors*/
HAL_NVIC_SetPriority(DMA1_Ch4_7_DMAMUX1_OVR_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(DMA1_Ch4_7_DMAMUX1_OVR_IRQn);
}
外部中断口PA0配置
static void EXTI_IRQHandler_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOC clock */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* Configure PA.0 pin as input floating */
GPIO_InitStructure.Mode =
GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_0;
HAL_GPIO_Init(GPIOA, GPIO_InitStructure);
// HAL_NVIC_SetPriority(EXTI0_1_IRQn, 3, 0);
// HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
}
主函数调用
MX_DMA_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/* Reset transferErrorDetected to 0, it will be set to 1 if a transfer error is detected */
transferErrorDetected = 0;
/* Reset transferCompleteDetected to 0, it will be set to 1 if a transfer is correctly completed */
transferCompleteDetected = 0;
HAL_DMAEx_EnableMuxRequestGenerator ( hdma_memtomem_dma1_channel1);
EXTI_IRQHandler_Config();
if (HAL_DMA_Start_IT( hdma_memtomem_dma1_channel1, (uint32_t) g_uitemp[0], (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;
}
if (transferCompleteDetected == 1)
{
/* Turn LED4 on*/
//BSP_LED_On(LED4);
transferCompleteDetected = 0;
}
}
/* USER CODE END 3 */