STM32
直播中

李杰

7年用户 1326经验值
私信 关注
[问答]

STM32串口接收数据处理方法是什么

STM32串口接收数据处理方法是什么

回帖(1)

刘颖

2021-12-3 14:06:24
STM32串口接收定长数据的处理方法非常简单,我目前做项目都是用的这个,也可用做处理MODBUS协议,直接上代码。

void USART1_IRQHandler(void)                        //串口1中断服务程序
{
        u8 Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);     //清中断
                Res =USART_ReceiveData(USART1);        //读取接收到的数据
                switch(USARTReceIn)
                {
                        case 0:
                                if((Res==SW_ID)||(Res==255))
                                        USARTReceBuff[USARTReceIn++] = Res;
                                else
                                        USARTReceIn = 0;
                                break;
               
                        default:
                                USARTReceBuff[USARTReceIn++] = Res;
                                break;
                }
                if(USARTReceIn >= 8)
                {
                        USARTReceFullFlag = 1;         
                }
     }
}
执行逻辑解释

首先定义一个全局变量接收完成标志位USARTReceFullFlag,假如我需要接收数据长度是8,那么在串口中断接收到数据长度>=8时,就让这个标志位置1,也可在串口中断函数中判断接收到的数据头。
然后在其他地方执行时,直接判断标志位,进行处理相关内容,注意:需要把标志位和接收序列清零。

if(USARTReceFullFlag)
{
        if((USARTReceBuff[2] == 0x01)&&(USARTReceBuff[6] == 0xcc)&&(USARTReceBuff[7] == 0xdd))
        {
                Play_Choice_voice(0x01);
        }
        USARTReceFullFlag = 0;
        USARTReceIn = 0;
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分