找回密码
 立即注册
查看: 132|回复: 6

STC8C2K32SS2 芯片,初始化串口2和串口3失败

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 10:22:14 | 显示全部楼层 |阅读模式
我使用STC8C2K32SS2  芯片,串口1初始正常使用,项目使用两个串口,我想初始化串口2,但是不能使用。我想问一下如何使用中断方式串口2,串口2初始化
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 10:26:07 | 显示全部楼层
定时器2  波特率9600
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 10:26:25 | 显示全部楼层
rkrs*** 发表于 2026-1-28 10:26
定时器2  波特率9600

定时器2  波特率9600
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 10:33:20 | 显示全部楼层

STC8C2K32SS2 芯片如何中断方式串口2初始化

我使用STC8C2K32SS2  芯片,串口1初始正常使用,项目使用两个串口,我想初始化串口2,但是不能使用。我想问一下如何使用中断方式串口2,串口2初始化
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 10:43:22 | 显示全部楼层

void Uart2Isr() interrupt 8
{
    if (S2CON & 0x02)
    {
        S2CON &= ~0x02;
        busy = 0;
    }
    if (S2CON & 0x01)
    {
        S2CON &= ~0x01;
        buffer[wptr++] = S2BUF;
                          P54 = !P54;       
        wptr &= 0x0f;
    }
}

void Uart2Init()
{
        S2CON = 0x50;                // 8位数据,可变波特率
        AUXR |= 0x04;            // 定时器2时钟为Fosc,即1T
        T2L = 0xE0;                        // 9600波特率
        T2H = 0xFE;                        //9600
        AUXR |= 0x10;                // 启动定时器2
        IE2   = ES2;        // 使能串口中断
        EA    = 1;          // 开总中断          
}

void Uart2Send(char dat)
{
    while (busy);
    busy = 1;
    S2BUF = dat;
}

void Uart2SendStr(char *p)
{
    while (*p)
    {
        Uart2Send(*p++);
    }
}
回复

使用道具 举报 送花

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

97

主题

7246

回帖

1万

积分

超级版主

积分
13798
发表于 2026-1-28 11:06:41 | 显示全部楼层
串口2固定使用定时器2做波特率发生器
可以使用ISP软件的串口波特率计算功能
除生成的代码外,初始化还需要P_SW2|=0x80和EA=1
截图202601281106119188.jpg
  1. void Uart2_Isr(void) interrupt 8
  2. {
  3.         if (S2CON & 0x02)        //检测串口2发送中断
  4.         {
  5.                 S2CON &= ~0x02;        //清除串口2发送中断请求位
  6.         }
  7.         if (S2CON & 0x01)        //检测串口2接收中断
  8.         {
  9.                 S2CON &= ~0x01;        //清除串口2接收中断请求位
  10.         }
  11. }
  12. void Uart2_Init(void)        //9600bps@11.0592MHz
  13. {
  14.         S2CON = 0x50;                //8位数据,可变波特率
  15.         AUXR |= 0x04;                //定时器时钟1T模式
  16.         T2L = 0xE0;                        //设置定时初始值
  17.         T2H = 0xFE;                        //设置定时初始值
  18.         AUXR |= 0x10;                //定时器2开始计时
  19.         IE2 |= 0x01;                //使能串口2中断
  20. }
复制代码

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-28 10:22:14
已绑定手机

3

主题

8

回帖

35

积分

新手上路

积分
35
发表于 2026-1-28 13:59:06 | 显示全部楼层
P_SW2|=0x80和EA=1  增加了这两个之后  接受数据书正确的,但是不能发送数据 是不是P11脚是不是设置为准双口
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-4 16:05 , Processed in 0.111726 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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