/\*\* \* @brief This function handles DMA1 channel4 global interrupt. \*/ void DMA1\_Channel4\_IRQHandler(void) { /\* USER CODE BEGIN DMA1\_Channel4\_IRQn 0 \*/
/\* USER CODE END DMA1\_Channel4\_IRQn 0 \*/ HAL\_DMA\_IRQHandler(&hdma_usart1_tx); /\* USER CODE BEGIN DMA1\_Channel4\_IRQn 1 \*/
/\* USER CODE END DMA1\_Channel4\_IRQn 1 \*/ }
/\*\* \* @brief This function handles DMA1 channel5 global interrupt. \*/ void DMA1\_Channel5\_IRQHandler(void) { /\* USER CODE BEGIN DMA1\_Channel5\_IRQn 0 \*/
/\* USER CODE END DMA1\_Channel5\_IRQn 0 \*/ HAL\_DMA\_IRQHandler(&hdma_usart1_rx); /\* USER CODE BEGIN DMA1\_Channel5\_IRQn 1 \*/
/\* USER CODE BEGIN EV \*/ extern volatile uint8_t rx_len;//Length of data received extern volatile uint8_t recv_end_flag; //Receiving Completion Flag Bit extern uint8_t rx_buffer[RX_DMA_BUFFER_SIZE]; //Data cache array /\* USER CODE END EV \*/ /\*\* \* @brief This function handles USART1 global interrupt. \*/ void USART1\_IRQHandler(void) { /\* USER CODE BEGIN USART1\_IRQn 0 \*/ uint32_t tmp_flag = 0; uint32_t temp; tmp_flag = \_\_HAL\_UART\_GET\_FLAG(&huart1, UART_FLAG_IDLE); if ((tmp_flag != RESET)) { \_\_HAL\_UART\_CLEAR\_IDLEFLAG(&huart1); temp = huart1.Instance->SR; temp = huart1.Instance->DR; HAL\_UART\_DMAStop(&huart1); temp = hdma_usart1_rx.Instance->CNDTR; rx_len = RX_DMA_BUFFER_SIZE - temp; recv_end_flag = 1; } /\* USER CODE END USART1\_IRQn 0 \*/ HAL\_UART\_IRQHandler(&huart1); /\* USER CODE BEGIN USART1\_IRQn 1 \*/
/\* Private define ------------------------------------------------------------\*/ /\* USER CODE BEGIN PD \*/ volatile uint8_t rx_len = 0; //Length of data received volatile uint8_t recv_end_flag = 0; //Acceptance success flag uint8_t rx_buffer[RX_DMA_BUFFER_SIZE]; //Cache array const uint8_t __r_chr[] = { '\r' }; /\* USER CODE END PD \*/
/\* USER CODE BEGIN 4 \*/ int \_write(int fd, char \*ptr, int len);
/\* \* Called by libc stdio fwrite functions \*/ int \_write(int fd, char \*ptr, int len) { int i = 0;
/\* \* write "len" of char from "ptr" to file id "fd" \* Return number of char written. \* \* Only work for STDOUT, STDIN, and STDERR \*/ if (fd > 2) { return -1; }
/\* Reset of all peripherals, Initializes the Flash interface and the Systick. \*/ HAL\_Init();
/\* USER CODE BEGIN Init \*/
/\* USER CODE END Init \*/
/\* Configure the system clock \*/ SystemClock\_Config();
/\* USER CODE BEGIN SysInit \*/
/\* USER CODE END SysInit \*/
/\* Initialize all configured peripherals \*/ MX\_GPIO\_Init(); MX\_DMA\_Init(); MX\_USART1\_UART\_Init(); /\* USER CODE BEGIN 2 \*/
/\* USER CODE END 2 \*/
/\* Infinite loop \*/ /\* USER CODE BEGIN WHILE \*/ while (1) { /\* USER CODE END WHILE \*/
/\* USER CODE BEGIN 3 \*/ if (recv_end_flag == 1) { printf("The length of the received data is %d\r\n", rx_len); HAL\_UART\_Transmit(&huart1, rx_buffer, rx_len, RX_DMA_BUFFER_SIZE); for (uint8_t i = 0; i < rx_len; i++) { rx_buffer[i] = 0; } printf("\r\n"); rx_len = 0; recv_end_flag = 0; } HAL\_UART\_Receive\_DMA(&huart1, rx_buffer, RX_DMA_BUFFER_SIZE); } /\* USER CODE END 3 \*/ }