heguoxiao2024 发表于 2024-3-17 09:54:18

新手请教,

我使用STC32G12K128来控制一个IO口翻转,为什么当延时为几十毫秒时波形正常,但是微秒级时全部是低电平了。是设置问题吗?void main(void)
{               
        sysini();               
        while(1)               
        {
          SDA = 0;
                Delay2us();
                SDA = 1;
                Delay2us();
        }       

}

void sysini()
{
                EAXFR = 1;                                                                                                 // 使能访问 XFR
                CKCON = 0x00;                                                                                 // 设置外部数据总线速度为最快
                WTST = 0x00;                                                                                        // 设置程序代码等待参数,等待时间为0个时钟,CPU执行程序速度最快
                               
                P0M1 = 0x00;P0M0 = 0x00;                                        // 设置P0口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P1M1 = 0x00;P1M0 = 0x00;                                        // 设置P1口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出


                P2M1 = 0x00;P2M0 = 0x00;                                        // 设置P2口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P3M1 = 0x00;P3M0 = 0x00;                                        // 设置P3口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P4M1 = 0x00;P4M0 = 0x00;                                        // 设置P4口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P5M1 = 0x00;P5M0 = 0x00;                                        // 设置P5口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P6M1 = 0x00;P6M0 = 0x00;                                        // 设置P6口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
                P7M1 = 0x00;P7M0 = 0x00;                                        // 设置P7口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
       
                P1M0 |= 0x30; P1M1 |= 0x30;
}


void Delay2us(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        _nop_();
        i = 10UL;
        while (i) i--;
}


神农鼎 发表于 2024-3-17 10:04:47

用 我们 屠龙刀-STC32G12K128 测试下,
或者将你正规原理图的PDF发上来

深圳国芯人工智能有限公司-核心功能实验板 (stcai.com)



heguoxiao2024 发表于 2024-3-17 10:10:35

就是用的你们提供的屠龙刀,是不是我程序那里设置问题

heguoxiao2024 发表于 2024-3-17 10:12:28

这个是我采集到的波形。

heguoxiao2024 发表于 2024-3-17 10:15:43

void sysini();这个函数不变,把延时加长,波形如下。
void main(void)
{               
        sysini();               
        while(1)               
        {
          SDA = 0;
                //Delay2us();
                delayms(500);
                SDA = 1;
                //Delay2us();
                delayms(500);
        }       
}

voiddelayms(u16 ms)                //简单延时函数,自适应主频,1毫秒*ms
{
        u16 i;
        do{
                        i = MAIN_Fosc / 240000;
                        while(--i);
                }while(--ms);
}


神农鼎 发表于 2024-3-17 10:16:54



那就用这个跑马灯程序来测试,测试通过再修改


heguoxiao2024 发表于 2024-3-17 10:43:10

要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。

soma 发表于 2024-3-17 11:09:01

又学一招

tzz1983 发表于 2024-3-17 11:31:08

本帖最后由 tzz1983 于 2024-3-17 11:33 编辑

heguoxiao2024 发表于 2024-3-17 10:43
要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。 ...
IO口有寄生电容,示波器也有输入电容.准双向驱高能力不足,来不及拉高电平,就又变成低电平了. 
高速翻转的IO要设置成推挽模式就是这个原因.
另外: 端口电平转换速度寄存器 PxSR 了解一下
    端口驱动电流控制寄存器 PxDR 了解一下

神农鼎 发表于 2024-3-17 12:46:41

空载,20MHz 的输出还是有保障的
页: [1] 2
查看完整版本: 新手请教,