2974786048的专栏

那些年我干过那些事儿……

20140627-STM8L101F3P6关于微秒级延时函数不同写法的波形

总结一下STM8L101F3P6工作在16MHz下,利用死循环、中断等不同写法的微秒级延时函数精度的情况。


一、死循环空指令的写法,延时函数程序如下:

/******************************************************************************/
/* Function name:       Delay_us                                              */
/* Descriptions:        微秒级延时函数函数,16MHz时钟                         */
/* input parameters:    nCount延时时间                                        */
/* output parameters:   无                                                    */
/* Returned value:      无                                                    */
/******************************************************************************/
void Delay_us(unsigned int nCount) 
{ 
    for (; nCount != 0; nCount--);
}
调用函数如下:

/******************************************************************************/
/* Function name:       main                                                  */
/* Descriptions:        主函数                                                */
/* input parameters:    无                                                    */
/* output parameters:   无                                                    */
/* Returned value:      无                                                    */
/******************************************************************************/
main()
{
    BoardInit();

    while(1)
    {
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);
        Delay_us(1);
        GPIO_SetBits(GPIOC,GPIO_Pin_2);
        Delay_us(1);
    }
}



Delay_us(1)大约延时3.3微秒。

Delay_us(10)大约延时10.58微秒。

Delay_us(100)大约延时83.465微秒。

Delay_us(1000)大约延时8118.5微秒。


可以看到,这种利用死循环来写的微秒级的延时,其精度实在太低,毫无规律可言。根本原因与指令流水、代码量、编译器优化等均有关系,我现在说不清楚,估计一两句也说不清楚。在微秒级的延时函数如此糟糕的精度下,如果利用该函数来模拟如IIC和SPI的时序,或是其它速度较快的通信协议时,其根本无法保证精度,结果可想而知,事必要花一定的时间来调时序,累时,费力,费人。


Delay_us(1)波形如下:



Delay_us(10)波形如下:



Delay_us(100)波形如下:



Delay_us(1000)波形如下:


-------------------------------------------------------------------------------------------------------------------------


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sy_lixiang/article/details/35232759
个人分类: A02-STM8
上一篇20140626-STM8L101F3P6编程中关于assert_param()断言的小结
下一篇20140627-STM8L101F3P6关于毫秒级延时函数不同写法的波形
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭