找回密码
 立即注册
查看: 167|回复: 9

求救!!串口通讯异常

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 10:23:55 | 显示全部楼层 |阅读模式
求救!!!将从官网下载的例程 “STC15系列库函数与例程测试版V2.0\例程\06-串口1中断收发\C语言” 编译下载到板子上后,用串口助手发命令,有数据返回,但返回的数据不对,这是什么情况?


[09:58:47.005]发→◇AA 00 00 □
[09:58:47.007]收←◆FE 80 00
[10:03:24.741]发→◇AA 01 01 □
[10:03:24.745]收←◆FE 80 00



我使用的是芯片型号是STC15W20S ,下载和通讯口都是P3.0和P3.1

截图202601061021388214.jpg 截图202601061019345741.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2026-04-02 10:16:19
已绑定手机

4

主题

245

回帖

885

积分

高级会员

积分
885
发表于 2026-1-6 10:54:48 | 显示全部楼层
建议上传工程,并检查串口助手“更多串口设置”里的数据位、校验位、停止位设置。
建议单片机上电时主动发送一串数据,用于检验其波特率是否准确。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 11:27:41 | 显示全部楼层
lcws*** 发表于 2026-1-6 10:54
建议上传工程,并检查串口助手“更多串口设置”里的数据位、校验位、停止位设置。
建议单片机上电时主动发 ...

/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/
/* --- Web: www.GXWMCU.com -----------------------------------------*/
/* --- QQ:  800003751 ----------------------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article, please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/


/*************        功能说明        **************

串口1全双工中断方式收发通讯程序。本例程使用22.1184MHZ时钟,如要改变,请修改下面的"定义主时钟"的值并重新编译。

串口设置为:115200,8,n,1.

通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.

******************************************/

/*************        本地常量声明        **************/
#define MAIN_Fosc                22118400L        //定义主时钟
#define        RX1_Lenth                32                        //串口接收缓冲长度
#define        BaudRate1                115200UL        //选择波特率


#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重装值, 对应300KHZ
#define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重装值, 对应300KHZ

#include        "STC15Fxxxx.H"


/*************        本地变量声明        **************/
u8        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
u8        TX1_Cnt;        //发送计数
u8        RX1_Cnt;        //接收计数
bit        B_TX1_Busy;        //发送忙标志


/*************        本地函数声明        **************/



/**********************************************/
void main(void)
{
        B_TX1_Busy = 0;
        RX1_Cnt = 0;
        TX1_Cnt = 0;

        S1_8bit();                                //8位数据
        S1_USE_P30P31();                //UART1 使用P30 P31口        默认
//        S1_USE_P36P37();                //UART1 使用P36 P37口
//        S1_USE_P16P17();                //UART1 使用P16 P17口

/*
        TR1 = 0;                        //波特率使用Timer1产生
        AUXR &= ~0x01;                //S1 BRT Use Timer1;
        AUXR |=  (1<<6);        //Timer1 set as 1T mode
        TH1 = (u8)(Timer1_Reload >> 8);
        TL1 = (u8)Timer1_Reload;
        TR1  = 1;
*/

        AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2产生
        AUXR |= 0x01;                //S1 BRT Use Timer2;
        AUXR |=  (1<<2);        //Timer2 set as 1T mode
        TH2 = (u8)(Timer2_Reload >> 8);
        TL2 = (u8)Timer2_Reload;
        AUXR |=  (1<<4);        //Timer run enable

        REN = 1;        //允许接收
        ES  = 1;        //允许中断

        EA = 1;                //允许全局中断
       

        while (1)
        {
                if(TX1_Cnt != RX1_Cnt)                //收到过数据
                {
                        if(!B_TX1_Busy)                //发送空闲
                        {
                                B_TX1_Busy = 1;                //标志发送忙
                                SBUF = RX1_Buffer[TX1_Cnt];        //发一个字节
                                if(++TX1_Cnt >= RX1_Lenth)        TX1_Cnt = 0;        //避免溢出处理
                        }
                }
        }
}

/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI = 0;
                RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
                if(++RX1_Cnt >= RX1_Lenth)        RX1_Cnt = 0;        //避免溢出处理
        }

        if(TI)
        {
                TI = 0;
                B_TX1_Busy = 0;                //清除发送忙标志
        }
}
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 11:28:25 | 显示全部楼层
lcws*** 发表于 2026-1-6 10:54
建议上传工程,并检查串口助手“更多串口设置”里的数据位、校验位、停止位设置。
建议单片机上电时主动发 ...

就是直接用的例程,我是想要用例程先验证一下串口通讯
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 11:30:54 | 显示全部楼层
串口助手的配置
截图202601061130367571.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2026-04-02 09:03:11
已绑定手机

5

主题

18

回帖

976

积分

高级会员

积分
976
发表于 2026-1-6 11:52:05 | 显示全部楼层
peng*** 发表于 2026-1-6 11:30
串口助手的配置

下载时有没有修改时钟
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2026-04-02 10:16:19
已绑定手机

4

主题

245

回帖

885

积分

高级会员

积分
885
发表于 2026-1-6 12:03:08 | 显示全部楼层
peng*** 发表于 2026-1-6 11:27
/*------------------------------------------------------------------*/
/* --- STC MCU Internationa ...


我未下载过这个例程,所以需要看代码才知道流程。
代码暂未发现问题,程序看起来就是收到啥就发啥。
考虑一下在while(1)之前发送一串数据。

目前怀疑是波特率有差异,建议检查STC-ISP下载时,是否有调节IRC频率为22.1184MHz。
或者用示波器测一下发送数据波形看波特率是否准确。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:725
  • 最近打卡:2026-03-30 12:09:34
已绑定手机

97

主题

7246

回帖

1万

积分

超级版主

积分
13798
发表于 2026-1-6 12:50:18 | 显示全部楼层
可能是波特率或时钟不匹配
建议使用ISP软件的串口助手
截图202601061250163774.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 14:54:18 | 显示全部楼层
lcws*** 发表于 2026-1-6 12:03
我未下载过这个例程,所以需要看代码才知道流程。
代码暂未发现问题,程序看起来就是收到啥就发啥。
考 ...

感谢,下载时将ISP的IRC频率改成22.1184M就可以了
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2026-01-06 10:23:55
已绑定手机

1

主题

5

回帖

15

积分

新手上路

积分
15
发表于 2026-1-6 14:55:13 | 显示全部楼层
Debu*** 发表于 2026-1-6 12:50
可能是波特率或时钟不匹配
建议使用ISP软件的串口助手

是时钟不匹配,下载时在ISP上改IRS的频率就好了
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-3 02:15 , Processed in 0.133677 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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