找回密码
 立即注册
查看: 166|回复: 5

求解 Ai32g8k64 uart2 只有加上 TMOD=0x01; uart2就無法使用, 收發均不能用

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-18 10:01:25
已绑定手机

2

主题

4

回帖

21

积分

新手上路

积分
21
发表于 2024-11-14 17:00:04 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-11-14 17:04 编辑

各位大老, 求解或問題所在


你好, 我有一個問題, 一直沒法解決
原本使用
Ai8g2k64s4  和 Ai8h8k64
和式一直很正常

最近改用  stc32g8k64
大部份問題都解決
但有個問題 uart2,  一直解決不了
我把程序簡化到最簡單
發現   uart2 正常

但只要一加上
TMOD=0x01;

uart2   就無法收法正常







#include "stc32g.h"

sbit RS_485_2     = P4^1;

//===============================================================
//GLOBAL VARIABLE
//===============================================================
bit bU0TX_2 = 0;


    //------------------------------------------------------------------------
//  UART2  22.1184  9600  USE TIME2  1T
//------------------------------------------------------------------------

void Uart2_Init(void)    //9600bps@22.1184MHz
{
    S2CON = 0x50;        //8 bits and variable baudrate
    AUXR |= 0x04;        //imer clock is 1T mode
    T2L = 0xC0;            //Initial timer value
    T2H = 0xFD;            //Initial timer value
    AUXR |= 0x10;        //Timer2 start run
}

void UART2_Isr() interrupt 8
{

        // UART2  TI
    if (S2CON & 0x02)
    {
        S2CON &= ~0x02;
        bU0TX_2    = 0;
    }

        // UART2 RI
    if (S2CON & 0x01)
    {
        S2CON &= ~0x01;

    }
}   


void PutByte2(unsigned char n_temp0)
{   
    bU0TX_2    = 1;
    S2BUF    = n_temp0;
    while(bU0TX_2)
    {
        ;
    }
}




void IO_init(void)
{
  P0M0 = 0X00;P0M1 = 0X00;
  P1M0 = 0X00;P1M1 = 0X00;
  P2M0 = 0X00;P2M1 = 0X00;
  P3M0 = 0X00;P3M1 = 0X00;
  P4M0 = 0X00;P4M1 = 0X00;
  P5M0 = 0X00;P5M1 = 0X00;
  P6M0 = 0X00;P6M1 = 0X00;
  P7M0 = 0X00;P7M1 = 0X00;   
}






void main()
{

//    STC32G8K64

    WTST = 0;          //設置程式指令延時參數,賦值為0可將CPU執行指令的速度設置為最快
    EAXFR = 1;         //擴展寄存器(XFR)訪問使能/
    CKCON = 0;         //提高訪問XRAM速度   

    IO_init();


    Uart2_Init();
  ES2=1;


    // 只要加上行,  因為我有程序, 需要要到  TIME 的 模式一, 但一加上這行,  UART2  收發就都不正常
    // 我試了快2週, 還是解決不了
    //-----------------------------
    TMOD=0x10;
    //-----------------------------


  EA   = 1;


    RS_485_2=1;
    PutByte2('2');
    PutByte2('2');   
    PutByte2('2');
    RS_485_2=0;


  while(1)
  {

  }

}


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-18 10:01:25
已绑定手机

2

主题

4

回帖

21

积分

新手上路

积分
21
发表于 2024-11-14 17:01:33 | 显示全部楼层
本帖最后由 stonychi 于 2024-11-14 17:03 编辑

不加上  TMOD=0x01;

送電會送出   9600, n, 8,1  
222
三個2

但一加上  TMOD=0x01;
uart2  就不能通訊

一直試了二週, 程序已簡化
懹疑是不是  蕊片 bug




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-11-14 17:17:34 | 显示全部楼层

描述前后不符:
截图202411141714115990.jpg

截图202411141714262060.jpg

0x01是定时器0,0x10是定时器1,不知道你要用哪个定时器
建议使用TMOD|=0x01或TMOD|=0x10,避免影响其他位
没有看到其他配置定时器的语句
如打开定时器0或定时器1中断,必须有相应的中断函数
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-18 10:01:25
已绑定手机

2

主题

4

回帖

21

积分

新手上路

积分
21
发表于 2024-11-14 17:21:31 | 显示全部楼层
本帖最后由 stonychi 于 2024-11-14 17:49 编辑

不好意思,   上面   TMOD=0x10 , 才對

截图202411141724559302.jpg

点评

TMOD不应该影响作为波特率发生器的T2  详情 回复 发表于 2024-11-14 17:46
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-11-14 17:46:35 | 显示全部楼层
ston*** 发表于 2024-11-14 17:21
不好意思,   上面   TMOD=0x10 , 才對

TMOD不应该影响作为波特率发生器的T2
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-18 10:01:25
已绑定手机

2

主题

4

回帖

21

积分

新手上路

积分
21
发表于 2024-11-14 17:58:39 | 显示全部楼层
本帖最后由 stonychi 于 2024-11-14 18:00 编辑
Debu*** 发表于 2024-11-14 17:46
TMOD不应该影响作为波特率发生器的T2

我 uart2  便用  time2
但只要   time1 便用  mode 1  , uart 就不能用

我使用    stc8g2k64s4,  stc8h8k64    程序都能正常

換上   stc32g8k64    和   stc32g8k64  beta 版   都不正常



time0   模式一
time1   模式0
(不影响  uart 2 完全正常)

        //-----------------------------
                TMOD|=0x01;
                TH0=0x80;
                TL0=0x80;
                TR0=1;
               
                TH1=0x80;
                TL1=0x80;
                TR1=1;               
        //-----------------------------        



//-----------------------------------------------
//    下方  uart2  只接不能用
//-----------------------------------------------
time0   模式0
time1   模式1
(影响 ---- uart 2 不能用)
        //-----------------------------
                TMOD|=0x10;
                TH0=0x80;
                TL0=0x80;
                TR0=1;
               
                TH1=0x80;
                TL1=0x80;
                TR1=1;               
        //-----------------------------        
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:01 , Processed in 0.155435 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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