神清气爽 发表于 2025-12-30 13:25:40

STC32G12K128--T1做外部计数器--模式1时的问题

STC32G128--T1做外部计数器(P3.5)--模式1(16位不自动重载模式)时,计数能正常工作.但影响串口2(TXD2_2)P4.7--打印串口(T2做波特率定时器),
使打印输出为一个固定字符(这是打印串口输出的数据80 80 00 80 00 80 00 80 80 00 80 80 80 80).
但如果外部计数器改为模式模式0,一切正常,打印和计数都正常.
下面是分别模式1和模式0的c代码
打印串口2的初始化代码:

void Init_UART2(void)
{
      S2_S=1;                        //打印串口2切换到P4.6,P4.7
      S2CON = 0x50;                //8位数据,可变波特率
      AUXR &= 0xFB;                //T2--12T
      T2L = 0xd0;                //设定定时初值9600
      T2H = 0xff;
      AUXR |= 0x10;                //启动T2
      ES2=0;                        //禁止串口2中断--打印查询方式
}


计数器1模式1代码


//计数器1初始化
void Time1_Init(void)
{
      AUXR |= 0x40;                //计数器1时钟1T模式
      TMOD |= 0x50;                //设置计数器1模式
      TL1 = 0x00;                        //初值
      TH1 = 0x00;
      TF1 = 0;
      TR1=1;
}

计数器1模式0代码


//计数器1初始化
void Time1_Init(void)
{
      AUXR |= 0x40;                //计数器1时钟1T模式
      TMOD |= 0x40;                //设置计数器0模式
      TL1 = 0x00;                        //初值
      TH1 = 0x00;
      TF1 = 0;
      TR1=1;
}

希望各位大神能解释一下是什么原因.
我的理解T1和串口2是完全互不相干的两部分,不应该有干涉.

DebugLab 发表于 2025-12-30 15:52:37

程序未发现问题
串口2固定用定时器2做波特率发生器

乘风飞扬 发表于 2025-12-30 17:04:34

串口2初始化代码加这条指令:
S2CFG |= 0x01;//使用串口2时,W1位必需设置为1,否则可能会产生不可预期的错误
用附件例子测试

神清气爽 发表于 2025-12-30 19:08:46

你说的W1的问题 , 虽然W1没有置1但: 1. 在没有使用T1作为外部计数器时, 串口2是正常的.
                                                       2. T1模式1: T1外部计数正常, 串口2不正常, 而T1模式0两个都正常.
                                                       3. T1和串口2是两个独立的单元,应该是不会互相干涉的
以上疑问是不是芯片有BUG.
页: [1]
查看完整版本: STC32G12K128--T1做外部计数器--模式1时的问题