原子哥的第一个例子,跑马灯程序,我只是改了一下延时的子程序。 延时ms的和延时 us 的都改为循环等的方式,程序如下,及见附件。
在此我不是讨论它们的准确性,而是讨论它们在不同型号的芯片是运行的速度。即不同型号的STM32执行指令速度差很远。
void delay_ms(u16 nms)
{
u32 temp0;
for (temp0=0;temp0<nms*10;temp0++)
{delay_us(50);
}
}
void delay_us(u32 nus)
{
u32 temp1;
for (temp1=0;temp1<nus*5;temp1++)
{ ;
}
}
/////////////////////////////////////////////////////////////////////////////////////
主程序:LED0为测试用的LED灯。
while(1)
{
LED0=0; //关LED0
delay_ms(20);//延时20ms
LED0=1; //开LED0
delay_ms(20); 延时20ms
}
将这个程序分别下载入STM32F103C8T6 及 STM32F100C8
大家猜猜是谁跑的慢呀??
很出奇,平宜,而且性能不大好的100C8 竟然比103C8快好多。出来的效果就是100C8板子上的LED基来上看不到闪,即它的开关超过了人眼识别范围。
而103C8T6 却慢的多。明显的看到LED0脚上的LED灯在闪呀闪。这说明这个延时程序。在100C8上运行的快点,而在103C8上运行的慢点。
想请教一下原子大哥有没有什么寄存器是专门设置STM32的指令速度的。 另外,试过USART,系统滴答都正常。证明了,仅是这段延时程序不一样。更证明了是执行指令上的问题。而且我分别在3片103及3片100上都试验过了,情况都是这样。
请遇到过这样问题的网友指点一下,是不是我的测试不正确呢,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>