我自己想通过USART发送接收数据实现两个串口之间的通信

2019-08-23 16:52发布

我想通过USART来实现两个开发板之间的通信,但是显示不对,一直显示是:R    RR   RR   
不知道是什么原因,请教一下大家。
主接收显示代码:
main.c

while(1)
        {                 
               
                POINT_COLOR=RED;          
                x=USART3_Scan();
                if(x)
                {
                       
                                       
                        LCD_ShowString(30,170,200,12,12,"correct");       
                        for(i=0;i<USART_RX_STA;i++)
                        {
                               
                                LCD_ShowString(30+i*8,190,200,12,12,(u8*)RX3_Buff[i]);
                               
                        }USART_RX_STA=0;       
                       
                       
                }else
                {
                        LCD_ShowString(30,210,200,12,12,"receive failed");
                }



串口部分:
u8 RX3_Buff[0xff];


int  USART3_Scan(void)
{
        u16 ftemp=0,i;
        ftemp=USART_RX_STA;
        if(ftemp!=0)
        {
                delay_ms(100);
                while(ftemp!=USART_RX_STA)
                {
                        ftemp=USART_RX_STA;
                        delay_ms(100);
                       
                }
                USART_RX_BUF[ftemp]=' ';
                USART_RX_BUF[ftemp+1]='';
                for(i=0;i<=ftemp+1;i++)
                {
                        RX3_Buff[i]=USART_RX_BUF[i];
                }
               
                return 1;
        }
       
        return 0;
       
}
       


void USART3_IRQHandler(void)                        //串口3中断服务程序
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断
                {
                        Res =USART_ReceiveData(USART3);        //读取接收到的数据
               
                        if(USART_RX_STA<800)//接收未完成
                        {
                                USART_RX_BUF[USART_RX_STA]=Res;
                                USART_RX_STA++;
                        }
                                 
                }
                USART_ClearITPendingBit(USART3,USART_IT_RXNE);
       
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                                                                           
#endif
}
#endif       




从发送部分:

uint8_t Uart1_Put_Char(unsigned char DataToSend)
{
        TxBuffer[count++] = DataToSend;  
  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
        return DataToSend;
}


void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();   
#endif
                if(USART1->SR & USART_IT_ORE)
                {               
                        USART1->SR;
                }
        //发送中断
                if((USART1->SR & (1<<7))&&(USART1->CR1 & USART_CR1_TXEIE))//if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
                {
                        USART1->DR = TxBuffer[TxCounter++]; //写DR清除中断标志
                        if(TxCounter == count)
                        {
                                USART1->CR1 &= ~USART_CR1_TXEIE;                //关闭TXE中断
                                //USART_ITConfig(USART1,USART_IT_TXE,DISABLE);
                        }
               
       
                       
                }
               
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                                                                           
#endif
}


int main(void)
{         
       
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        USART1_Init(115200);
       
                                
          while(1)
        {                 
                Uart1_Put_String("Welcome ");
                Uart1_Put_String("to ");

        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-08-23 16:58
 精彩回答 2  元偷偷看……
arao和xiaomi
2楼-- · 2019-08-23 18:34
求大神帮解答一下呀,这个弄了好长时间,对那个发送和接收的设置不是很懂,特别是怎样确定接收了多少个字节的数据,然后怎样把接收到的数据取出来
godsend
3楼-- · 2019-08-23 23:24
楼主换个靠谱点的TTL转RS232芯片吧
arao和xiaomi
4楼-- · 2019-08-23 23:52
正点原子 发表于 2017-3-21 10:29
先搞懂简单的。你现在的能力,还不能写这个代码。
建议学习我们串口实验,学懂了先(现在不要告诉我你学懂 ...

今天中午再学了一遍原子哥的例程,这次真的看懂了,就是需要判断是否接受到了0x0d和0x0a这两个字符
arao和xiaomi
5楼-- · 2019-08-24 05:43
godsend 发表于 2017-3-21 17:21
楼主换个靠谱点的TTL转RS232芯片吧

谢谢,我用的是那个开发板,应该没问题吧
arao和xiaomi
6楼-- · 2019-08-24 07:33
 精彩回答 2  元偷偷看……

一周热门 更多>