打印
[开发工具]

【转】STM8L101F3P6关于毫秒级延时函数不同写法的波形

[复制链接]
615|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

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


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


[cpp] view plain copy


  • /******************************************************************************/  
  • /* Function name:       Delay_ms                                              */  
  • /* Descriptions:        毫秒级延时函数函数,16MHz时钟                         */  
  • /* input parameters:    nCount延时时间                                        */  
  • /* output parameters:   无                                                    */  
  • /* Returned value:      无                                                    */  
  • /******************************************************************************/  
  • void Delay_ms(unsigned int nCount)  
  • {  
  •     uint16_t i=0,j=0;;  
  •     for(i=0;i<nCount;i++)  
  •     {  
  •         for(j=0;j<1142;j++)  
  •         {;}  
  •     }  
  • }  

调用函数如下:

[cpp] view plain copy


  • /******************************************************************************/  
  • /* Function name:       main                                                  */  
  • /* Descriptions:        主函数                                                */  
  • /* input parameters:    无                                                    */  
  • /* output parameters:   无                                                    */  
  • /* Returned value:      无                                                    */  
  • /******************************************************************************/  
  • main()  
  • {  
  •     BoardInit();  
  •   
  •     enableInterrupts();  
  •   
  •     while(1)  
  •     {  
  •         GPIO_ResetBits(GPIOC,GPIO_Pin_2);  
  •         Delay_ms(1);  
  •         GPIO_SetBits(GPIOC,GPIO_Pin_2);  
  •         Delay_ms(1);  
  •     }  
  • }  



Delay_ms(1);大约延时1毫秒

Delay_ms(10);大约延时9.9835毫秒

Delay_ms(100);大约延时99.74毫秒

Delay_ms(1000);大约延时997.05毫秒

可以看到,这种利用死循环来写的毫秒级的延时,与微秒级的延时来比,相对来说,精度已经提高了不少。但是要知道,这种死循环的延时是与代码量也有关系的,在代码变多的情况下,如果想提高ms级的精度,要适当的调整循环值,并且要用示波器进行观察。这种方法的缺点就不多说了,CPU占用率太高,效率低下,浪费能源。


Delay_ms(1)的波形:



Delay_ms(10)的波形:



Delay_ms(100)的波形:



Delay_ms(1000)的波形:


发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

116

帖子

0

粉丝