一、保留接收区和开启接收的语句
uint8_t buffer[5];
HAL_UART_Transmit_IT(&huart1,buffer,3);
二、写入开启空闲中断的语句
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
三、找到串口的中断服务函数(由于HAL库没有提供空闲中断的回调函数,故我们需要在串口的中断服务函数中自己编写)
四、首先我们需要判断一下我们产生的是不是空闲中断,判断语句:
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
{
}
在里面写入清楚中断标志位的语句
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
五、写入停止接收DMA接收的语句
HAL_UART_DMAStop(&huart1);
//然后我们需要计算一下我们输入了多少字节
uint8_t len=3-__HAL_DMA_GET_COUNTER(&huart1.hdmarx);
//然后通过DMA把接收到的数据发送出去
HAL_UART_Transmit_DMA(&huart1,buffer,len);
//然后开启DMA准备第二次的接收
HAL_UART_Receive_DMA(&huart1);
六、编译运行
版权声明:本文为CSDN博主「SUNNAN_66」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SUNNAN_66/article/details/122862096
暂无评论