OpenEdv-开源电子网

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

新人求助。刚学32不久。有个串口和串口之间通信的问题。

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-12-30
在线时间
1 小时
发表于 2021-12-30 11:40:43 来自手机 | 显示全部楼层 |阅读模式
串口1是串口助手 串口3是蓝牙。图1的两个串口的中断函数可以实现两者互相通信(试过了)。但是有个问题很不解。问题在图二。而且这样写不会一直中断来中断去吗?万分感谢。
mmexport1640833023350.jpg
Screenshot_2021-12-30-10-57-12-055_com.tencent.mm.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2021-12-30 15:12:48 | 显示全部楼层
代码看不清
中断有什么好怕的?
专治疑难杂症
回复 支持 反对

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-12-30 17:32:54 | 显示全部楼层
看不清图片
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-12-30 17:34:36 | 显示全部楼层
中断也是有优先级的 也是个循环过程
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-12-30
在线时间
1 小时
 楼主| 发表于 2021-12-30 21:15:38 | 显示全部楼层
LcwSwust 发表于 2021-12-30 15:12
代码看不清
中断有什么好怕的?

void USART1_IRQHandler()
{

        uint8_t ucTemp;
       
        if (USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
        {
                 
                 ucTemp = USART_ReceiveData( USART1 );
           Usart_SendByte(USART3,ucTemp);
        }
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}

void USART3_IRQHandler()
{
        uint8_t ucTemp;

        if (USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
        {
                ucTemp = USART_ReceiveData( USART3 );  
       
                Usart_SendByte(USART1,ucTemp);               
        }
  USART_ClearITPendingBit(USART3,USART_IT_RXNE);
               
}

这个是代码 串口1和串口3的通信 自己写的能实现互相通信 这个可以吗?我的问题是这样的话假设串口1发送数据给串口3 引发串口3的接收寄存器不为空的中断 串口3中断函数内又把数据发给串口1  不就死循环了吗? 这个新人很不理解。或者是这个代码有问题吗   
main函数就是两个串口的初始化  + whihle(1)
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-12-30
在线时间
1 小时
 楼主| 发表于 2021-12-30 21:16:11 | 显示全部楼层

void USART1_IRQHandler()
{

        uint8_t ucTemp;
       
        if (USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
        {
                 
                 ucTemp = USART_ReceiveData( USART1 );
           Usart_SendByte(USART3,ucTemp);
        }
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}

void USART3_IRQHandler()
{
        uint8_t ucTemp;

        if (USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
        {
                ucTemp = USART_ReceiveData( USART3 );  
       
                Usart_SendByte(USART1,ucTemp);               
        }
  USART_ClearITPendingBit(USART3,USART_IT_RXNE);
               
}

这个是代码 串口1和串口3的通信 自己写的能实现互相通信 这个可以吗?我的问题是这样的话假设串口1发送数据给串口3 引发串口3的接收寄存器不为空的中断 串口3中断函数内又把数据发给串口1  不就死循环了吗? 这个新人很不理解。或者是这个代码有问题吗   
main函数就是两个串口的初始化  + whihle(1)
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-12-30
在线时间
1 小时
 楼主| 发表于 2021-12-30 21:16:56 | 显示全部楼层
远命 发表于 2021-12-30 17:34
中断也是有优先级的 也是个循环过程

void USART1_IRQHandler()
{

        uint8_t ucTemp;
       
        if (USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
        {
                 
                 ucTemp = USART_ReceiveData( USART1 );
           Usart_SendByte(USART3,ucTemp);
        }
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}

void USART3_IRQHandler()
{
        uint8_t ucTemp;

        if (USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
        {
                ucTemp = USART_ReceiveData( USART3 );  
       
                Usart_SendByte(USART1,ucTemp);               
        }
  USART_ClearITPendingBit(USART3,USART_IT_RXNE);
               
}

这个是代码 串口1和串口3的通信 自己写的能实现互相通信 这个可以吗?我的问题是这样的话假设串口1发送数据给串口3 引发串口3的接收寄存器不为空的中断 串口3中断函数内又把数据发给串口1  不就死循环了吗? 这个新人很不理解。或者是这个代码有问题吗   
main函数就是两个串口的初始化  + whihle(1)
回复 支持 反对

使用道具 举报

1

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2020-3-15
在线时间
28 小时
发表于 2021-12-31 09:45:27 | 显示全部楼层
你串口一和串口3得连一起才会循环,芯片内部是没有连一起的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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