打印
[STM32]

立创商城STM32F系列——delay_xms函数

[复制链接]
795|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小乐Tzz|  楼主 | 2018-8-25 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
delay_xms函数
/**********************************************************/
该函数仅在没用到 OS 的时候使用,用来延时指定的 ms,其参数 nms 为要延时的毫秒数。该函数代码如下:
//延时nms   
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为 Hz,nms单位为 ms
//对 168M条件下,nms<=798ms   
void delay_xms(u16 nms)
{                 
  u32 temp;         
  SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD 为24bit)
  SysTick->VAL =0x00;           //清空计数器
  SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;    //开始倒数     
  do
  {
    temp=SysTick->CTRL;
  }while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达     
  SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;     //关闭计数器
  SysTick->VAL =0X00;       //清空计数器            
}
此部分代码和5.1.3节的delay_us(非OS版本)大致一样,但是要注意因为LOAD 仅仅是
一个 24bit的寄存器,延时的ms数不能太长。否则超出了 LOAD的范围,高位会被舍去,导致
延时不准。最大延迟 ms 数可以通过公式:nms<=0xffffff*8*1000/SYSCLK 计算。SYSCLK 单
位为Hz,nms的单位为 ms。如果时钟为168M,那么 nms的最大值为798ms。超过这个值,建
议通过多次调用delay_xms实现,否则就会导致延时不准确。
很显然,仅仅提供delay_xms函数,是不够用的,很多时候,我们延时都是大于798ms的,
所以需要再做一个 delay_ms函数,下面将介绍该函数。
/**********************************************************/


【立创商城】STM32F103CBT6 托盘  https://item.szlcsc.com/8796.html

相关帖子

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

本版积分规则

70

主题

70

帖子

0

粉丝