1.开启串口空闲中断
2.开启串口DMA接收
3.编写空闲中断函数,放入串口中断void USART1_IRQHandler(void)中
4.调用接收到的数据
用了两个方法,主要是缓存区定义的数组不同,其中例子可以直接下载
//切记切记要在实验板上测试,不能用软件仿真
//***方法1***--------------------------------------------
//main.c
uint8_t receive_buff[BUFFER_SIZE];
//usart.c
extern uint8_t receive_buff[BUFFER_SIZE]; //接收缓冲区
void MX_USART1_UART_Init(void)
{
// ........
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1, (uint8_t*)receive_buff, BUFFER_SIZE);
}
/* USER CODE BEGIN 1 */
//只能接受BUFFER_SIZE-1个字符
void USAR_UART_IDLECallback(UART_HandleTypeDef *huart)
{
HAL_UART_DMAStop(&huart1);
i++;
uint8_t data_length = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx