在 DMA 中接收 UART 消息
Receive UART messages in DMA
我正在尝试在 STM32L432KCU 上以 DMA 模式接收消息。引脚 PA2 和 PA3 配置为 DMA 引脚。波特率为 115200,USART2 的全局中断已打开。在主函数中,我有外设的初始化:
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_DMA_Init();
,后面是开启DMA空闲接收模式和禁止半传输中断的函数:
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
我这里有回调:
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
if(huart->Instance == USART2){
memcpy(mainbuff, UART2_rxBuffer, Size);
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
}
}
它检查是否从第二个 uart 接收到消息,然后将其复制到存储所有数据的主缓冲区中。再次启用接收并禁用半传输中断。不幸的是,当我尝试调试时,回调中的断点永远不会被击中。我也尝试显示消息。它没有用。什么可能导致此问题?
尝试更改初始化程序的顺序。
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();
在使用 UART 之前需要初始化 DMA。
我正在尝试在 STM32L432KCU 上以 DMA 模式接收消息。引脚 PA2 和 PA3 配置为 DMA 引脚。波特率为 115200,USART2 的全局中断已打开。在主函数中,我有外设的初始化:
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_DMA_Init();
,后面是开启DMA空闲接收模式和禁止半传输中断的函数:
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
我这里有回调:
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
if(huart->Instance == USART2){
memcpy(mainbuff, UART2_rxBuffer, Size);
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, UART2_rxBuffer, 12);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
}
}
它检查是否从第二个 uart 接收到消息,然后将其复制到存储所有数据的主缓冲区中。再次启用接收并禁用半传输中断。不幸的是,当我尝试调试时,回调中的断点永远不会被击中。我也尝试显示消息。它没有用。什么可能导致此问题?
尝试更改初始化程序的顺序。
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();
在使用 UART 之前需要初始化 DMA。