stm32接收一段字符串帮忙看看代码有没什么问题

2019-07-14 13:32发布

申明下:我发的字符串格式是这样的:    “F0AF”
两个‘F’是用来判断数据的正确性的   ‘A’这个数据就是我需要的。求人帮忙!!!谢谢!!
void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        int i=0;
        if(USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是‘F’,'F'结尾)
                {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);     //清除中断标志        
                USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
                Usart1_Rx_Num++;}
                //判断数据的正确性
                if((USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
                         USART_RX_STA=1;//接收标志位
               
                if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)//清除溢出错误标志位
                {
                        USART_ClearFlag(USART1,USART_FLAG_ORE);//清除
                        USART_ReceiveData(USART2);//读DR
                }
                if(USART_RX_STA)
                        {                   switch (USART_RX_BUF[2])        {
                                                                case 0x41:run();break;
                                                                case 0x42:right();break;
                                                                case 0x43:left();break;
                                                                case 0x44:back();break;                }

                for(;i
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Sabrina_cc
1楼-- · 2019-07-15 22:13
//判断数据的正确性
    if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
    {
        USART_RX_STA = 1;    //接收标志位
    }
修改为
    //判断数据的正确性
    if (Usart1_Rx_Num > 2)
    {
        if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
        {
            USART_RX_STA = 1;    //接收标志位
        }
    }
爱雪爱雪
2楼-- · 2019-07-16 01:57
首先你应该说明下你这段程序在板子上跑,现象是什么?
你可以连上仿真器设个断点看看,能不能收到数据,数据个数对不对,然后在考虑后面的比较问题
maruidiyi
3楼-- · 2019-07-16 06:30
 精彩回答 2  元偷偷看……
miaoye
4楼-- · 2019-07-16 10:08
USART_ClearFlag(USART1,USART_FLAG_ORE);//清除
                        USART_ReceiveData(USART2);//读DR
楼主你使用的USART1,读的怎么是USART2的数据
人中狼
5楼-- · 2019-07-16 13:20
中断最好是只接收数据,对数据包的判断放到中断外,数据包结构最好改改,头尾两个字符不要是一样的,不然连发两个数据包就无法分辨包头包尾了。

一周热门 更多>