野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10536|回复: 8

关于stm32的串口多机通信问题

[复制链接]
发表于 2016-4-5 21:28:20 | 显示全部楼层 |阅读模式
最近在研究stm32的多机通信,就是在电脑上通过一个串口助手发送一个字符给主机的USART1,然后由主机的USART1发送给主机的USART2,再将主机的USART2所接收到的内容发送给从机的USART2,然后再将该字符从从机的USART2发送给从机的USART1,最后打印在另外一个串口助手上,但是从机接收到的和发送的内容总是不一样,有哪位大神告知一下这是怎么回事么?
回复

使用道具 举报

 楼主| 发表于 2016-4-5 21:29:14 | 显示全部楼层
效果就是这样
捕获.PNG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-5 21:30:54 | 显示全部楼层
下面是主机的中断服务子程序
void USART1_IRQHandler(void)
{
        uint8_t num;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=0)
        {
                num=(uint8_t)USART_ReceiveData(USART1);
                USART_SendData(USART2,(uint8_t)num);
        }
}        
然后是从机的
void USART2_IRQHandler(void)
{
        uint8_t ch;
        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=0)
        {
                  ch=(uint8_t)USART_ReceiveData(USART2);
                  USART_SendData(USART1,(uint8_t)ch);
        }
}
回复 支持 反对

使用道具 举报

发表于 2016-4-6 13:07:23 | 显示全部楼层
哥们,不知道你要做啥项目,咋那么绕呢?你的主机是谁?从机又是谁
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-6 15:11:27 | 显示全部楼层
猫和四叶草 发表于 2016-4-6 13:07
哥们,不知道你要做啥项目,咋那么绕呢?你的主机是谁?从机又是谁

没有做什么项目,只是做着玩玩。。。
确实有点绕,主机和从机都是stm32的板子啊,主机的USART1接COM4,从机的USART1接COM5,然后两个板子的USART2用杜邦线连接。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-6 15:12:42 | 显示全部楼层
猫和四叶草 发表于 2016-4-6 13:07
哥们,不知道你要做啥项目,咋那么绕呢?你的主机是谁?从机又是谁

没有做什么项目,只是做着玩玩。。。
确实有点绕,主机和从机都是stm32的板子啊,主机的USART1接COM4,从机的USART1接COM5,然后两个板子的USART2用杜邦线连接。。。
回复 支持 反对

使用道具 举报

发表于 2016-4-6 15:52:56 | 显示全部楼层
Arnold 发表于 2016-4-6 15:12
没有做什么项目,只是做着玩玩。。。
确实有点绕,主机和从机都是stm32的板子啊,主机的USART1接COM4, ...

顶你,小伙子很有想法嘛。你的想法我懂了。电脑首先连接主机的USART1,主机的USART2连接从机的USART2,从机的USART1连接电脑.兄弟你可以这样进行:首先电脑串口给主机USART1发送信息,然后主机USART2把消息返回给电脑串口,这样就知道程序对不对了,从机同理。
我看了你的中断函数,看不出有什么毛病。咱俩USART中断函数有一点点区别,我一般这么写:
void USART2_IRQHandler(void)  
  
{  
     if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET)  
      {      
              USART_SendData(USART1, USART_ReceiveData(USART2));            
      }
      
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-6 20:24:16 | 显示全部楼层
猫和四叶草 发表于 2016-4-6 15:52
顶你,小伙子很有想法嘛。你的想法我懂了。电脑首先连接主机的USART1,主机的USART2连接从机的USART2,从 ...

谢了哈,这个问题解决了,原来是主机少写了一个USART2的中断程序。。。。
回复 支持 反对

使用道具 举报

发表于 2016-4-6 20:26:21 | 显示全部楼层
Arnold 发表于 2016-4-6 20:24
谢了哈,这个问题解决了,原来是主机少写了一个USART2的中断程序。。。。

........有点无语,不过解决了就好
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-29 22:23 , Processed in 0.040474 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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