新增BLE接收,DMA空闲中断

This commit is contained in:
2025-06-09 11:04:36 +08:00
parent a502e81566
commit d963a10872
30 changed files with 6529 additions and 4406 deletions

View File

@@ -22,6 +22,7 @@
#include "stm32h5xx_it.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "headfile.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -55,6 +56,10 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern DMA_NodeTypeDef Node_GPDMA1_Channel5;
extern DMA_QListTypeDef List_GPDMA1_Channel5;
extern DMA_HandleTypeDef handle_GPDMA1_Channel5;
extern DMA_HandleTypeDef handle_GPDMA1_Channel4;
extern UART_HandleTypeDef huart1;
extern TIM_HandleTypeDef htim1;
@@ -160,6 +165,34 @@ void DebugMon_Handler(void)
/* please refer to the startup file (startup_stm32h5xx.s). */
/******************************************************************************/
/**
* @brief This function handles GPDMA1 Channel 4 global interrupt.
*/
void GPDMA1_Channel4_IRQHandler(void)
{
/* USER CODE BEGIN GPDMA1_Channel4_IRQn 0 */
/* USER CODE END GPDMA1_Channel4_IRQn 0 */
HAL_DMA_IRQHandler(&handle_GPDMA1_Channel4);
/* USER CODE BEGIN GPDMA1_Channel4_IRQn 1 */
/* USER CODE END GPDMA1_Channel4_IRQn 1 */
}
/**
* @brief This function handles GPDMA1 Channel 5 global interrupt.
*/
void GPDMA1_Channel5_IRQHandler(void)
{
/* USER CODE BEGIN GPDMA1_Channel5_IRQn 0 */
/* USER CODE END GPDMA1_Channel5_IRQn 0 */
HAL_DMA_IRQHandler(&handle_GPDMA1_Channel5);
/* USER CODE BEGIN GPDMA1_Channel5_IRQn 1 */
/* USER CODE END GPDMA1_Channel5_IRQn 1 */
}
/**
* @brief This function handles TIM1 Update interrupt.
*/
@@ -184,7 +217,21 @@ void USART1_IRQHandler(void)
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
uint16_t len = UART_DMA_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
for(uint16_t i = 0;i < len; i++)
{
ble_rx_ring.buffer[ble_rx_ring.head] = uart_dma_rx_buf[i];
ble_rx_ring.head = (ble_rx_ring.head + 1) %RING_BUFFER_SIZE;
}
HAL_UART_AbortReceive(&huart1); //ֹͣ<CDA3><D6B9>ǰDMA
HCBle_InitDMAReception();
}
/* USER CODE END USART1_IRQn 1 */
}