一、步骤
序号 | 步骤 | 注释 |
---|---|---|
1 | 打开STM32CUBEMX,将uart打开,在DMA Settings里面添加UART2_TX 和 UART2_RX两个DMA通道。还是要打开串口中断:USART2 global interrupt 。 | |
2 | 通过判断接受移位寄存器的状态来判断是否还有数据在传输。当一段时间没有接收到数据后,就会触发串口空闲中断。 | |
3 | 所以在main.c文件的main函数里while(1)函数前调用“不定长接收函数”——不定长接收函数是:HAL_UARTEx_ReceiveToIdle_DMA(&huart2,receive_data,50);其中的“50”是最长接收字节。可以用sizeof(receive_data),取数组所占用的字节数。 | 这个函数会在接收到1/2最大接受长度时,触发下面的回调函数。解决这个过半触发的方法: 1. 更换空闲接收函数——将HAL_UARTEx_ReceiveToIdle_DMA换成HAL_UARTEx_ReceiveToIdle_IT; 2. 关闭过半触发中断:__HAL_DMA_DISABLE_IT(&hdma_usart2_rx,DMA_IT_HT);这个函数在“HAL_UARTEx_ReceiveToIdle_DMA”后调用。 |
4 | 它对应的接收完成回调函数是“HAL_UARTEx_RxEventCallback(&huart,size);” |
二、
序号 | 图片 |
---|---|
没有关过半中断 | ![]() |
关了过半中断 | ![]() |
更换为 HAL_UARTEx_ReceiveToIdle_IT(&huart2, receive_data, sizeof(receive_data));后 | ![]() |