1.stm32粗延时函数

1.stm32粗延时函数

粗延时的意思就是延时时间不太准确,一般用在对延时时间要求不严格的场合。这种延时方式是采用软件延时,但因为编译器会在编译的时候加上一些其他辅助指令,所以不能确定C程序的准确运行时间。我们可以采用下面的方法进行估算:

假设stm32 MCU系统时钟(SYSCLK)为48MHz,指令周期为4个系统时钟,则一个指令周期时长为1/12微秒。
若要让计时单位为微秒(us),则可以让CPU空转约12次,即在软件上可以令减数周期变量为12,但由于存在其他辅助指令,所以可以将这个减数周期减小一些,比如10。

类似地,若以毫秒(ms)为计时单位,则可以让CPU空转12000次。空转次数越多,则其他辅助指令占用时间相对越短。

以微秒(us)为单位进行延时:

void delay_us(u16 us_time)
{
u16 i=0;
while(us_time--)
{
i=10; // 这要根据系统时钟频率进行计算
while(i--) ; // 延时主操作,空操作
}
}
以毫秒(ms)为单位进行延时:

void delay_ms(u16 ms_time)
{
u16 i=0;
while(ms_time--)
{
i=12000; // 以ms为单位
while(i--) ;
}

————————————————
版权声明:本文为CSDN博主「tuxinbang1989」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tuxinbang1989/article/details/89758955

粗延时的意思就是延时时间不太准确,一般用在对延时时间要求不严格的场合。这种延时方式是采用软件延时,但因为编译器会在编译的时候加上一些其他辅助指令,所以不能确定C程序的准确运行时间。我们可以采用下面的方法进行估算:

假设stm32 MCU系统时钟(SYSCLK)为48MHz,指令周期为4个系统时钟,则一个指令周期时长为1/12微秒。
若要让计时单位为微秒(us),则可以让CPU空转约12次,即在软件上可以令减数周期变量为12,但由于存在其他辅助指令,所以可以将这个减数周期减小一些,比如10。

类似地,若以毫秒(ms)为计时单位,则可以让CPU空转12000次。空转次数越多,则其他辅助指令占用时间相对越短。

以微秒(us)为单位进行延时:

void delay_us(u16 us_time)
{
u16 i=0;
while(us_time--)
{
i=10; // 这要根据系统时钟频率进行计算
while(i--) ; // 延时主操作,空操作
}
}
以毫秒(ms)为单位进行延时:

void delay_ms(u16 ms_time)
{
u16 i=0;
while(ms_time--)
{
i=12000; // 以ms为单位
while(i--) ;
}

————————————————
版权声明:本文为CSDN博主「tuxinbang1989」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tuxinbang1989/article/details/89758955

原文地址:https://www.cnblogs.com/aker-whale/p/14649791.html