找回密码
 立即注册
查看: 106|回复: 8

遇到一个串口2和串口1互相影响的问题【已解决】

[复制链接]
  • TA的每日心情
    慵懒
    2024-4-12 08:51
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    6

    回帖

    93

    积分

    注册会员

    积分
    93
    发表于 2024-4-11 09:46:50 | 显示全部楼层 |阅读模式
    本帖最后由 STCAI-32位8051 于 2024-4-12 14:36 编辑

    我使用的单片机是STC8H1K08
    内存编译后情况如下
    Program Size: data=9.2 xdata=606 const=0 code=6498

    我的代码基本功能就是接受串口2的数据,然后进行和校验,校验通过后通过串口1输出数据
    代码如下


    1. u8 Co2Analysis(void)
    2. {
    3.   u8 i,check;
    4.   u16 CO2_PPM;
    5.       
    6.   if(COM2.RX_TimeOut > 0)                //超时计数
    7.   {
    8.     if(--COM2.RX_TimeOut == 0)
    9.     {
    10.       if(COM2.RX_Cnt > 0)
    11.       {
    12.          check = FunCheckSum(RX2_Buffer,9); //收到的数据进行校验
    13.          
    14.          
    15.          if(check == RX2_Buffer[8])//如果校验通过就通过串口1 输出数据
    16.          {
    17.             CO2_PPM = RX2_Buffer[4]*256+RX2_Buffer[5];
    18.             /**/
    19.             RS485_MODE_TX;
    20.             RX1_Buffer[0] = CO2_PPM>>8;
    21.             RX1_Buffer[1] = CO2_PPM&0xFF;
    22.             for(i=0; i<2; i++)      
    23.             {
    24.                     TX1_write2buff(RX1_Buffer[i]);        //使用串口1发送数据
    25.             }
    26.             delay_ms(100);
    27.             /**/
    28.          }
    29.          /**问题代码块**/
    30.                                 //使用串口2发送数据
    31. //      for(i=0; i<COM2.RX_Cnt; i++)        
    32. //      {        
    33. //          TX2_write2buff(RX2_Buffer[i]);        //收到的数据原样返回
    34. //     }
    35.         /**问题代码块**/        
    36.           }
    37.           COM2.RX_Cnt = 0;
    38.     }
    39.   }
    40.   return 0;
    41. }
    复制代码

    现在遇到的问题就是,
    1、如果屏蔽掉问题代码块,那么串口1就不会有数据输出
    2、如果不屏蔽问题代码块,即使进行和校验判断,那么串口1也会正常输出数据
    3、如果屏蔽掉问题代码块,也屏蔽掉“if(check == RX2_Buffer[8])//如果校验通过就通过串口1 输出数据”,这个和校验判断,串口1也会正常输出数据
    问题代码块也就是一个串口2的数据输出,似乎影响到了RX2_Buffer里面的数据,
    现在搞不明白,请大家指导


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 08:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    7

    主题

    37

    回帖

    251

    积分

    等待验证会员

    积分
    251
    发表于 2024-4-11 10:55:26 | 显示全部楼层
    先调整一下代码:TXx_write2buff(RXx_Buffer);加一个下标TXx_write2buff(RXx_Buffer[i]);然后再调试
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-12 08:51
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    6

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2024-4-11 11:25:03 | 显示全部楼层
    本帖最后由 Dwyer 于 2024-4-11 11:27 编辑
    55337575 发表于 2024-4-11 10:55
    先调整一下代码:TXx_write2buff(RXx_Buffer);加一个下标TXx_write2buff(RXx_Buffer);然后再调试 ...

    这个应该是有的
    TX1_write2buff(RX1_Buffer);        //使用串口1发送数据
    编辑状态下有,发送出来就没有了,应该是网站问题

    我重新用代码的模块编辑了一下
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-24 13:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    8

    主题

    623

    回帖

    1034

    积分

    超级版主

    积分
    1034
    发表于 2024-4-11 13:11:00 | 显示全部楼层
    本帖最后由 STCAI-32位8051 于 2024-4-11 13:13 编辑

    用STC8H串口例程测试下


    截图202404111310565662.jpg

    STC8H系列-串口相关程序.rar

    342.35 KB, 下载次数: 1

    STC官网:https://www.stcai.com/
    QQ:2593903262
    微信号:18106296598
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-12 08:51
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    6

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2024-4-11 13:29:02 | 显示全部楼层
    本帖最后由 Dwyer 于 2024-4-11 14:56 编辑
    STCAI-32位8051 发表于 2024-4-11 13:11
    用STC8H串口例程测试下

    版主你好,感谢回复,我用例程跑过,串口1和2全部正常,现在我是删除了一些其他功能的代码,只跑串口那部分,也不正常,我想请问代码量的多少会影响程序导致一些意外状况吗?目前我串口用的是库函数的那个例程去写的。
    删减后的代码,编译大小是
    Program Size: data=9.2 xdata=558 const=0 code=4141

    更正一下,删减程序后还是不正常

    点评

    异常的情况就放慢速度,加几个nop  详情 回复 发表于 2024-4-11 14:22
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-24 09:28
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    569

    回帖

    1854

    积分

    超级版主

    积分
    1854
    QQ
    发表于 2024-4-11 14:22:31 | 显示全部楼层
    Dwyer 发表于 2024-4-11 13:29
    版主你好,感谢回复,我用例程跑过,串口1和2全部正常,现在我是删除了一些其他功能的代码,只跑串口那部 ...

    异常的情况就放慢速度,加几个nop
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-12 08:51
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    6

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2024-4-11 14:49:28 | 显示全部楼层
    国学芯用 发表于 2024-4-11 14:22
    异常的情况就放慢速度,加几个nop

    nop 是要加在哪个地方?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 02:02
  • 签到天数: 68 天

    [LV.6]常住居民II

    4

    主题

    414

    回帖

    1122

    积分

    金牌会员

    积分
    1122
    发表于 2024-4-11 16:24:21 | 显示全部楼层
    仿真一下看看,应该是软件问题
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-12 08:51
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    6

    回帖

    93

    积分

    注册会员

    积分
    93
     楼主| 发表于 2024-4-12 14:04:33 | 显示全部楼层
    原因已经查明,是因为没有加延时,我再回头看官方的例程时发现在while(1)循环中有个1ms的延时,所以我在程序中加上这个延时就OK了,
    但是我还是觉得官方的例程应该对这个1ms的延时要做一下解释,难道是因为数据没有发送完毕就执行了下一段程序导致了错误?
    附上官方例程的代码
    1. void main(void)
    2. {
    3.         u8        i;
    4.         EAXSFR();                /* 扩展寄存器访问使能 */
    5.         GPIO_config();
    6.         UART_config();
    7.         EA = 1;
    8.         PrintString2("STC8 UART2 Test Programme!\r\n");        //UART2发送一个字符串
    9.         while (1)
    10.         {
    11.                 delay_ms(1);
    12.                 if(COM2.RX_TimeOut > 0)                //超时计数
    13.                 {
    14.                         if(--COM2.RX_TimeOut == 0)
    15.                         {
    16.                                 if(COM2.RX_Cnt > 0)
    17.                                 {
    18.                                         for(i=0; i<COM2.RX_Cnt; i++)        TX2_write2buff(RX2_Buffer[i]);        //收到的数据原样返回
    19.                                 }
    20.                                 COM2.RX_Cnt = 0;
    21.                         }
    22.                 }
    23.         }
    24. }
    复制代码


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-4 11:20 , Processed in 0.074087 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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