总结一下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)波形如下:

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

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

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

    总结一下STM8L101F3P6工作在16MHz下,利用死循环.中断等不同写法的微秒级延时函数精度的情况. 一.死循环空指令的写法,延时函数程序如下: /*********************** ...

  2. 无需另配定时器在STM32 HAL下实现微秒级延时(兼容FreeRTOS)

    目录 前言 一.代码部分 二.使用和验证 1.引入头文件 2.初始化 3.使用和验证 三.可移植性 总结 前言 接触HAL库差不多两年了,一直苦于HAL库没有自带微秒级的延时,网上的前辈们给出的解决方 ...

  3. Windows 微秒级 延时

    QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时. // 微秒级延时 参数: 微秒 void Control::MySleep(DWORD ...

  4. ms和us级延时函数的实现

    ms和us级延时函数的实现 2020 Sept. 8th 用sysTick实现延时 寄存器说明参考火哥(膜拜)的这篇博客:第18章 SysTick-系统定时器 用中断输出: //调用core_cmX. ...

  5. HAL库-us级延时函数实现

    已有的HAL_Delay() __weak void HAL_Delay(__IO uint32_t Delay) {uint32_t tickstart = 0U;tickstart = HAL_G ...

  6. QueryPerformanceCounter实现Windows微秒级延时

    windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时. 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerforma ...

  7. c语言微秒级延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define B break void de(int timee) { unsi ...

  8. 织女星开发板RISC-V内核实现微秒级精确延时

    文章目录 前言 关于LPIT0 ZERO核的SysTick定时器 delay.c文件 delay.h文件 实际验证 驱动IIC接口OLED 总结 参考资料 历史精选 前言 收到VEGA织女星开发板也有 ...

  9. Windows高精度微秒级(并发)定时器实现

    自从上次封装微秒延时函数后,利用空闲时间试着封装一个微秒定时器(类似MFC定时器形式)使用起来效果还不错. 关于定时器的几点介绍:    1.设计采用了自动释放定时器节点方式(增加虚析构函数在内部做相 ...

最新文章

  1. [R语言画图]气泡图symbols
  2. 关于main函数的(int argc,char *argv[])
  3. oraclf 复杂查询练习_刷完这些烧脑的SQL练习题,复杂查询才能熟能生巧
  4. 男人都应该懂的一张图。。 | 今日趣图
  5. 第7章:图像的平滑处理
  6. 深度学习(三)之LSTM写诗
  7. 江阳职高计算机应用教改实验,计算机应用课程教改模式
  8. 【Android】完善Android学习(二:API 2.3.4)
  9. 状压[Jxoi2012]奇怪的道路
  10. IndexedDB基本概念
  11. 计算机文本专业,15计算机专业2文字录入期中考试卷
  12. 优先级继承 linux,非独占锁的优先级继承协议及其在Linux下的实现
  13. .nh文件转化为pdf,word
  14. Python Tox 使用笔记
  15. 2021个人年度总结
  16. 密钥加密法(指针应用)
  17. 获取公众号的关注链接
  18. latex中求和符号的条件的换行处理
  19. java获取当前日期,前一天,前N天,去年同期等日期
  20. 7-4 身份证号码最后一位 (100分)

热门文章

  1. 基于python的停车场管理系统(毕设)
  2. 乌克兰计算机科学大学排名,乌克兰大学世界排名
  3. win10开机卡死在logo处无限转圈怎么办
  4. 计算机视觉:学术界与工业界GAP有多大?
  5. MFC程序最小化到托盘
  6. MD5加密算法及Java实现
  7. 林长制,林业一张图平台
  8. 机器学习KNN算法实践:预测城市空气质量
  9. Ubuntu16.04安装ZSH并美化,解决git乱码问题
  10. 我们日复一日努力奋斗的目的是什么