新手请教,
我使用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--;
}
用 我们 屠龙刀-STC32G12K128 测试下,
或者将你正规原理图的PDF发上来
深圳国芯人工智能有限公司-核心功能实验板 (stcai.com)
就是用的你们提供的屠龙刀,是不是我程序那里设置问题
这个是我采集到的波形。 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);
}
那就用这个跑马灯程序来测试,测试通过再修改
要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。 又学一招 本帖最后由 tzz1983 于 2024-3-17 11:33 编辑
heguoxiao2024 发表于 2024-3-17 10:43
要设置为推挽输出才可以按我要求的时间输入。其它比如准双向不行吗?还是设置问题?这是设成推挽后的波形。 ...
IO口有寄生电容,示波器也有输入电容.准双向驱高能力不足,来不及拉高电平,就又变成低电平了.
高速翻转的IO要设置成推挽模式就是这个原因.
另外: 端口电平转换速度寄存器 PxSR 了解一下
端口驱动电流控制寄存器 PxDR 了解一下 空载,20MHz 的输出还是有保障的
页:
[1]
2