OpenEdv-开源电子网

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

[战舰F103] 分享:战舰一个串口发送一个串口接收,串口互发互收

[复制链接]

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-12-4 18:42:51 | 显示全部楼层 |阅读模式
本帖最后由 1208 于 2019-8-10 15:52 编辑

注意:仿真器要拔掉,不然会影响到复位脚
需要通过USB转TTL模块,RXD对应PA2(TX),TXD对应PA3(RX)

1)串口1通过中断函数,接收到数据
void USART1_IRQHandler(void)  
{
Res = USART_ReceiveData(USART1);
}

2)串口2通过串口1中断接收的数据,并在串口2上发送
void USART2_IRQHandler(void) // 串口2中断服务函数
{
    u8 res;
    if(USART_GetITStatus(USART1,USART_IT_RXNE)) //
   {
     res= USART_ReceiveData(USART1);  // 接收到中断1的数据
     USART_SendData(USART2,res);   // 串口2 发送
  }
}

3)为了显示在串口2的屏幕上
   if(USART_RX_STA&0x8000)
        {                       
            len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
            printf("\r\n您发送的消息为:\r\n\r\n");
            for(t=0;t<len;t++)
            {
                USART_SendData(USART2, USART_RX_BUF[t]);       //向串口2发送数据
                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); //等待发送结束
            }
            printf("\r\n\r\n");//插入换行
            USART_RX_STA=0;
            
        }else
4)串口1发送串口接收,串口2接收发送到串口1
void USART2_IRQHandler(void) // 串口2中断服务函数
{
    u8 res,r;
    if(USART_GetITStatus(USART1,USART_IT_RXNE)) //
   {
     res= USART_ReceiveData(USART1);  // 接收到中断1的数据
     USART_SendData(USART2,res);   // 串口2 发送
     r= USART_ReceiveData(USART2);     //接收数据
     USART_SendData(USART1,r);   // 串口1 发送     
   }
}
5)两个串口互发互收
void USART2_IRQHandler(void)

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
        Res =USART_ReceiveData(USART2);    //读取接收到的数据
        USART_SendData(USART1,Res);
}
void USART1_IRQHandler(void)

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
        Res = USART_ReceiveData(USART1);                                 //读取接收到的数据
        USART_SendData(USART2,Res);

}

实验效果验证

    串口.jpg    

战舰: 串口1发送串口2接收.zip

2.58 MB, 下载次数: 149

战舰: 串口1发送串口2接收,串口2接收发送到串口1.zip

2.72 MB, 下载次数: 101

战舰: 串口1和串口2互发互收.zip

2.71 MB, 下载次数: 160

探索者:发什么数据就接收什么数据.zip

10.55 MB, 下载次数: 141

业精于勤荒于嬉;行成于思毁于随!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-4-9 20:13:26 | 显示全部楼层
[mw_shl_code=c,true]    u8 buff[]="test";         
    u16 t;  
    while(1)
{
                        for(t=0;t<sizeof(buff);t++)
                        {
                                USART_SendData(USART1, buff[t]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                                delay_ms(10);
                        }
                        printf("\r\n\r\n");//插入换行
                        USART_RX_STA=0;
}[/mw_shl_code]

串口字符串的打印.zip

2.69 MB, 下载次数: 18

业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2018-8-16
在线时间
25 小时
发表于 2019-7-31 10:42:31 | 显示全部楼层
顶。。。。。。。。。。。。。。。。。。6
回复 支持 反对

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-8-10 15:16:24 | 显示全部楼层
1.战舰: 串口1发送串口2接收.zip  :这个程序要求有一个战舰/精英板子和一个USB转TTL模块。USB转TTL模块的TXD ,RXD分别接PA3,PA2。实现的功能是:串口调试助手1发数据给串口1,串口1收到数据后将接收到的数据发给串口2,这时候经过接串口2的USB转TTL会输出数据到串口调试助手2上

2.战舰: 串口1和串口2互发互收.zip:这个程序要求有一个战舰/精英板子和一个USB转TTL模块。SB转TTL模块的TXD ,RXD分别接PA3,PA2。实现的功能是:串口调试助手1发数据给串口1,串口1收到数据后将接收到的数据发给串口2,这时候串口助手2显示来自串口助手1的数据。同样串口助手2发数据给串口2,串口助手1会显示来自串口助手2的数据

3.探索者:发什么数据就接收什么数据.zip:这个程序实现的功能与探索者的串口实验例程功能一样
回复 支持 反对

使用道具 举报

5

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2022-2-21
在线时间
10 小时
发表于 2022-4-2 19:42:03 | 显示全部楼层
这个例子怎么才能同时用两个串口助手啊?接两个usb线到电脑吗?
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2022-3-4
在线时间
62 小时
发表于 2022-6-7 10:28:36 | 显示全部楼层
请问只用到一块单片机的情况下能做到串口互相收发吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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