找回密码
 立即注册
楼主: 神***

波特率发生器要共用,只能共用 T2,串口1,串口2,串口3,串口4

[复制链接]

该用户从未签到

552

主题

9542

回帖

1万

积分

管理员

积分
14058
 楼主| 发表于 2024-1-29 13:22:15 | 显示全部楼层
截图202401291322084554.jpg

截图202401291323313923.jpg

截图202401291324369923.jpg


回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-2-9 10:04
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    8

    回帖

    50

    积分

    注册会员

    积分
    50
    发表于 2024-2-6 22:02:41 | 显示全部楼层

    我共用T2, UART1与PC通信做为调试串口,UART4与串口屏通信,没有问题。
    增加UART3(与同一块板子上的ESP32通信),主程序中只要增加“Uart3Init();”,串口屏上就看不到UART4发送的数据了,问题出在哪儿了呢?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9542

    回帖

    1万

    积分

    管理员

    积分
    14058
     楼主| 发表于 2024-2-6 22:16:49 | 显示全部楼层
    用仿真功能来调试分析你程序错在哪
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 21:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    1

    回帖

    12

    积分

    新手上路

    积分
    12
    发表于 2024-4-10 21:28:21 | 显示全部楼层
    请教下,我在STC8H8K64U上面使用 Timer2 做波特率发生器;同时使用串口1,2,3,4在中断方式下收发数据。现在的问题时1,3,4三个串口可以一起正常工作、或者1,2串口能一起正常工作。只要串口3,或者串口4初始化,串口2就不工作了。
    串口一初始化代码:
            TR1 = 0;
            AUXR &= ~0x01;      //S1 BRT Use Timer1;
            AUXR |=  (1<<6);    //Timer1 set as 1T mode
            TMOD &= ~(1<<6);    //Timer1 set As Timer
            TMOD &= ~0x30;      //Timer1_16bitAutoReload;
            TH1 = (u8)((65536UL - (FOSC / 4) / BAUD1) / 256);
            TL1 = (u8)((65536UL - (FOSC / 4) / BAUD1) % 256);
            ET1 = 0;    //禁止中断
            TR1  = 1;
            SCON = (SCON & 0x3f) | 0x40;  
            ES  = 1;    //允许中断
            REN = 1;    //允许接收
            P_SW1 & 0x3f;       //Clear bit7,bit6
            P_SW1 |= UART_IOSEL;
    串口二初始化代码:
            AUXR &= ~(1<<4);    //Timer2 stop
            AUXR &= ~(1<<3);    //Timer2 set As Timer
            AUXR |=  (1<<2);    //Timer2 set as 1T mode
            T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
            T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
            IE2  &= ~(1<<2);        //Disable Timer 2 Interrupt.
            AUXR |=  (1<<4);    //Timer run enable
            IE2  &= ~1;                    //Disable Uart2 Interrupt.
            S2CON &= ~(1<<7);   // 8位数据, 1位起始位, 1位停止位, 无校验
            IE2   |= 1;         //ES2
            S2CON |= (1<<4);    //允许接收
            P_SW2 & ~(1);
            P_SW2 |= UART_IOSEL;        //UART2 switch to: 0: P1.0 P1.1
    串口三、初始化代码:
            AUXR &= ~(1<<4);    //Timer stop
            AUXR &= ~(1<<3);    //Timer2 set As Timer
            AUXR |=  (1<<2);    //Timer2 set as 1T mode
            T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
            T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
            IE2  &= ~(1<<3);    //禁止中断
            IE2  &= ~(1<<2);
            AUXR |=  (1<<4);    //Timer run enable
            S3CON &= ~(1<<7);   //mode0:8位数据, 1位起始位, 1位停止位, 无校验
            S3CON &= ~(1<<6);   //S3ST3:select Timer 2
            //IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
            IE2   |= (1<<3);    //ES3允许中断
            S3CON |= (1<<4);    //允许接收
            //P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
            P_SW2 & ~(1<<1);
            P_SW2 |= (UART_IOSEL < 1);        //UART3 switch to: 0: P0.0,P0.1
    串口四初始化代码:
            AUXR &= ~(1<<4);    //Timer2 stop
            AUXR &= ~(1<<3);    //Timer2 set As Timer
            AUXR |=  (1<<2);    //Timer2 set as 1T mode
            T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
            T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
           
            IE2  &= ~(1<<2);
            AUXR |=  (1<<4);    //Timer run enable

            IE2  &= ~(1<<4);    //Uart4 Interrupt Disable.
            S4CON &= ~(1<<7);   // 8位数据, 1位起始位, 1位停止位, 无校验
            S4CON &= ~(1<<6);   //S3ST3:select Timer 2
            //IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
            IE2  |= (1<<4);                //Uart4 Interrupt Enable.
            S4CON |= (1<<4);    //允许接收
            //S2_S:bit0; S3_S:bit1; S4_S:bit2
            //S2_S:0-P1.0,P1.1;1-P4.6,P4.7
            //S3_S:0-P0.0,P0.1;1-P5.0,P5.1
            //S4_S:0-P0.2,P0.3;1-P5.2,P5.3
       
            //P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
            P_SW2 & ~(1<<2);
            P_SW2 |= (UART_IOSEL < 2);        //UART4 switch to: 0: P0.2 P0.3
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9542

    回帖

    1万

    积分

    管理员

    积分
    14058
     楼主| 发表于 2024-4-10 21:54:43 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9542

    回帖

    1万

    积分

    管理员

    积分
    14058
     楼主| 发表于 2024-4-10 21:56:59 | 显示全部楼层
    截图202404102156561948.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 16:07 , Processed in 0.084122 second(s), 50 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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