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)波形如下:
-------------------------------------------------------------------------------------------------------------------------
20140627-STM8L101F3P6关于微秒级延时函数不同写法的波形相关推荐
- 20140627-STM8L101F3P6关于毫秒级延时函数不同写法的波形
总结一下STM8L101F3P6工作在16MHz下,利用死循环.中断等不同写法的微秒级延时函数精度的情况. 一.死循环空指令的写法,延时函数程序如下: /*********************** ...
- 无需另配定时器在STM32 HAL下实现微秒级延时(兼容FreeRTOS)
目录 前言 一.代码部分 二.使用和验证 1.引入头文件 2.初始化 3.使用和验证 三.可移植性 总结 前言 接触HAL库差不多两年了,一直苦于HAL库没有自带微秒级的延时,网上的前辈们给出的解决方 ...
- Windows 微秒级 延时
QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时. // 微秒级延时 参数: 微秒 void Control::MySleep(DWORD ...
- ms和us级延时函数的实现
ms和us级延时函数的实现 2020 Sept. 8th 用sysTick实现延时 寄存器说明参考火哥(膜拜)的这篇博客:第18章 SysTick-系统定时器 用中断输出: //调用core_cmX. ...
- HAL库-us级延时函数实现
已有的HAL_Delay() __weak void HAL_Delay(__IO uint32_t Delay) {uint32_t tickstart = 0U;tickstart = HAL_G ...
- QueryPerformanceCounter实现Windows微秒级延时
windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时. 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerforma ...
- c语言微秒级延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define B break void de(int timee) { unsi ...
- 织女星开发板RISC-V内核实现微秒级精确延时
文章目录 前言 关于LPIT0 ZERO核的SysTick定时器 delay.c文件 delay.h文件 实际验证 驱动IIC接口OLED 总结 参考资料 历史精选 前言 收到VEGA织女星开发板也有 ...
- Windows高精度微秒级(并发)定时器实现
自从上次封装微秒延时函数后,利用空闲时间试着封装一个微秒定时器(类似MFC定时器形式)使用起来效果还不错. 关于定时器的几点介绍: 1.设计采用了自动释放定时器节点方式(增加虚析构函数在内部做相 ...
最新文章
- [R语言画图]气泡图symbols
- 关于main函数的(int argc,char *argv[])
- oraclf 复杂查询练习_刷完这些烧脑的SQL练习题,复杂查询才能熟能生巧
- 男人都应该懂的一张图。。 | 今日趣图
- 第7章:图像的平滑处理
- 深度学习(三)之LSTM写诗
- 江阳职高计算机应用教改实验,计算机应用课程教改模式
- 【Android】完善Android学习(二:API 2.3.4)
- 状压[Jxoi2012]奇怪的道路
- IndexedDB基本概念
- 计算机文本专业,15计算机专业2文字录入期中考试卷
- 优先级继承 linux,非独占锁的优先级继承协议及其在Linux下的实现
- .nh文件转化为pdf,word
- Python Tox 使用笔记
- 2021个人年度总结
- 密钥加密法(指针应用)
- 获取公众号的关注链接
- latex中求和符号的条件的换行处理
- java获取当前日期,前一天,前N天,去年同期等日期
- 7-4 身份证号码最后一位 (100分)