找回密码
 立即注册
查看: 1408|回复: 15

新手请教,

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2024-07-30 15:52:16

1

主题

4

回帖

81

积分

注册会员

积分
81
发表于 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--;
}


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17304
发表于 2024-3-17 10:04:47 | 显示全部楼层
用 我们 屠龙刀-STC32G12K128 测试下,
或者将你正规原理图的PDF发上来
截图202403171003494100.jpg
深圳国芯人工智能有限公司-核心功能实验板 (stcai.com)
截图202403171004293793.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2024-07-30 15:52:16

1

主题

4

回帖

81

积分

注册会员

积分
81
发表于 2024-3-17 10:10:35 | 显示全部楼层
就是用的你们提供的屠龙刀,是不是我程序那里设置问题
[img][/img]
截图202403171009498173.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2024-07-30 15:52:16

1

主题

4

回帖

81

积分

注册会员

积分
81
发表于 2024-3-17 10:12:28 | 显示全部楼层
这个是我采集到的波形。
截图202403171012166803.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2024-07-30 15:52:16

1

主题

4

回帖

81

积分

注册会员

积分
81
发表于 2024-3-17 10:15:43 | 显示全部楼层
void sysini();这个函数不变,把延时加长,波形如下。
void main(void)
{               
        sysini();               
        while(1)               
        {
          SDA = 0;
                //Delay2us();
                delayms(500);
                SDA = 1;
                //Delay2us();
                delayms(500);
        }       
}

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


截图202403171014442192.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17304
发表于 2024-3-17 10:16:54 | 显示全部楼层


那就用这个跑马灯程序来测试,测试通过再修改
截图202403171016192381.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2024-07-30 15:52:16

1

主题

4

回帖

81

积分

注册会员

积分
81
发表于 2024-3-17 10:43:10 | 显示全部楼层
要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。
截图202403171042503246.jpg

点评

IO口有寄生电容,准双向来不及拉高电平,就又变成低电平了.  高速翻转的IO要设置成推挽模式就是这个原因. 另外: 端口电平转换速度寄存器 PxSR 了解一下     端口驱动电流控制寄存器 PxDR 了一下  详情 回复 发表于 2024-3-17 11:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-07-01 00:52:47
已绑定手机

19

主题

3233

回帖

5355

积分

论坛元老

积分
5355
发表于 2024-3-17 11:09:01 | 显示全部楼层
又学一招
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-07-01 12:56:53

34

主题

1095

回帖

2478

积分

荣誉版主

积分
2478
发表于 2024-3-17 11:31:08 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-17 11:33 编辑
heguoxi*** 发表于 2024-3-17 10:43
要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。 ...

IO口有寄生电容,示波器也有输入电容.准双向驱高能力不足,来不及拉高电平,就又变成低电平了. 
高速翻转的IO要设置成推挽模式就是这个原因.
另外: 端口电平转换速度寄存器 PxSR 了解一下
    端口驱动电流控制寄存器 PxDR 了解一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-07-01 08:26:02

741

主题

1万

回帖

1万

积分

管理员

积分
17304
发表于 2024-3-17 12:46:41 | 显示全部楼层
空载,20MHz 的输出还是有保障的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-1 23:40 , Processed in 0.126906 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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