OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5046|回复: 6

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

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-16
在线时间
5 小时
发表于 2017-7-16 10:49:37 | 显示全部楼层 |阅读模式
1金钱
我用两个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;      //画笔颜色:红色

        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);       
        }
}

收的单片机,收到之后反馈给串口的数据

收的单片机,收到之后反馈给串口的数据




最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-16
在线时间
5 小时
 楼主| 发表于 2017-7-16 10:49:38 | 显示全部楼层
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-16
在线时间
5 小时
 楼主| 发表于 2017-7-16 10:51:54 | 显示全部楼层
这是每个单片机分别与电脑串口调试助手的通信,很正常,但是单片机与单片机之间就不通了,什么原因呐,求大神解惑
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2016-5-27
在线时间
48 小时
发表于 2017-7-16 19:00:03 | 显示全部楼层
两个单片机之间共地了么
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-16
在线时间
5 小时
 楼主| 发表于 2017-7-17 10:00:34 | 显示全部楼层
brother 发表于 2017-7-16 19:00
两个单片机之间共地了么

我之前用的两个zigbee接串口通信,不存在共不共地吧。后来用串口线连两个单片机也共了地,和之间一样没反应。只有发没有收,那个判断usart_rx_sta&0x8000那句话始终进不去。
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-1-19
在线时间
44 小时
发表于 2017-7-17 17:18:29 | 显示全部楼层
你调试下,有没有进入中断
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-16
在线时间
5 小时
 楼主| 发表于 2017-7-18 10:26:52 | 显示全部楼层
samglz 发表于 2017-7-17 17:18
你调试下,有没有进入中断

找到了,例程里的第14,15位是0x0d和0x0a,我只发了仨数,没有后面的,所以收不到。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-19 00:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表