历史上的今天
今天是:2025年03月26日(星期三)
2020年03月26日 | STM8L101F3P6关于微秒级延时函数不同写法的波形
2020-03-26 来源:eefocus
总结一下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)波形如下:
上一篇:STM32固件库详解
史海拾趣
|
求 无线电子音乐门铃 相关论文。 资料 资料虽好,仅供参考,还是要自己做啊. 16×16点阵(滚动显示)论文+程序.rar cdma通信系统中的接入信道部分进行仿真与分析.rar LED ...… 查看全部问答> |
|
看这篇帖子的,我想都是电子爱好者或电类专业学生。不知道大家都处于什么一个阶段,这篇帖子是写给入门者的,要解决一个问题:初学者应重点掌握什么电子知识,大学阶段如何学习? 先说点貌似题外的东西——3个谬论。 谬论一:高中老师 ...… 查看全部问答> |
|
多波形信号发生器 要求:1. 能产生5种波形,至少要有三种:正弦,方波,三角波 2. 可以调频和调幅,频率为10HZ到20KHZ以上,幅度为0~5V,步进可以自己设定。 3. 求好心人帮忙,论文我自己 ...… 查看全部问答> |
|
我用evc4.0做了一个DLL。在PPC2003,WM5,WM6机种下基本都能正常调用。 但是在WM6 standard下失败。 hDll = ::LoadLibrary(L\".\\\\*.dll\"); 返回NULL。 请问如何解决? 谢谢。 … 查看全部问答> |
|
我要开发一套和IC卡有关的应用,最终目标是通过PC机要能读出和修改IC卡上面的数据。 目前的情况是;我手上有一套功能完好的IC卡读写装置,是之前的人开发出来的,开发出来后人就走了,也没有找到留下来的 ...… 查看全部问答> |
|
有几个问题不明白,望指教 1.在判断spare区相应字节是否是ff之前,是不是必须先要执行块擦除指令BlockErease,然后才能判断spare区的相应字节;可以直接判断该spare区的相应字节是否为ff么? 2.我在程序初始化的时候建立了一个block table, ...… 查看全部问答> |
|
大家给个方案吧。 MCU: STM32F103VG 接个七寸大屏,我自己想了两个方案: 方案一:用SSD1963做LCD驱动器 缺点:占用太多GPIO口,还要用到FSMC,怕刷屏速度跟不上。 &n ...… 查看全部问答> |




