关于STM32双机串口通信先后开机结果不同的问题

2019-07-20 07:42发布

本帖最后由 yiweijian 于 2017-8-15 13:45 编辑

关于STM32双机通信的串口的问题,我把发送函数放在主函数无限循环,然后接收机(接收的串口中断是最高优先级)接收,这个时候,有两种情况:
1.先开接收端电源,再开发送端,接到的缓冲区数组整体数据左移了一位
2.先开发送端,再开接收端,数据正确
不断用复位键模拟重新上电一直是这样。

发送端函数:
int main(void)
{        
         
        delay_init();                     //延时函数初始化
        uart1_init(9600);                 //串口初始化为9600         
        uart2_init(9600);        
        NVIC_Configuration();        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        OLED_Init();

        while(1)
        {        
                delay_ms(1000);
                send1();  //发送数据
               
        }

}
void send1()    //每次进来一个12位数据,拆分成低八位和高八位,组合成一个新数组sendbuff用来进行串口发送。注:串口先发的是低八位
{
        u8 n;
        for(n=0;n<9;n++)
     {

                sendbuff[2*n]=(u8)(gather[n]&(0x00ff));
                sendbuff[2*n+1]=(u8)((gather[n]>>8)&(0x00ff));

                USART_SendData(USART1,sendbuff[2*n]);                   //发低位
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);        //等待发送结束        


                USART_SendData(USART1,sendbuff[2*n+1]);                   //发高位`
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);        //等待发送结束        
        }


接收端中断服务函数:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
                {
                        Res =USART_ReceiveData(USART1);        //读取接收到的数据
                        
                        USART_RX_BUF1[l]=Res;       //将数据放入数组
                        l++;
                        
                        if(l==18)                                //发完18个数据
                        {               
                         l=0;                                        //清除长度
                        for(x=0;x<9;x++)
                        receivebuff[x]=(((u16)USART_RX_BUF1[2*x])+(((u16)USART_RX_BUF1[2*x+1])<<8));  //恢复16位数据
                        for(x=0;x<18;x++)
                         USART_RX_BUF1[x]=0;  //清空缓冲区
                        }        
                }


如果是先开接收端,再开发送端,将接收端数组USART_RX_BUF1【】的数据读出来发现整体左移,第一个数据掉到最后一个位置去了




求大神来解决一波,实在没找到好的办法,我在想是不是延时或者的问题

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。