/** ****************************************************************************** * @file main.c * @author MCU Application Team * @brief Main program body ****************************************************************************** * @attention * *

© Copyright (c) 2023 Puya Semiconductor Co. * All rights reserved.

* * This software component is licensed by Puya under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** * @attention * *

© Copyright (c) 2016 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private define ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ DMA_HandleTypeDef DmaHandle; uint32_t aSRC_Const_Buffer[BUFFER_SIZE]; /* Data transfer source buffer */ uint32_t aDST_Buffer[BUFFER_SIZE]; /* Data transfer destination buffer */ __IO uint32_t transferCompleteDetected=0; /* When the transmission is complete,the bit set to 1 */ __IO uint32_t transferErrorDetected=0; /* When a transmission error occurs,the bit set to 1 */ __IO uint32_t transferFailedDetected=0; /* When data of transmission error,the bit set to 1 */ /* Private user code ---------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ static void APP_DmaConfig(void); static void APP_TransferComplete(DMA_HandleTypeDef *DmaHandle); static void APP_TransferError(DMA_HandleTypeDef *DmaHandle); static void APP_SystemClockConfig(void); /** * @brief Main program * @retval int */ int main(void) { /* Reset of all peripherals, Initializes the Systick */ HAL_Init(); /* Configure Systemclock */ APP_SystemClockConfig(); /* Initialize LED */ BSP_LED_Init(LED_GREEN); /* Initialize DMA source buffer */ for (uint8_t i = 0; i < BUFFER_SIZE; i++) { aSRC_Const_Buffer[i] = i; } /* Configure DMA */ APP_DmaConfig(); /* Start the DMA Transfer with interrupt enabled. */ if (HAL_DMA_Start_IT(&DmaHandle, (uint32_t)&aSRC_Const_Buffer, (uint32_t)&aDST_Buffer, BUFFER_SIZE) != HAL_OK) { APP_ErrorHandler(); } while (1) { /* DMA transfer complete,but data error */ if(transferFailedDetected == 1 && transferCompleteDetected == 1 ) { while(1) { BSP_LED_Toggle(LED_GREEN); HAL_Delay(500); } } /* DMA transfer complete,and data is correct */ if(transferFailedDetected == 0 && transferCompleteDetected == 1 ) { BSP_LED_On(LED_GREEN); while(1) { } } /* DMA transfer error */ if(transferErrorDetected == 1 ) { BSP_LED_On(LED_GREEN); while(1) { BSP_LED_Toggle(LED_GREEN); HAL_Delay(500); } } } } /** * @brief Configure DMA * @param None * @retval None */ static void APP_DmaConfig(void) { __HAL_RCC_DMA1_CLK_ENABLE(); /*Enable DMA1 clock*/ DmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; /* M2M mode */ DmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; /* Enable peripheral address increment mode */ DmaHandle.Init.MemInc = DMA_MINC_ENABLE; /* Enable Memory address increment mode */ DmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; /* Peripheral data width is 32 bits */ DmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; /* Memory data width is 32 bits */ DmaHandle.Init.Mode = DMA_NORMAL; /* DMA cycle mode off */ DmaHandle.Init.Priority = DMA_PRIORITY_HIGH; /* Channel priority is high */ DmaHandle.Instance = DMA1_Channel1; /* Select DMA channel 1 */ /* DMA initialization */ if (HAL_DMA_Init(&DmaHandle) != HAL_OK) { APP_ErrorHandler(); } /* Select the callback function to call after error transmission and correct transmission */ HAL_DMA_RegisterCallback(&DmaHandle, HAL_DMA_XFER_CPLT_CB_ID, APP_TransferComplete); HAL_DMA_RegisterCallback(&DmaHandle, HAL_DMA_XFER_ERROR_CB_ID, APP_TransferError); /* DMA channel 1 interrupt enable */ HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); } /** * @brief DMA transfer completion function * @param DmaHandle:DMA handle * @retval None */ static void APP_TransferComplete(DMA_HandleTypeDef *DmaHandle) { for(uint16_t i=0 ; i