关于“中断处理函数、中断回调函数” 的请教

2019-07-20 08:03发布

         下面我把我的问题先说一下:               我的两个板子使用UART通信,对接受的一方来说,采用中断接受方式:每接受1个字节中断一次,接受满一帧再处理数据(每帧包括HEAD1、HEAD2、长度、数据、校验字节)。在每个中断回调函数里面用状态机来实现。代码是在cubeMX生成的,根本没有理会中断处理函数,只需要从写回调函数,处理还比较可靠的。

               做手上这个项目,用了原子哥的F429核心板,也用了他们的程序。再用我的中断回调函数就不行了。

               不知道为什么!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 10:52
 精彩回答 2  元偷偷看……
modu8888
2楼-- · 2019-07-20 11:47
下面是我以前的程序:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{               
        if(UartHandle->Instance==USART3)
        {
                switch (State_Receive)
                {
                        case State_Receive_Head1:
                                if(aRxBuffer[0]==0xAA)
                                        State_Receive=State_Receive_Head2;                                
                                break;
                        case State_Receive_Head2:                        
                                if(aRxBuffer[0]==0x55)
                                        State_Receive=State_Receive_Len;               
                                else if(aRxBuffer[0]==0xAA)
                                        State_Receive=State_Receive_Head2;
                                else
                                        State_Receive=State_Receive_Head1;        
                                break;
                        case State_Receive_Len:
                                if((aRxBuffer[0]==LEN_REC_Error)||(aRxBuffer[0]==LEN_REC_Success)||(aRxBuffer[0]==LEN_REC_DoorOpen)||(aRxBuffer[0]==LEN_REC_Working)||(aRxBuffer[0]==LEN_REC_Idle))
                                {
                                        State_Receive=State_Receive_Data;
                                        Len_Rec=aRxBuffer[0];
                                        Type_Rec=aRxBuffer[0];
                                        Check_Sum=0;
                                }
                                else
                                        State_Receive=State_Receive_Head1;
                                break;
                        case State_Receive_Data:
                                RxBuffer[Type_Rec-Len_Rec]=aRxBuffer[0];
                                Check_Sum^=aRxBuffer[0];
                                Len_Rec--;
                                if(Len_Rec==0)
                                        State_Receive=State_Receive_Check;
                                break;
                        case State_Receive_Check:
                                //if(Check_Sum==aRxBuffer[0])
                                osSemaphoreRelease(bSemRECHandle);                                       
                                State_Receive=State_Receive_Head1;
                                break;
                        default:
                                break;
                }
        }
        HAL_UART_Receive_IT(&huart3,aRxBuffer,1);               
modu8888
3楼-- · 2019-07-20 15:26
 精彩回答 2  元偷偷看……
modu8888
4楼-- · 2019-07-20 17:55
 精彩回答 2  元偷偷看……

一周热门 更多>