两个stm32f407之间用串口通信的问题

2019-07-20 13:18发布

我用两个stm32f407的之间进行串口通信。通过电脑用串口调试助手发的单片机能收到,电脑也能收到另一个单片机发的,但是用单片机发另一个单片机就不能收到。下面分别附上收、发的部分程序和截图。

发的程序:
iint main(void)
{

        u8 t;
    u8 len;       
        unsigned char a[26]={0x41,0x42,0x43};

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);                //延时初始化
        uart_init(38400);                //串口初始化波特率为38400
        LED_Init();                                  //初始化与LED连接的硬件接口  
        while(1)
        {
               
                for(t=0,len=97;t<3;len++,t++)
                {       
                        a[t]=len;                                                        //对数组a进行赋值,值为a,b,c 的ascii码
                        USART_SendData(USART1,a[t]);                //向串口1发送数组a
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);                //等待发送结束
                        LED0=!LED0;                                                        //每发一次,led亮或灭
                }               
                delay_ms(1000);       
        }
}

发的单片机和串口调试助手之间的通信 发的单片机和串口调试助手之间的通信

收的程序:
int main(void)
{
        unsigned char x=0;
        u8 t;
    u8 len;       
        unsigned char num[26]={0x31,0x32,0x33};
        unsigned char a[26]={65,66,67};
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);      //初始化延时函数
        uart_init(38400);                //初始化串口波特率为38400
       
        LED_Init();                                          //初始化LED
        LCD_Init();           //初始化LCD FSMC接口
        POINT_COLOR=RED;      //画笔颜 {MOD}:红 {MOD}

        while(1)
        {       
                if(USART_RX_STA&0x8000)                //判断是否接收到了数据
                {       
                        LED0=!LED0;                                 //用一个led灯来判断是否收到了数据          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                        for(t=0;t<len;t++)
                        {
                                num[t]=USART_RX_BUF[t];                        //读取串口传来的数据放在数组num里
                                USART_SendData(USART1,a[t]);        //当收到数据,向发送端回馈数组a里的内容
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);        //等待发送完成                                                                       
                        }       
                }
                USART_RX_STA=0;                //将接收状态标记清零
                LCD_ShowString(30,110,200,16,16,num);        //最后用lcd显示收到的数据
                delay_ms(1000);       
        }
} 收的单片机,收到之后反馈给串口的数据 收的单片机,收到之后反馈给串口的数据



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