以前一直用DMA方式接收数据,今天试了下中断接收方式,简单测试下。
已配置好串口收发模式和NVIC。
初始化
#include "BLUETOOTH.h"
//长度5
uint8_t RxBuf[RxBufSize];
uint8_t RxBLUETOOTH[RxBufSize];
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart==&huart2)
{
//如果接受到开头标志S,则读取后面数据存储至RxBLUETOOTH
//不然保留在RxBuf中,方便查看。
if(RxBuf[0]=='S')
{
//复制
memcpy(RxBLUETOOTH,RxBuf,RxBufSize);
//清空接收缓存
memset(RxBuf,0,sizeof(RxBuf));
}
__HAL_UNLOCK(huart);
HAL_UARTEx_ReceiveToIdle_IT(&huart2,RxBuf,RxBufSize-1);
}
}
这样每一次接受数据都是会重头覆盖读取,不会发生错位问题。当判断完是正确的数据格式后再处理
发送S123
接着发送S1
A 32