串口空闲中断收发不定长字节数据

一、步骤

序号步骤注释
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));后在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值